hook_views_query_alter()
in Drupal 8.を実装しようとしました。my_module.views_execution.incにある必要があるというヒントを見つけました。それが、フックが呼び出されることはありません。
function mymodulename_views_query_alter(&$view, &$query)
{
var_dump('foo');die;
}
* .incファイルをどこかに登録する必要がありますか?このトピックに関するドキュメントソースはありますか?
フックは.moduleファイルに実装する必要があります。
フックを.moduleファイルに移動し、キャッシュを再構築すると、Drupalがそれを取得します。
もちろん、フックを含むファイルをrequire
することもできます。ただし、そのファイルが解析されている間は、フック関数を使用できます。
あなたはフックについてもう少し読むことができます ドキュメントで 。
Drupal 8では、MYMODULE.views_execution.inc
ファイルで hook_views_query_alter()
を使用するのがベストプラクティスです。代わりに、MYMODULE.views.inc
に配置すると、次の場合にのみ実行されますビューのキャッシュを再構築して、ビューを一度だけ正常に機能させ、その後は正常に機能させない。
MYMODULE.views_execution.inc
ファイルはこの構造にする必要があります...
use Drupal\views\ViewExecutable;
use Drupal\views\Plugin\views\query\QueryPluginBase;
/**
* Implements hook_views_query_alter().
*/
function MYMODULE_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
// Only for my_view view.
if ($view->id() == 'my_view') {
// some action
}
}
もちろん、d8でhook_views_query_alterを作成することは、d7と同じではありません。もちろん、何度か試してみたところ、なんとかこれを取得できました。
function MYMODULE_views_query_alter(ViewExecutable $ view、QueryPluginBase $ query){ if(($ view-> id()== 'MY_VIEW' && $ view-> current_display == 'page_1')) { $ allowed_filters = ['language' => ['table' => 'node__field_v_language'、 'condition_field' => 'field_v_language_value'、 'operator' => 'IN']、 '国 '=> ['表 '=>' node__field_v_country '、' condition_field '=>' field_v_country_value '、' operator '=>' IN ']、 ' city '=> [' table '=>' node__field_v_locations '、' condition_field '=>' field_v_locations_target_id '、' operator '=>' IN ']、 ' theme '=> [' table '=>' node__field_v_themes '、' condition_field '=>' field_v_themes_target_id ' 、 'operator' => 'IN']、 'tag' => ['table' => 'node__field_v_tags'、 'condition_field' => 'field_v_tags_target_id'、 'operator' => 'IN']、 'chId' => ['table' => 'node__field_v_ch_id'、 'condition_field' => 'field_v_ch_id_value'、 'operator' => 'IN']、 'publishedBefore' => [ 'table' => 'node__field_v_published'、 'condition_field' => 'field_v_published_va lue '、' operator '=>'> ']、 ' publishedAfter '=> [' table '=>' node__field_v_published '、' condition_field '=>' field_v_published_value '、' operator '=>' $ record ){ $ alias = $ q .'_ als '; $ condition_field = $ alias。'。 '。$ record [' condition_field ']; $ configuration = 'type' => 'LEFT'、 'table' => $ record ['table']、 'field' => 'entity_id'、 'left_table' => 'node_field_data'、 'left_field' => 'nid'、 'operator' => '='、 ; $ join =\Drupal\views\Views :: pluginManager( 'join') -> createInstance( 'standard'、$ configuration); $ rel = $ query-> addRelationship($ alias、$ join、 'node_field_data'); $ query-> addTable( 'node__field_v_language'、$ rel、$ join、$ alias); $ query-> addWhere( ' '、$ condition_field、[$ _ GET [$ q]]、$ record [' operator ']); } } }