在drupal模板中实现addtag

时间:2012-12-28 03:36:51

标签: drupal drupal-7 drupal-theming

我的模板中有代码:

$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/ 到我的模板文件,怎么做?

1 个答案:

答案 0 :(得分: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 (这只是我的观点,我可能是错的)