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、重み付けして記事を手動で注文します。これを実装したい : random-using-hook_query_tag_alter/ をテンプレート ファイルに追加する方法を教えてください。

4

1 に答える 1

0

db_selectの代わりにケースに使用すると便利かもしれませんEntityFieldQuery()。おそらく Drupal 8 ではサポートされていないため、JOIN直接追加することはできません。EntityFieldQuery

クエリは次のように書き換えることができます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 に答える