[Решено] Views 3 + Контекстный фильтр.

Главные вкладки

Аватар пользователя oksale oksale 27 апреля 2017 в 15:39

Всем привет.
У меня есть вывод страницы через Views с использованием раскрытых фильтров. В качестве фильтра передается страна параметром p_country.
Также у меня есть блок, созданный через Views, в котором я проверяю переданные фильтром значения. Блок выводит ноды с фильтром по стране.
Фильтр проверяется таким образом:

<?php
$param 
drupal_get_query_parameters();
if (isset(
$param['p_country'])) {
  return 
$param['p_country'];
}
?>

И исключение прописано "All".

Блок выводится нормально, за исключением одного условия.
Если в фильтре указаны все страны, т.е. ?p_country=All, выводятся все ноды вне зависимости от того, задана для ноды страна или нет
По логике все правильно. Но мне нужно, чтобы в данном случае выводились только те ноды, для которых страна не указана.
Уже полдня провозилась, но не могу понять, как этого добиться.

Комментарии

Аватар пользователя oksale oksale 28 апреля 2017 в 13:21

В данном случае проверяется, что поле есть, но его значение NULL. А это не то, что нужно.
В общем, не стала я разбираться с views, сделала все через запрос.
Вдруг кому пригодится, привожу свое решение.

<?php
       $param 
drupal_get_query_parameters();
    
$query db_select('node''n');
    
$query->leftJoin('field_data_body''b''b.revision_id = n.vid');
    
$query->leftJoin('field_data_field_country''c''c.entity_id = n.nid');
    
$query
        
->fields('n', array('title''nid'))
        ->
fields('b', array('body_value'))
        ->
condition('n.type''node_type')
        ->
condition('status'1);

      if (isset(

$param['p_country'])) {
      if(
strtolower(trim($param['p_country'])) == 'all') {     
        
$query->condition('c.field_country_nid'NULL'IS NULL');
      } else {
        
$query->condition('c.field_country_nid'$param['p_country'], '=');
      }
    } else {
        
$query->condition('c.field_country_nid'NULL'IS NULL');
    }

    

$query->range(01);
    
$query->orderBy('n.created''DESC');
    
$result $query->execute();
    
$row $result->fetchObject();
?>