Доброго времени суток! Имеется тип материала с полем "Площадь в кв.м." и вьюс, который показывает эти материалы. Во вьюсе работает раскрытая форма с фильтрацией по этому полю с типом "между". Возникла необходимость дать посетителю выбрать в каких единицах измерения делать фильтр: кв.м, сотки, гектары. Например, так:
Как такое реализовать?
Думаю в сторону computed fields, но непонятно как это красиво собрать в один блок...
Комментарии
Как решил вопрос?
Сделал альтер формы вьюса:
<?php
function <MYMODULE>_form_views_exposed_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if ($form['#id'] == '<MY-FORM-ID>') {
$form['area_wrapper']['area_units'] = array(
'#type' => 'radios',
'#options' => array('metr' => 'м<sup>2</sup>', 'sot' => 'сотках', 'ga' => 'ГА'),
'#default_value' => 'metr',
'#weight' => -1,
);
}
}
?>
Получилось такое:
Затем альтер запроса вьюса:
<?php
function <MYMODULE>_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
if ($view->id() == '<MY-VIEWS-ID>') {
$exposed_input = $view->getExposedInput();
if (isset($exposed_input['area_units'])) {
$unit = $exposed_input['area_units'];
$where = &$query->getWhere();
foreach ($where[1]['conditions'] as &$condition) {
if ($condition[0] == 'field_lot_area') {
if (is_array($condition[1])) {
foreach ($condition[1] as &$value) {
if ($unit == 'sot') {
$value = $value * 100;
} elseif ($unit == 'ga') {
$value = $value * 10000;
}
}
} else {
if ($unit == 'sot') {
$condition[1] = $condition[1] * 100;
} elseif ($unit == 'ga') {
$condition[1] = $condition[1] * 10000;
}
}
}
}
}
}
}
?>
Всем спасибо за помощь