Konstantin
С нами с 24 декабря 2022; Место в рейтинге пользователей: #6488Вывести значения только используемых TV в ресурсах по двум параметрам
Здравствуйте, делаю Ajax фильтр, с поиском по TV полям выглядит это так:
Опции формируются сниппетом, который собирает только используемые значения TV полей со всех ресурсов, объединяя дубли, вот код сниппета:
Подскажите пожалуйста как для этого изменить сниппет? Догадываюсь что в запрос
Опции формируются сниппетом, который собирает только используемые значения TV полей со всех ресурсов, объединяя дубли, вот код сниппета:
<?php
// $tvid = 7; // id нужного ТВ параметра
$res = array(); // Сюда забиваем результаты
$counter = 1;
$output = '';
$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid, ));
$q->select('value');
$q->groupby('value'); // исключаем дубли
if ($q->prepare() && $q->stmt->execute()) {
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
$res[$counter] = $row['value'];
$counter++;
}
}
foreach($res as $val){
$output .= '<option value="'.$val.'">'.$val.'</option>';
}
echo $output;
Все работало нормально до тех пор как не было добавлено новое TV поле с двумя значениями Аренда==1||Продажа==2 и теперь фильтр для аренды должен отобразить только значения используемых TV ресурсов согласно этому новому полю, т.е. идея в том чтобы фильтр не показывал опции ресурсы которых «для продажи» и наоборот. Подскажите пожалуйста как для этого изменить сниппет? Догадываюсь что в запрос
$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid, ));
нужно подставить еще один параметр — со значением Аренды или Продажи… Но своих знаний маловато как это сделать… Буду благодарен за любую помощь ) Как вывести в шаблоне ресурса TV поле типа List c Options/Values
Здравствуйте, я недавно с Modx поэтому прошу совета знатоков
В документации про типы TV полей сказано что я могу для типа ввода List указать раздельно значения Options/Values таким образом:
Я начал велосипедить и в сниппете получать сначала все значения поля List, затем получать выбранное значение, затем путем сравнивавания циклом проходить по массиву и тд, и все это только чтобы получить одно значение value.
В документации про типы TV полей сказано что я могу для типа ввода List указать раздельно значения Options/Values таким образом:
Option 1==value1||Option 2==value2
Однако по умолчанию плейсхолдер [[*FieldTV]] выводит название опции, и я ни как не могу найти информацию про то как получить именно value выбранной опции.Я начал велосипедить и в сниппете получать сначала все значения поля List, затем получать выбранное значение, затем путем сравнивавания циклом проходить по массиву и тд, и все это только чтобы получить одно значение value.
<?php
function searchValue($option, $array) {
foreach ($array as $key => $val) {
if (strpos($val, $option) !== false) {
$el = explode('==',$val);
echo $el[1];
}
}
return null;
}
$tvtag = 'MyFieldTV';
$pageid = '38';
$tv = $modx->getObject('modTemplateVar',array('name'=>$tvtag));
// все опции
$options = explode('||',$tv->get('elements'));
// ключ опции выбранный в ресурсе
$optionKey = $tv->getValue($pageid);
echo searchValue($optionKey,$options);
Может быть есть какое-то более рациональное и простое решение о котором я не знаю?