0

我的模板中有代码:

$query = new EntityFieldQuery();
    $entities = $query->entityCondition('entity_type', 'node')
    ->propertyCondition('type', 'article')
    ->propertyCondition('status', 1)
    ->fieldCondition('field_show_on', 'tid', $group['identifier'], '=') // taxonomy identifier
    ->fieldCondition('field_perks_categories', 'tid', $categories['tid'], '=')
    ->fieldCondition('field_perks_sub_categories', 'tid', $subcategory['tid'], '=')
    ->execute();

我还有其他名为“artc_order”的表,其中包含 nid、重量以手动订购文章我想实现这个: http ://eureka.ykyuen.info/2012/05/16/drupal-7-order-entityfieldquery-by- random-using-hook_query_tag_alter/ 到我的模板文件,怎么做?

4

1 回答 1

0

也许它对你的情况有用,db_select而不是EntityFieldQuery(). 您不能JOIN直接添加到,EntityFieldQuery因为它不受支持,可能在 Drupal 8 中。

您的查询可以这样重写db_select

$query = db_select('node', 'n')
        ->fields('n', array('nid'))
        ->leftJoin('field_data_field_show_on', 'fso', 'fso.entity_id = n.nid') // You can use INNER if you need
        ->leftJoin('field_data_field_perks_categories', 'fpc', 'fpc.entity_id = n.nid') // Same thing here
        ->leftJoin('field_data_field_perks_sub_categories', 'fpsc', 'fpsc.entity_id = n.nid') // And here also
        ->leftJoin('order', 'o', 'o.nid = n.nid') // Join artc_order
        ->condition('n.type', 'article', 'LIKE')
        ->condition('fso.field_show_on_tid', $group['identifier'])
        ->condition('fso.field_perks_categories_tid', $categories['tid'])
        ->condition('fso.field_perks_sub_categories_tid', $subcategory['tid'])
        ->condition('n.status', 1)
        ->orderBy('o.weight')
        ->execute();

PS:我无法测试这个查询,因为我没有你的数据库,但差不多就是这样。

PS2:在template.php文件中使用查询不是一个干净的方法,我知道在某些极端情况下,我们需要这样做,但我认为 Drupal 有很多钩子可以让我们在自定义模块中获得我们需要的东西而不是template.php直接(这只是我的意见,我可能是错的)

于 2012-12-30T16:11:34.837 回答