Вы здесь

Помогите переделать код под Drupal 8

0

Помогите переделать код под Drupal 8:

function MYMODULE_views_query_alter(&$view, &$query) {
  if ($view->name == 'statji' OR $view->name == 'istorii') {
    if ($view->args[1] == 'all') {
    foreach ($query->where as &$where_group) {
      foreach ($where_group['conditions'] as &$condition) {
        if ($condition['value'] === 'all') {
          $condition['value'] = NULL;
          $condition['operator'] = 'IS NULL';
        }
      }
    }
    }

    if ($view->args[3] == 'best') {
      $query->orderby[0]['field'] = 'count';
      $query->orderby[0]['direction'] = 'DESC';
    }
  }
}
Версия Drupal: 
8.x
Вопрос задан 14.02.2019 - 09:39

Ошибки были в первых двух строчках. По Вашей ссылке посмотрел примеры, поправил.

function MYMODULE_views_query_alter($view, $query) {
  if ($view->id() == 'statji' OR $view->id() == 'istorii') {

Но меня больше интересует вот это:

if ($condition['value'] === 'all') {
  $condition['value'] = NULL;
  $condition['operator'] = 'IS NULL';
}

Как я понял мне нужен даже не этот код, а код, который добавит новое условие в запрос. Чтобы данное поле
taxonomy_term_field_data_node__field_rubrika__taxonomy_term__field_sinonim.field_sinonim_value
было NULL

Комментарий оставлен 14.02.2019 - 18:37

Нашел вот такое решение:

$query->addWhere(0, 'taxonomy_term_field_data_node__field_rubrika.tid', 4);

где 4 - id термина таксономии.

Мне же нужно условие чтобы выводили все ноды у которых данный термин пустой, т.е. field_rubrika - не указана.
Пробовал так:

$query->addWhere(0, 'taxonomy_term_field_data_node__field_rubrika.tid', NULL);

Не получается

Комментарий оставлен 14.02.2019 - 19:39

Ответы

0

Вот так стало работать как надо:

function MYMODULE_views_query_alter($view, $query) {
  if ($view->id() == 'statji' OR $view->id() == 'istorii') {
    if ($view->args[1] == 'all') {
      $query->addWhere(0, 'taxonomy_term_field_data_node__field_rubrika.tid', NULL, 'IS_NULL');
    }
  }
}

Пока только с этим не разобрался еще:

if ($view->args[3] == 'best') {
  $query->orderby[0]['field'] = 'count';
  $query->orderby[0]['direction'] = 'DESC';
}
Ответ дан 14.02.2019 - 19:54