Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Еще раз про «Множественный выбор»

16.05.2019, 10:31
ktotoff
АльтерЛан

Зарегистрирован:
2006-12-19
Сообщений: 334

Коллеги, прошу помощи!

В компоненте есть поле «Город» — field_Region типа «множественный выбор», привязанное к списку городов list_Region.

Компонент содержит какие-то количество записей, каждая из которых может содержать произвольное количество городов.

Задача — организовать поиск по этим записям через стандартный список.
Поскольку база городов огромная (2 с лишним тысячи строчек), хотелось бы вывести для выбора только те города, которые уже упоминаются в записях инфоблока.

Если бы поле было типа «Список», а не множественный выбор, проблем бы не было.

Код:

<select>
<? $region = $nc_core->db->get_results("
SELECT DISTINCT list_Region_ID, list_Region_Name
FROM Classificator_list_Region
RIGHT JOIN Message".$classID."
ON field_Region = list_Region_ID
ORDER BY list_Region_ID ", ARRAY_A );

if ( !empty($region) ) { foreach ($region as $region_id) { ?>
<option value='<?= $region_id['list_Region_ID'] ?>'><?= $region_id['list_Region_Name'] ?></option>
<? } } ?>
</select>


А как сделать тоже самое, но для множественного выбора?
Завершение проекта, устал, туплю ужасно!
Заранее спасибо!

...жизнь прекрасна, когда правильно подобраны антидепрессанты...
16.05.2019, 13:06
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Здравствуйте!
Предлагаю примерно вот так решить задачку:
Код:
<select>
<?
$regions_raw = $nc_core->db->get_col("SELECT DISTINCT field_Region FROM Message$classID WHERE Subdivision_ID=$sub AND Sub_Class_ID=$cc AND Checked=1");
// складываем все регионы текущего инфоблоку в одну длинную строку:
$regions_raw_txtlist = join(",", $regions_raw);
//делаем из нее один цельный массив (в нем могут быть пустые и повторяющиеся элементы)
$regions_raw_arr = explode(",",$regions_raw_txtlist);
// убираем из массива пустые элементы и дубли:
$regions_arr = array_unique(array_filter($regions_raw_arr));
// если что-то есть - выводим из Списка только те города, которые есть в получившемся массиве:
if (!empty($regions_arr)) {
$regions = $nc_core->db->get_results("SELECT list_Region_ID as rid, list_Region_Name as rname FROM Classificator_list_Region WHERE list_Region_ID IN (".join(",", $regions_arr).") AND Checked=1", ARRAY_A);
if ( !empty($regions) ) { foreach ($regions as $region) { ?>
<option value='<?= $region['rid'] ?>'><?= $region['rname'] ?></option>
<? } }
}
?>
</select>
16.05.2019, 19:56
ktotoff
АльтерЛан

Зарегистрирован:
2006-12-19
Сообщений: 334

Руслан, огромное спасибо! Вот именно то, что нужно улыбка

...жизнь прекрасна, когда правильно подобраны антидепрессанты...
198 196 2019-05-16 19:56:43 15099
Описание проекта