Loadырь
Быть лучшим - не значит быть достаточно хорошим.
+1247
Репутация
4894
Рейтинг
Посмотрите здесь. Возможно об этом идёт речь.
есть такое поле, только самописное.
Как обещал — готовое решение. Добавил новое поле чтоб, не трогать имеющиеся, хотя это по сути копия поля list. Все файлы в папках system/core и system/language надо смержить, остальные просто скопировать. У вас появится дополнительное поле Список с множественным выбором. Введите предустановленные значения и выбирайте, где показывать — в записи и/или в фильтре. При редактировании самой записи выбираете несколько пунктов из доступных. Сейчас выбранные поля в записи выводятся просто через запятую. А в фильтре можно выбрать несколько значений и отфильтровать с их учётом.
r2, что вы можете сказать про использование такого метода:
он работает, но я не знаю насколько это ресурсоёмко. По моим знаниям ICMS2, этот метод должен сгенерить всего один запрос из переданного массива. Пока со временем напряг, позже выложу своё рабочее решение полностью, но там кроме добавления этого метода в ядро модели надо изменить ещё в контролере валидацию строки на валидацию массива.
как-то так
Возможно уже есть готовое решение, но у меня заработало только с этим.
public function filterMultiIn($field, $value){ $this->filterStart(); foreach($value as $k=>$v){ $v = $this->db->escape($v); $this->filterOr()->filter("locate('{$v}',{$field})>0"); } $this->filterEnd(); return $this; }
как-то так
// public function validate_array_key($array, $value){ // if (!isset($array[$value])) { return ERR_VALIDATE_INVALID; } // return true; // } public function validate_array_key($array, $value){ foreach ($value as $val){ } } else { } return true; }
Только теперь на странице статусы т.е. в gird нечего не отображается
— всё правильно.вот мой кусок кода из такого же файла —
class actionIformsFormsAjax extends cmsAction { public function run(){ if (!$this->request->isAjax()) { cmsCore::error404(); } $inCore = cmsCore::getInstance(); $grid = $this->loadDataGrid('forms'); $inCore->getController('iforms'); $iforms_model = $inCore->getModel('iforms'); $iforms_model->setPerPage(iforms::perpage); $filter_str = $inCore->request->get('filter'); if ($filter_str){ $iforms_model->applyGridFilter($grid, $filter); } $total = $iforms_model->getFormsCount(); $fields = $iforms_model->getForms(); cmsTemplate::getInstance()->renderGridRowsJSON($grid, $fields, $total, $pages); $this->halt(); } }
она подтягивается сама отсюда — \system\core\model.php — строка 1350откуда взялся функция applyGridFilter() и надо ли ее создать в модели?
а по вашему коду, не понял зачем вы делаете выборку
$model->select('i.id, i.text'); $model->OrderBy('i.id', 'DESC');
И желательно переменную
$items = $model->getStatusi((int)$id);
Я себе подключал pagebar в админке на своём компоненте. Столкнулся с такими "секретами" при которых тоже не работало. Выяснил, что основное дело в опциях grid Я нашёл их столькоможет есть какие нибудь секреты которые я пропустил?
'is_auto_init' => true, 'is_sortable' => true, 'is_filter' => true, 'is_pagination' => true, 'is_draggable' => false, 'is_selectable' => false, 'order_by' => 'id', 'order_to' => 'asc', 'show_id' => true );
и соответственно в функциях обработки grid
должно быть что-то такое
$filter_str = $inCore->request->get('filter'); if ($filter_str){ $iforms_model->applyGridFilter($grid, $filter); } $total = $iforms_model->getFormsCount();
таки действует принцип "боятся — значит уважают"
в точку Теперь — уважаемый человекА у меня это, и кто я теперь?!
Patriot, я про ТС говорил.
Вообще, судя по скрину, там речь о двойке идёт
Я так и делаю, но при этом надо чтобы 188 строка была приведена к видуТак ведь можно.
<?php echo html_submit( $submit['title'], $submit['name'] ); ?>
r2, столкнулся ещё с такой проблемой:
когда на странице форма одна и нажата кнопка отправки, то я проверяю это действие так как в документации:и дальше по условию
. В этом случае всё работает так: выводится страница с формой, нажимаем кнопку submit, идёт валидация формы и если ошибка, то возвращаются данные и ошибки в эту же форму без перезагрузки страницы и на странице есть переменная $this->request->has('submit') полученная ранее по нажатию кнопки.
Но когда форм больше одной (а у всех форм кнопка submit рисуется одинаковая), то при отправке одной формы, в случае ошибки, остальные формы вместе с отправленной рендерятся с учётом того, что событие нажатия на кнопку отправки каждой формы уже совершено, т. е.
. — данное условие выполнимо для всех форм. Заметил это когда идёт проверка капчи. Сколько форм с капчёй на странице, столько и сообщений о неверной капче.
З.Ы. описал возможно криво.
Проблема решается если у инпута с типом submit в файле \templates\default\assets\ui\form.tpl.php в строке 188 можно было бы задать имя тегу name.
Т. е. вместо
задать так:
тогда можно проверять какая именно кнопка была нажата
когда на странице форма одна и нажата кнопка отправки, то я проверяю это действие так как в документации:
$is_submitted = $this->request->has('submit');
// Если форма была отправлена if ($is_submitted) { // Получаем (request) и парсим (parse) данные из формы $data = $form->parse($this->request, $is_submitted); }
Но когда форм больше одной (а у всех форм кнопка submit рисуется одинаковая), то при отправке одной формы, в случае ошибки, остальные формы вместе с отправленной рендерятся с учётом того, что событие нажатия на кнопку отправки каждой формы уже совершено, т. е.
if ($is_submitted) {}
З.Ы. описал возможно криво.
Проблема решается если у инпута с типом submit в файле \templates\default\assets\ui\form.tpl.php в строке 188 можно было бы задать имя тегу name.
Т. е. вместо
<?php echo html_submit( $submit['title'] ); ?>
<?php echo html_submit( $submit['title'], $submit['name'] ); ?>
$is_submitted = $inCore->request->has('название_нашей_кнопки_с_типом_submit');
saymon21, подключите на главной
между тегами <head>
<script type="text/javascript" src="/templates/3clicks/js/core.js"></script>
У вас подключение многих скриптов происходит после футера, т. е. в самом конце страницы. Отсюда и ошибки сыпятся, что многие переменный в ява скриптах не объявлены. Попробуйте их подключить между тегами <head></head>
Да — в парадигме допустимы, но чтобы реально работали нужно, что-то решить с капчёй. У меня reCaptcha выводится только один раз на странице. Тут или искать вариант с другой капчёй или отключить ее вообще (не рекомендую). Пробовал добавить action с id формы, столкнулся с тем, что при ошибке меня редиректило с сайта на страницу компонента с формой, что мне совсем не понравилось. Вникать долго в это не стал, возможно обработчик так направлял. Перепилил свой компонент iForms (в файлах пока не обновлял) — добавил в формы скрытое поле с id формы. Теперь данные в случае ошибки возвращаются в нужную форму и ошибочные поля подсвечиваются там же.Допустимы ли в парадигме Instant 2 сразу две независимых формы в одном окне компонента?
Куда ещё интереснее и оптимальнее, чем полноценный конструктор форм, подобный тому, что есть в первой ветке, но по моему во второй он более гибкий в плане количества вариантов вывода на сайте?И еще раз хочу акцентировать внимание, что возможно стоит пересмотреть задачи и найти более интересное/оптимальное решение и не выводить одинаковую форму на странице несколько раз.