Контекстные фильтры и диапазон значений

Аватар пользователя buldozer_kpi buldozer_kpi 2 декабря 2020 в 16:30

Здравствуйте.
Помогите, пожалуйста, решить задачу. Есть тип материала Генератор с числовыми полями 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;
}
?>

Но в результате ничего не выводится. Что я делаю не так?

Лучший ответ

Аватар пользователя charOFF charOFF 12 декабря 2020 в 22:31
2

Если это у вас представление блок, а не страница, то нужно донастроить контекстный фильтр Global:Null, например так

Если generator/120 у вас не системный путь, а алиас, то еще отметить соответствующую галочку

Комментарии

Аватар пользователя buldozer_kpi buldozer_kpi 5 декабря 2020 в 13:43

Какие, по значению? Если да, то они не решают задачу. Они покажут выборку по конкретно указанным минимуму и максимуму. А то, что попадает в этот диапазон, они не покажут.

Аватар пользователя VasyOK VasyOK 11 декабря 2020 в 18:08

"
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.

Аватар пользователя buldozer_kpi buldozer_kpi 11 декабря 2020 в 18:08

Да, я видел этот модуль, но он не решает моей задачи, диапазон значений он не показывает.

Аватар пользователя VasyOK VasyOK 11 декабря 2020 в 18:22

Да, вы правы. Не понял сразу.

В принципе если создать поле со списком выбора из численных вариантов от [минимальная мощность] до [максимальная мощность] с шагом 1, а при заполнении ноды указать значения из списка 50-150, то вариант выше может прокатить.

Главное не доканать контенщика с зажимом шифта в полях выбора большого столбика чисел. Возможно есть как-то виджет, который позволяет удобно выбрать диапазон значений на форме ноды.

Вот модули. Вполне вероятно что-то подойдет. Да, я в курсе, что каке-то под 7 или 8ку.
range_slider_widget
sliderwidget
sliderfield
range_slider
jslider_field

Аватар пользователя vladtulku vladtulku 12 декабря 2020 в 5:49

Я надеюсь, что Ваш пример абстрактный и к генераторам не имеет никакого отношения. Что за генераторы такие у которых минимальная мощность не равна нулю?
Если покупателю нужен генератор 120 кВт, то нет никакого смысла показывать ему генератор мощностью 50 кВт из группы А. Но он может купить 200ку из группы С, которую Вы ему не показываете. В данном примере нужно показывать 120 и выше.

Из Вашего примера не понятно, что показывать на странице с генератором 160

Сначала нужно определиться с логикой.

Аватар пользователя buldozer_kpi buldozer_kpi 12 декабря 2020 в 11:19

vladtulku wrote: Я надеюсь, что Ваш пример абстрактный и к генераторам не имеет никакого отношения. Что за генераторы такие у которых минимальная мощность не равна нулю?

Самый что ни есть абстрактный ))

vladtulku wrote: Если покупателю нужен генератор 120 кВт, то нет никакого смысла показывать ему генератор мощностью 50 кВт из группы А. Но он может купить 200ку из группы С, которую Вы ему не показываете. В данном примере нужно показывать 120 и выше.

Логика предельно проста и она описана выше. Зачем ему 200 если ему нужен 120, который попадает в диапазон 50-150?

vladtulku wrote:Из Вашего примера не понятно, что показывать на странице с генератором 160

Такой страницы просто не будет

Аватар пользователя buldozer_kpi buldozer_kpi 12 декабря 2020 в 11:32

В общем, что получилось сделать. По полю 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? С чем в коде сравнивать полученное значение аргумента?

Аватар пользователя charOFF charOFF 12 декабря 2020 в 12:45
1

В контекстных фильтрах больше/меньше не работает.
Можно использовать модуль https://www.drupal.org/project/views_argument_substitutions

  • После установки модуля, добавляете контекстный фильтр Global: Null (все настройки по-умолчанию, никакие проверки выставлять не надо)
  • В условиях фильтрации вьюса (FILTER CRITERIA) ставите 2 условия:
    1. field_powermin <= ***!1***
    2. field_powermax >= ***!1***
Аватар пользователя buldozer_kpi buldozer_kpi 12 декабря 2020 в 22:10

Спасибо. По функционалу то что нужно. Когда создал представление, настроил фильтрацию и подставляю в предпросмотр нужные мне аргументы generator/120, то все отлично работает. Но когда ставлю этот блок непосредственно на страницу с адресом site.com/generator/120, то фильтрация не происходит. Буду дальше пробовать ковырять его.

Аватар пользователя charOFF charOFF 12 декабря 2020 в 22:31
2

Если это у вас представление блок, а не страница, то нужно донастроить контекстный фильтр Global:Null, например так

Если generator/120 у вас не системный путь, а алиас, то еще отметить соответствующую галочку

Аватар пользователя marassa marassa 12 декабря 2020 в 17:34
1

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

Аватар пользователя marassa marassa 12 декабря 2020 в 22:15

buldozer_kpi wrote: настроил фильтрацию и подставляю в предпросмотр нужные мне аргументы generator/120, то все отлично работает. Но когда ставлю этот блок непосредственно на страницу с адресом site.com/generator/120, то фильтрация не происходит.

Скрин с настройками контекстного фильтра можно увидеть?