【问题标题】:Order by content in Drupal 7 moduleDrupal 7 模块中按内容排序
【发布时间】:2014-01-17 11:28:25
【问题描述】:

我的自定义模块中有 3 个变量:

  $day = date('d',strtotime($nd->field_edate['und'][0]['value'],time()));

  $dayname = date('w',strtotime($nd->field_edate['und'][0]['value'],time()));

  $hours = date('H:i',strtotime($nd->field_edate['und'][0]['value'],time()));

我的内容按 DESC 排序。

$rs = $data->orderBy("n.created","desc")->execute();

但我想要,它使用$day$dayname$hours 的顺序。

当我尝试喜欢这个时:

$rs = $data->orderBy("n.created","'$hours.'")->execute();

我想要的伪代码:

$rs = $data->orderBy("order by near date today")->execute();

它不工作。

我该如何解决?

【问题讨论】:

    标签: php database drupal drupal-7


    【解决方案1】:

    您只能按数据库字段排序,不能按任意 PHP 变量排序。

    如果您想按字段 edate first 进行排序,则需要加入该表。

    对于本例,我假设 edate 是附加到 article 类型节点的字段。

    $data->join('field_data_field_edate', 'e', "e.entity_id = n.nid AND e.bundle = 'article'");
    

    现在你可以使用了:

    $data->orderBy("e.field_edate_value", "ASC");
    

    这将按 edate 字段中的任何值进行排序。如果这是一个时间戳,并且您想按日期排序,那么您可以使用:

    $data->addExpression("DAYNAME(FROM_UNIXTIME(e.field_edate_value))", 'day_name');
    

    然后你就可以按你的表情排序了:

    $data->orderBy("day_name", "ASC");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多