【发布时间】:2016-07-06 08:43:18
【问题描述】:
在 hook_user_login 上,我想删除给定内容类型的登录用户拥有的超过 21 天的节点。
下面的代码可以正常工作(没有日期条件):
function mymodule_user_login(&$edit, $account) {
global $user;
$myuid = $user->uid;
$mytype = 'testdelete';
$mydate = '2016-07-06 18:45:00';
$results = db_select('node', 'n')
->fields('n', array('nid'))
->condition('type', $mytype)
->condition('uid', $myuid)
->execute();
foreach ($results as $result) {
$nids[] = $result->nid;
}
if (!empty($nids)) {
node_delete_multiple($nids);
drupal_set_message(t('%count nodes has been deleted', array('%count' => count($nids))));
}
}
现在我坚持了一个多星期以来的日期条件。我的日期字段是内容类型“testdelete”被称为“基准”,小部件是弹出日历。
我试过了:
->fields('n', array('nid','field_datum'))
和
->fields('n', array('nid','datum'))
两者都导致异常:
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'n.field_datum' in 'field list': SELECT n.nid AS nid, n.field_datum AS field_datum FROM {node} n WHERE (type = :db_condition_placeholder_0) AND (uid = :db_condition_placeholder_1) ; Array ( [:db_condition_placeholder_0] => testdelete [:db_condition_placeholder_1] => 4 ) in mymodule_user_login()
条件应该如何:
->condition('datum', $mydate,'<')
而 $mydate 应该类似于:now() -21 days
其他问题:
我担心 hook_user_login 不适合这份工作,或者这样可以吗?
我应该改用 hook_cron 之类的东西吗?
【问题讨论】:
-
为什么不在Drupal Answers发帖?
-
对不起 - 我下次会这样做
标签: date drupal conditional-statements