|
|
16.05.2019, 10:31
|
|
ktotoff
АльтерЛан
Зарегистрирован: 2006-12-19
Сообщений: 339
|
Коллеги, прошу помощи!
В компоненте есть поле «Город» — 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
Сообщений: 339
|
Руслан, огромное спасибо! Вот именно то, что нужно
...жизнь прекрасна, когда правильно подобраны антидепрессанты...
|