Loadырь

Loadырь

Быть лучшим - не значит быть достаточно хорошим.
+1247
Репутация
4894
Рейтинг
#1 icms2 поля в контенте 29 декабря 2014 в 08:49
Посмотрите здесь. Возможно об этом идёт речь.
#2 Тип поля "набор опций" 26 декабря 2014 в 11:00
есть такое поле, только самописное.
#3 [ЕСТЬ РЕШЕНИЕ] Поля ListMultiple и List в icms2 26 декабря 2014 в 10:57
Как обещал — готовое решение. Добавил новое поле чтоб, не трогать имеющиеся, хотя это по сути копия поля list. Все файлы в папках system/core и system/language надо смержить, остальные просто скопировать. У вас появится дополнительное поле Список с множественным выбором. Введите предустановленные значения и выбирайте, где показывать — в записи и/или в фильтре. При редактировании самой записи выбираете несколько пунктов из доступных. Сейчас выбранные поля в записи выводятся просто через запятую. А в фильтре можно выбрать несколько значений и отфильтровать с их учётом.
#4 [ЕСТЬ РЕШЕНИЕ] Поля ListMultiple и List в icms2 23 декабря 2014 в 08:37
r2, что вы можете сказать про использование такого метода:
  1.  
  2. public function filterMultiIn($field, $value){
  3. if (!strstr($field, '.')){ $field = 'i.' . $field; }
  4.  
  5. $this->filterStart();
  6. foreach($value as $k=>$v){
  7. $v = $this->db->escape($v);
  8. $this->filterOr()->filter("locate('{$v}',{$field})>0");
  9. }
  10. $this->filterEnd();
  11.  
  12. return $this;
  13. }
  14.  
он работает, но я не знаю насколько это ресурсоёмко. По моим знаниям ICMS2, этот метод должен сгенерить всего один запрос из переданного массива. Пока со временем напряг, позже выложу своё рабочее решение полностью, но там кроме добавления этого метода в ядро модели надо изменить ещё в контролере валидацию строки на валидацию массива.
как-то так
  1.  
  2. // public function validate_array_key($array, $value){
  3. // if (!isset($array[$value])) { return ERR_VALIDATE_INVALID; }
  4. // return true;
  5. // }
  6.  
  7. public function validate_array_key($array, $value){
  8. if (is_array($value)) {
  9. foreach ($value as $val){
  10. if (!isset($array[$val])) { return ERR_VALIDATE_INVALID; }
  11. }
  12. } else {
  13. if (!isset($array[$value])) { return ERR_VALIDATE_INVALID; }
  14. }
  15. return true;
  16. }
Возможно уже есть готовое решение, но у меня заработало только с этим.
#5 [ЕСТЬ РЕШЕНИЕ] Как подключить pagebar в админку 2.1.2 21 декабря 2014 в 18:50

Только теперь на странице статусы т.е. в gird нечего не отображается

Evanescence
smile — всё правильно.
вот мой кусок кода из такого же файла —
  1.  
  2. class actionIformsFormsAjax extends cmsAction {
  3.  
  4. public function run(){
  5.  
  6. if (!$this->request->isAjax()) { cmsCore::error404(); }
  7. $inCore = cmsCore::getInstance();
  8.  
  9. $grid = $this->loadDataGrid('forms');
  10.  
  11. $inCore->getController('iforms');
  12. $iforms_model = $inCore->getModel('iforms');
  13. $iforms_model->setPerPage(iforms::perpage);
  14.  
  15. $filter = array();
  16. $filter_str = $inCore->request->get('filter');
  17. if ($filter_str){
  18.  
  19. parse_str($filter_str, $filter);
  20. $iforms_model->applyGridFilter($grid, $filter);
  21.  
  22. }
  23.  
  24. $total = $iforms_model->getFormsCount();
  25.  
  26. $perpage = isset($filter['perpage']) ? $filter['perpage'] : iforms::perpage;
  27. $pages = ceil($total / $perpage);
  28.  
  29. $fields = $iforms_model->getForms();
  30.  
  31. cmsTemplate::getInstance()->renderGridRowsJSON($grid, $fields, $total, $pages);
  32.  
  33. $this->halt();
  34. }
  35. }

откуда взялся функция applyGridFilter() и надо ли ее создать в модели?

Evanescence
она подтягивается сама отсюда — \system\core\model.php — строка 1350

а по вашему коду, не понял зачем вы делаете выборку
  1.  
  2. $model->select('i.id, i.text');
  3. $model->OrderBy('i.id', 'DESC');
  4.  
когда она берётся из $grid
И желательно переменную
  1. $items = $model->getStatusi((int)$id);
получать перед самым выводом в шаблон, после применения фильтров.
#6 [ЕСТЬ РЕШЕНИЕ] Как подключить pagebar в админку 2.1.2 21 декабря 2014 в 10:49

может есть какие нибудь секреты которые я пропустил?

Evanescence
Я себе подключал pagebar в админке на своём компоненте. Столкнулся с такими "секретами" при которых тоже не работало. Выяснил, что основное дело в опциях grid Я нашёл их столько
  1.  
  2. $options = array(
  3. 'is_auto_init' => true,
  4. 'is_sortable' => true,
  5. 'is_filter' => true,
  6. 'is_pagination' => true,
  7. 'is_draggable' => false,
  8. 'is_selectable' => false,
  9. 'order_by' => 'id',
  10. 'order_to' => 'asc',
  11. 'show_id' => true
  12. );
  13.  
так вот если 'is_draggable' = false, то 'order_by' должно быть равно чему-то, кроме 'ordering', например 'id',
и соответственно в функциях обработки grid
должно быть что-то такое
  1.  
  2. $filter = array();
  3. $filter_str = $inCore->request->get('filter');
  4. if ($filter_str){
  5.  
  6. parse_str($filter_str, $filter);
  7. $iforms_model->applyGridFilter($grid, $filter);
  8.  
  9. }
  10.  
  11. $total = $iforms_model->getFormsCount();
  12.  
  13. $perpage = isset($filter['perpage']) ? $filter['perpage'] : iforms::perpage;
  14. $pages = ceil($total / $perpage);
#7 Сериал о "Витальке" 11 декабря 2014 в 09:50

таки действует принцип "боятся — значит уважают"

Вячеслав Леонов
roflв точку
#8 Сериал о "Витальке" 11 декабря 2014 в 09:20

А у меня это, и кто я теперь?!

Вячеслав Леонов
Теперь — уважаемый человек smile
#9 [ЕСТЬ РЕШЕНИЕ] Иконки в объявлениях вместо папок 3 декабря 2014 в 08:23
Patriot, я про ТС говорил.
#10 [ЕСТЬ РЕШЕНИЕ] Иконки в объявлениях вместо папок 3 декабря 2014 в 07:39
Вообще, судя по скрину, там речь о двойке идёт
#11 Программирование форм в InstantCMS 2.x.x 1 декабря 2014 в 21:27

Так ведь можно.

r2
Я так и делаю, но при этом надо чтобы 188 строка была приведена к виду
  1. <?php echo html_submit( $submit['title'], $submit['name'] ); ?>
, а чтоб не переписыват все кнопки с типом submit, надо в этом же файле изменить 12 строку на
  1. $default_submit = array('title' => LANG_SAVE, 'name' => 'submit');
если измените их в ближайшем обновлении, буду очень признателен.
#12 Программирование форм в InstantCMS 2.x.x 1 декабря 2014 в 20:54
r2, столкнулся ещё с такой проблемой:
когда на странице форма одна и нажата кнопка отправки, то я проверяю это действие так как в документации:
  1. $is_submitted = $this->request->has('submit');
и дальше по условию
  1. // Если форма была отправлена
  2. if ($is_submitted) {
  3. // Получаем (request) и парсим (parse) данные из формы
  4. $data = $form->parse($this->request, $is_submitted);
  5. }
. В этом случае всё работает так: выводится страница с формой, нажимаем кнопку submit, идёт валидация формы и если ошибка, то возвращаются данные и ошибки в эту же форму без перезагрузки страницы и на странице есть переменная $this->request->has('submit') полученная ранее по нажатию кнопки.
Но когда форм больше одной (а у всех форм кнопка submit рисуется одинаковая), то при отправке одной формы, в случае ошибки, остальные формы вместе с отправленной рендерятся с учётом того, что событие нажатия на кнопку отправки каждой формы уже совершено, т. е.
  1. if ($is_submitted) {}
. — данное условие выполнимо для всех форм. Заметил это когда идёт проверка капчи. Сколько форм с капчёй на странице, столько и сообщений о неверной капче.

З.Ы. описал возможно криво.

Проблема решается если у инпута с типом submit в файле \templates\default\assets\ui\form.tpl.php в строке 188 можно было бы задать имя тегу name.
Т. е. вместо
  1. <?php echo html_submit( $submit['title'] ); ?>
задать так:
  1. <?php echo html_submit( $submit['title'], $submit['name'] ); ?>
тогда можно проверять какая именно кнопка была нажата
  1. $is_submitted = $inCore->request->has('название_нашей_кнопки_с_типом_submit');
#13 Конфликт... не работает слайдер на главной 30 ноября 2014 в 11:38
saymon21, подключите на главной
  1. <script type="text/javascript" src="/templates/3clicks/js/core.js"></script>
между тегами <head>
#14 Конфликт... не работает слайдер на главной 30 ноября 2014 в 09:37
У вас подключение многих скриптов происходит после футера, т. е. в самом конце страницы. Отсюда и ошибки сыпятся, что многие переменный в ява скриптах не объявлены. Попробуйте их подключить между тегами <head></head>
#15 Программирование форм в InstantCMS 2.x.x 29 ноября 2014 в 20:35

Допустимы ли в парадигме Instant 2 сразу две независимых формы в одном окне компонента?

Aquarius
Да — в парадигме допустимы, но чтобы реально работали нужно, что-то решить с капчёй. У меня reCaptcha выводится только один раз на странице. Тут или искать вариант с другой капчёй или отключить ее вообще (не рекомендую). Пробовал добавить action с id формы, столкнулся с тем, что при ошибке меня редиректило с сайта на страницу компонента с формой, что мне совсем не понравилось. Вникать долго в это не стал, возможно обработчик так направлял. Перепилил свой компонент iForms (в файлах пока не обновлял) — добавил в формы скрытое поле с id формы. Теперь данные в случае ошибки возвращаются в нужную форму и ошибочные поля подсвечиваются там же.

И еще раз хочу акцентировать внимание, что возможно стоит пересмотреть задачи и найти более интересное/оптимальное решение и не выводить одинаковую форму на странице несколько раз.

Val
Куда ещё интереснее и оптимальнее, чем полноценный конструктор форм, подобный тому, что есть в первой ветке, но по моему во второй он более гибкий в плане количества вариантов вывода на сайте?
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.