Всем привет.
У меня есть вывод страницы через Views с использованием раскрытых фильтров. В качестве фильтра передается страна параметром p_country.
Также у меня есть блок, созданный через Views, в котором я проверяю переданные фильтром значения. Блок выводит ноды с фильтром по стране.
Фильтр проверяется таким образом:
<?php
$param = drupal_get_query_parameters();
if (isset($param['p_country'])) {
return $param['p_country'];
}
?>
И исключение прописано "All".
Блок выводится нормально, за исключением одного условия.
Если в фильтре указаны все страны, т.е. ?p_country=All, выводятся все ноды вне зависимости от того, задана для ноды страна или нет
По логике все правильно. Но мне нужно, чтобы в данном случае выводились только те ноды, для которых страна не указана.
Уже полдня провозилась, но не могу понять, как этого добиться.
Комментарии
?p_country=NULL попробуйте. и/или пустую строку передавать.
В данном случае проверяется, что поле есть, но его значение NULL. А это не то, что нужно.
В общем, не стала я разбираться с views, сделала все через запрос.
Вдруг кому пригодится, привожу свое решение.
<?php
$query->range(0, 1);
$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->orderBy('n.created', 'DESC');
$result = $query->execute();
$row = $result->fetchObject();
?>