Здравствуйте.
Помогите, пожалуйста, решить задачу. Есть тип материала Генератор с числовыми полями field_powermin и field_powermax – минимальная и максимальная мощность. Имеем список продукции с указанием мощности:
Генератор А 50-150
Генератор Б 100-150
Генератор В 200-300
---------------------------
Создаю страницу, которая имеет следующий url: site.com/generator/120 (Генераторы мощьностью 120) и на этой странице должен выводится блок Views со списком генераторов, диапазон мощностей которых содержит 120, в нашем случае это Генератор А и Генератор Б.
Понимаю, что это нужно делать через контекстные фильтры и писать php код. Написал следующий пример:
<?php
$str = $_SERVER['REQUEST_URI'];
$strWithoutChars = preg_replace('/[^0-9]/', '', $str);
if ($strWithoutChars > $node->field_powermin['und'][0]['value'] and $strWithoutChars < $node->field_powermax['und'][0]['value']) {
return true;
}
?>
Но в результате ничего не выводится. Что я делаю не так?
Комментарии
Кто-то сможет подсказать. Вроде же задача не сверх сложная.
А зачем писать код, когда есть контекстные фильтры?
Какие, по значению? Если да, то они не решают задачу. Они покажут выборку по конкретно указанным минимуму и максимуму. А то, что попадает в этот диапазон, они не покажут.
"
url: site.com/generator/120 (Генераторы мощьностью 120) и на этой странице должен выводится блок Views со списком генераторов, диапазон мощностей которых содержит 120
"
Как бы вьюху создать можно. Возможно воспользоваться модулем
https://www.drupal.org/project/views_url_path_arguments
Пробовали?
Во вьюхе аргумент - поле указывающее на мощность, его значение по умолчанию: Entity ID converted from URL path alias, критерий проверки - Entity ID from URL path alias.
Да, я видел этот модуль, но он не решает моей задачи, диапазон значений он не показывает.
Да, вы правы. Не понял сразу.
В принципе если создать поле со списком выбора из численных вариантов от [минимальная мощность] до [максимальная мощность] с шагом 1, а при заполнении ноды указать значения из списка 50-150, то вариант выше может прокатить.
Главное не доканать контенщика с зажимом шифта в полях выбора большого столбика чисел. Возможно есть как-то виджет, который позволяет удобно выбрать диапазон значений на форме ноды.
Вот модули. Вполне вероятно что-то подойдет. Да, я в курсе, что каке-то под 7 или 8ку.
range_slider_widget
sliderwidget
sliderfield
range_slider
jslider_field
Я надеюсь, что Ваш пример абстрактный и к генераторам не имеет никакого отношения. Что за генераторы такие у которых минимальная мощность не равна нулю?
Если покупателю нужен генератор 120 кВт, то нет никакого смысла показывать ему генератор мощностью 50 кВт из группы А. Но он может купить 200ку из группы С, которую Вы ему не показываете. В данном примере нужно показывать 120 и выше.
Из Вашего примера не понятно, что показывать на странице с генератором 160
Сначала нужно определиться с логикой.
Самый что ни есть абстрактный ))
Логика предельно проста и она описана выше. Зачем ему 200 если ему нужен 120, который попадает в диапазон 50-150?
Такой страницы просто не будет
В общем, что получилось сделать. По полю field_powermax сделал контекстный фильтр и написал в нем код:
<?php
$node=node_load(arg(1));
return $node->field_powerurl['und'][0]['value'];
?>
field_powerurl - поле где указывается мощность для последующей генерации подобного URL site.com/generator/120 (Генераторы мощностью 120).
В итоге выводятся все генераторы, которые имеют максимальную мощность 120, то есть = 120. А вот как написать код, чтобы выводились <=120? С чем в коде сравнивать полученное значение аргумента?
В контекстных фильтрах больше/меньше не работает.
Можно использовать модуль https://www.drupal.org/project/views_argument_substitutions
Спасибо. По функционалу то что нужно. Когда создал представление, настроил фильтрацию и подставляю в предпросмотр нужные мне аргументы generator/120, то все отлично работает. Но когда ставлю этот блок непосредственно на страницу с адресом site.com/generator/120, то фильтрация не происходит. Буду дальше пробовать ковырять его.
Если это у вас представление блок, а не страница, то нужно донастроить контекстный фильтр Global:Null, например так

Если generator/120 у вас не системный путь, а алиас, то еще отметить соответствующую галочку
Огонь, спасибо. С меня в любом случае причитается.
Ещё вот такой модуль есть: https://www.drupal.org/project/views_evi
Он "пробрасывает" значения контекстных фильтров в раскрытые фильтры, у которых гораздо больше возможностей, в частности можно использовать больше/меньше.
Спасибо. Судя по описанию может помочь, буду смотреть.
Скрин с настройками контекстного фильтра можно увидеть?