Как прикрутить последовательный выбор к форме
Объясните, пожалуйста, как прикрутить к форме последовательный выбор категорий. Вывести в нужном месте получилось, но вот как и куда передать значение последнего селекта я не знаю.
А чего его передавать? Он сам передастся и выведется на странице, если всё правильно сделали.но вот как и куда передать значение последнего селекта я не знаю.
Скажите, что я делаю неправильно?
А чего его передавать? Он сам передастся и выведется на странице, если всё правильно сделали.но вот как и куда передать значение последнего селекта я не знаю.
В файле /templates/мой_шаблон/assets/ui/form.tpl.php подключаю файл myselect.php
// Если выполняется следующее условие, то вместо кода, который содержится между тегами // <fieldset></fieldset> исполняем код из подключаемого файла myselect.php if ($board == true && $fieldset['title'] == 'Категория'){ include('myselect.php'); } else {
<div id="tab-<?php echo $fieldset_id; ?>" class="tab" <?php if($form->is_tabbed && $index){ ?>style="display: none;"<?php } ?>> <fieldset id="fset_<?php echo $fieldset_id; ?>" <legend><?php echo $fieldset['title']; ?></legend> <?php } ?> <?php $content_model = cmsCore::getModel('content'); $categories = $content_model->getCategoriesTree('board', true); foreach($categories as $item_cat){ $arr_cat[$item_cat['id']] = array('id' => $item_cat['id'],'parent_id' => $item_cat['parent_id'], 'title' => $item_cat['title']); } } $parent_id = 1; $categories_list = array_categories_to_list($arr_cat, $parent_id); ?> <div id="f_category_id" class="field ft_list"> <div> <select id="first_select" data-placeholder="Выберите категорию" onchange="newList(this.value);"> <option value="" selected></option> <?php foreach($categories_list as $item_cat_list){ $id = $item_cat_list['id']; $title = $item_cat_list['title']; $html = "\t".'<option value = "'.htmlspecialchars($id).'">'.htmlspecialchars($title).'</option>'."\n"; echo $html; } } ?> </select> <script type="text/javascript">$('#first_select').chosen({disable_search_threshold: 8, width: '100%', allow_single_deselect: true});</script> </div> <!-- Здесь, если это необходимо, будут добавляться дивы с селектами --> </div> </fieldset> </div>
Когда имеется большое количество категорий, то с выбором нужной могут возникнуть сложности, так как выбирать приходится из общего списка.
Просто видно я не понял о чём речь. Сори. Судя по скрину вы создали поле "На длительный срок", как я понял типа-список. Это понятно. И что теперь нужно? Вывести его при определённых условиях или что? Файл myselect.php для чего?
Поэтому я решил сделать последовательный выбор категорий. После загрузки страницы в форме имеем один селект со списком родительских категорий, после выбора нужной появляется второй селект с дочерними категориями и так до тех пор, пока не будет выбрана категория последнего уровня вложенности.
Проблема заключается в том, что прикрутить все это к форме я прикрутил, все выводится, все выбирается, но при нажатии на кнопку "Сохранить" появляется сообщение "Найдены ошибки в форме". Полагаю, что просто добавить селекты в шаблон недостаточно.
Здравствуйте!
DCDozer, Evanescence знает что нужно сделать
Мне тоже нужен подобный выбор категорий при добавлении объявления на сайте. Вы не знаете продается ли он отдельно от компонента Evanescence? Я к сожалению пока не могу написать там куда вы дали ссылку. Кармы не хватает.
vladimird, если еще актуально, то вот небольшой хак. Последовательный выбор категорий реализовал уже давно, правда пришлось писать функцию-костыль, чтобы работало как надо. Но не смотря на это, при определенных условиях не помогал и этот костыль.Мне тоже нужен подобный выбор категорий при добавлении объявления на сайте.
И вот совсем недавно нашел время, чтобы все довести до ума (с моей непрофессиональной точки зрения).
Итак, в файле /templates/ваш_шаблон/assets/ui/form.tpl.php в самом начале определяем местоположение. Если находимся на странице добавления того контента, в котором требуется последовательный выбор категорий, то далее подключаем этот последовательный выбор.
// Определяем местоположение. Если находимся на странице добавления объявлений, // то в переменную $board будет записано какое-то положительное число, // если это страница добавления другого контента, запишется "0". $uri = cmsCore::getInstance()->uri_absolute;
<?php echo $field->getInput($value); ?>
<?php if ($board > 0 && $name == 'category_id') {include('dependent_lists.php'); } else echo $field->getInput($value); ?>
url: "/ads/categories", // Ссылка на action
/system/controllers/ваш_контроллер/actions создать файл categories.php со следующим содержимым
<?php class actionAdsCategories extends cmsAction { public function run() { $categories_list = NULL; } else { $content_model = cmsCore::getModel('content'); $categories = $content_model->getCategoriesTree('board', true); foreach($categories as $item_cat){ $arr_cat[$item_cat['id']] = array('id' => $item_cat['id'], 'parent_id' => $item_cat['parent_id'], 'title' => $item_cat['title']); } } $categories_list = array_categories_to_list($arr_cat, $parent_id); } } } ?>
В файл /templates/ваш_шаблон/assets/helper.php дописываем функцию array_categories_to_list
function array_categories_to_list($categories, $filter){ $i = 0; foreach($categories as $item){ if ($item['parent_id'] == $filter) { $i++; } } } return $list; }