Вопросы по созданию поля ввода (fields)

InstantCMS 2.X
#1 20 августа 2017 в 16:01
Приветствую!
Только начинаю осваивать InstantCMS, с информацией очень туго (точнее в вики почти не опубликовано ничего), особенно для довольно специфических задач типа поля ввода. Потому разбираюсь в основном на примерах чужого кода, но там тоже далеко не всё необходимое есть.

И потому 1й вопрос к Гуру, надеюсь, хоть кто-то подскажет.

Сейчас создаю внутреннюю часть поля, т.е. то, что видит админ при добавлении поля.
Он должен выбрать тип контента и данные по полям в этом типе. Ну и ещё немного прочего)

Всё работает, НО! Поскольку данные по полям и категориям подгружаются аяксом, при повторном редактировании (в общем, после сохранения) аякс-данные не заполнены. Что логично. Как их заполнить, уже почти понял и нашёл. Но не нашёл, как узнать данные, к примеру, типа контента. Сохранённые ранее.
Что бы сделать первичный вывод аяксовых данных. В "...extends cmsFormField". В "...extends cmsForm" нашёл, но в полях такое не работает.

Прошу прощения за возможную сумбурность, и очень надеюсь на помощь…
#2 20 августа 2017 в 17:17

Прошу прощения за возможную сумбурность, и очень надеюсь на помощь...

@AHgpeu
Если в спойлере приложить код шаблона вывода поля, то понять сумбурность будет проще)
/assets/fields/поле.tpl.php — вот этот.
#3 20 августа 2017 в 17:31


Если в спойлере приложить код шаблона вывода поля, то понять сумбурность будет проще)
/assets/fields/поле.tpl.php — вот этот.

@SmartControl
нет пока такого)) до шаблонов ещё не добрался. застрял с админской частью.

Сейчас создаю внутреннюю часть поля, т.е. то, что видит админ при добавлении поля.

@AHgpeu
см. вложение
Прикрепленный файл
Clipboard01_e7scf.png 36 Кб
#4 21 августа 2017 в 10:37
@AHgpeu, сделайте в методе store() поля вардамп $_REQUEST.
Увидите, что все введенные данные есть там. Т.е. можно проверять, если данные пришли, значит это не первое заполнение формы. А значит надо данные получить, вывести их в поле.

НО! Надо обязательно все фильтровать, доверять данным, пришедшим в $_REQUEST, нельзя.
#5 21 августа 2017 в 10:54
Zau4man, он видимо "застрял" на опциях.
@AHgpeu, на примере этого поля вам нужно между строками 12 и 13 получить список всех полей и категорий зная какой тип контента у вас выбран, и эти данные передать в поля опций параметром "items". Как-то так.
#6 21 августа 2017 в 11:49
Loadырь, Вы абсолютно правы, застрял именно там. Только проблема в другом...

зная какой тип контента у вас выбран

Loadырь
Мне вот как раз и нужно ЭТО узнать =-(

Zau4man, Мне не нужны данные, поступающие с формы. Это нужно отдавать на откуп движка, имхо. Безопаснее, как Вы и указали.

  1.  
  2. <?
  3. ...
  4. public function getOptions($options=false){
  5. return array(
  6.  
  7. // тут выбор типа контента. эта часть работает.
  8. new fieldList('ctype_id', array(
  9. 'title' => "Тип контента",
  10. 'generator' => function($item) {
  11.  
  12. $model = cmsCore::getModel('content');
  13. $tree = $model->getContentTypes();
  14.  
  15. $items = array();
  16.  
  17. if ($tree) {
  18. foreach ($tree as $item) {
  19. $items[$item['id']] = $item['title'];
  20. }
  21. }
  22.  
  23. return $items;
  24.  
  25. },
  26. )),
  27.  
  28. // тут выбор поля картинки, в зависимости от выбранного выше типа контента.
  29. // соответственно, при работе всё работает, выбирается, в базу запись происходит.
  30. // но при повторном заходе в "свойства поля" оказывается пустой и не заполненной.
  31.  
  32. new fieldList('image_field', array(
  33. 'title' => "Картинка",
  34. 'parent' => array(
  35. 'list' => 'ctype_id',
  36. 'url' => href_to('content', 'widget_fields_ajax')
  37. ),
  38. 'items' => $fields_list
  39. )),
  40.  
  41.  
  42. /***************************************************/
  43.  
  44. // вот так должно доставаться значение $fields_list. Соответственно, в начале метода)
  45. $content_model = cmsCore::getModel('content');
  46.  
  47. $ctype = $content_model->getContentType($options['ctype_id']);
  48.  
  49. $fields = $content_model->getContentFields($ctype['name']);
  50. if ($fields){ $fields_list = array(''=>'') + array_collection_to_list($fields, 'name', 'title'); }
  51.  
  52.  
А вот теперь вопрос: как мне узнать $options['ctype_id'] из данного примера?
Который был РАНЕЕ ЗАПИСАН В БД...

Не нашёл...

в В "...extends cmsForm" пример работает. в "...extends cmsFormField" нет. Переменная $options пустая.
#7 23 августа 2017 в 15:44
"Лююююдииии! Ну кто так строит ©"
=-)
Подскажите (просмотрев предыдущий пост), как узнать, какой тип контента был выбран ранее и хранится в бд? В опциях поля ввода.
Воротить костыли в виде дополнительных запросов в базу сильно не хочется, ведь стопроцентно нужные данные уже вытащены и ждут своего часа...

Неужели никто не знает?..
#8 23 августа 2017 в 16:51
@AHgpeu, увы, данные из формы передаются в форму (cmsForm), а в классе поля формы (cmsFormField) доступны пустые объекты самих полей.
#9 23 августа 2017 в 17:25
Вообще забрался в тупик… $this->id и тот пустой, как и name. Как узнать хоть что-то о себе в классе поля формы (cmsFormField)?

Содержимое $this удручает:
  1. fieldCer Object
  2. (
  3. [title] => _test
  4. [sql] => INT(11) UNSIGNED NULL DEFAULT NULL
  5. [allow_index] => 1
  6. [var_type] => integer
  7. [is_public] => 1
  8. [name] =>
  9. [element_name] =>
  10. [filter_type] =>
  11. [filter_hint] =>
  12. [element_title] =>
  13. [cache_sql] =>
  14. [is_denormalization] =>
  15. [item] =>
  16. [is_virtual] =>
  17. [is_hidden] =>
  18. [rules] => Array
  19. (
  20. )
  21.  
  22. [options] => Array
  23. (
  24. )
  25.  
  26. [data] => Array
  27. (
  28. )
  29.  
  30. [class] => cer
  31. [id] =>
  32. )
При том, что запись поля в БД есть..

Простите, если вопросы совсем нубские…
#10 23 августа 2017 в 17:47

увы, данные из формы передаются в форму (cmsForm), а в классе поля формы (cmsFormField) доступны пустые объекты самих полей

Loadырь
и до данных из формы я не добрался. пока нужно сделать "опции" поля.
  1.  
  2. class fieldCer extends cmsFormField {
  3. public function getOptions(){
  4.  
вот тут надо узнать хоть что-то о поле, во время редактирования в админке (НЕ при выводе самого поля. а при его настройке)
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.