Динамически заполненный выпадающий список в Concrete5 - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть список страниц с атрибутом «регион», например:

Page1 region = Montreal
Page2 region = Montreal
Page3 region = Quebec
Page4 region = Quebec
Page5 region = Charlevoix

Я хотел бы динамически заполнить раскрывающийся список только теми регионами, где у меня есть страница, например:

<select>
<option value="1">Montreal</option>
<option value="2">Quebec</option>
<option value="3">Charlevoix</option>
</select>

Я делаю это, но у меня проблема с построением запроса:

$db = Loader::db();
$ak_locations = CollectionAttributeKey::getByHandle('region');
$r = $db->Execute("SELECT DISTINCT ....);

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Спасибо, Нур,

Я сделал это, и это работает:

$reg = CollectionAttributeKey::getByHandle('Region');
$options = $reg->getController()->getOptionUsageArray();
if (!empty($options)) {
    print("<Select>");
    foreach($options as $option) {
         printf("<option value=\"%s\">%s</option>", $option->getSelectAttributeOptionDisplayValue(), $option->getSelectAttributeOptionDisplayValue());
    }
    print("</Select>");
}
0 голосов
/ 20 февраля 2019

Я уже ответил вам на concrete5.org, но, возможно, вы не увидели ответ, поэтому вот так:

, если вы посмотрите в контроллер атрибута select (concrete / attribute / select / controller.php) вокругВ строке 541 вы увидите функцию getOptionUsageArray ()

Я думаю, это ваш лучший выбор.Вы можете использовать эту функцию и отфильтровать результат, чтобы удалить параметры с нулевым использованием.Или вы можете взглянуть на SQL-запрос, который они используют, чтобы адаптировать его к вашим потребностям.

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

...