Генерация списка полей в виджете

InstantCMS 2.X
#1 3 августа 2021 в 20:07

здравствуйте. возможно ли к генерируемому списку полей в настройках виджета добавить свои список, значения?

#2 5 августа 2021 в 19:52

В результат (в конец или начало) этой функции добавить свои значения, понимаю что там массив, но как в него добавить не знаю

new fieldList('options:field', array(
                        'title' => 'Поле',
                        'parent' => array(
                            'list' => 'options:ctype_id',
                            'url'  => href_to('content', 'widget_fields_ajax')
                        ),
                        'generator' => $field_generator
                    )),

#3 5 августа 2021 в 21:45

 kolecha

Не очень понятно, что Вы хотите сделать, но посмотрите, как это сделано в других местах InstantCMS.

Пример:

  1. new fieldList('size_teaser', array(
  2. 'title' => LANG_PARSER_IMAGE_SIZE_TEASER,
  3. 'default' => 'small',
  4. 'generator' => function (){
  5. $presets = cmsCore::getModel('images')->getPresetsList(true);
  6. $presets['original'] = LANG_PARSER_IMAGE_SIZE_ORIGINAL;
  7. return $presets;
  8. },
  9. 'extended_option' => true
  10. )),

То есть генератор — это функция, которая возвращает некий массив. Если у вас уже есть этот массив, просто укажите его и всё.

'generator' => $myarray

#4 5 августа 2021 в 23:20

 kolecha

Не очень понятно, что Вы хотите сделать, но посмотрите, как это сделано в других местах InstantCMS.

Пример:

  1. new fieldList('size_teaser', array(
  2. 'title' => LANG_PARSER_IMAGE_SIZE_TEASER,
  3. 'default' => 'small',
  4. 'generator' => function (){
  5. $presets = cmsCore::getModel('images')->getPresetsList(true);
  6. $presets['original'] = LANG_PARSER_IMAGE_SIZE_ORIGINAL;
  7. return $presets;
  8. },
  9. 'extended_option' => true
  10. )),

То есть генератор — это функция, которая возвращает некий массив. Если у вас уже есть этот массив, просто укажите его и всё.

'generator' => $myarray

Ris

То что массив это понятно, в самом файле настроек функция написана, но в ней не получилось к результату добавить свой массив. Мне не заменить нужно, а к сформированному массиву списка полей добавить свои позиции.

#5 6 августа 2021 в 00:13

Мне не заменить нужно, а к сформированному массиву списка полей добавить свои позиции

Так это ещё проще. Другое дело, что вы либо считаете, что у вас очень крутая уникальная идея, о которой никому нельзя говорить, либо хотите, чтобы вам всё принесли на блюдечке, а самому тупо влом скопировать и вставить кусок кода этой функции. Вы на самом деле считаете, что сейчас какой-нибудь экстрасенс возьмёт и сам догадается, чего вы там придумали? Да всем плевать на вашу мега-идею, завтра эта тема потеряется и больше никто ее не увидит никогда. Нужна помощь? Дайте исходники. 

#6 6 августа 2021 в 08:01

Что скрывать, это стандартные функции, погрузка полей в зависимости от типа контента и категории. Просто думал в списо полей добавить ещё позиции: Просмотры, Дата публикации и т.д.

        $field_generator = function ($item, $request) use($content_model) {
            $list     = ['' => ''];
            $ctype_id = is_array($item)? array_value_recursive('options:ctype_id', $item): false;
            if (!$ctype_id && $request) {
                $ctype_id = $request->get('options:ctype_id', 0);
            }
            if (!$ctype_id) {
                return $list;
            }
            $ctype = $content_model->getContentType($ctype_id);
            if (!$ctype) {
                return $list;
            }
            $fields = $content_model->getContentFields($ctype['name']);
            if ($fields) {
                $list = $list + array_collection_to_list($fields, 'name', 'title');
            }
            return $list;
        };
new fieldList('options:field', array(
                        'title' => 'Поле',
                        'parent' => array(
                            'list' => 'options:ctype_id',
                            'url'  => href_to('content', 'widget_fields_ajax')
                        ),
                        'generator' => $field_generator
                    )),

Можно не заморачиваться конечно, просто отдельно его вывести... 

#7 6 августа 2021 в 12:13

Внизу перед return $list; добавьте массив со своими значениями, а потом соедините два массива.

  1. $myval = array(
  2. 'field_1' => 'Первое свое значение',
  3. 'field_2' => 'Второе свое значение',
  4. 'field_3' => 'Третье свое значение'
  5. );
  6.  
  7. $list = array_merge($list, $myval);
Добавлено спустя 44 минуты

Только это ничего не даст в итоге, потому что список полей генерируется вообще в другом месте. А эта функция, судя по всему, для указания изображения и тизера во вкладке «Устаревшие опции».

Добавлено спустя 3 часа

Просмотры, Дата публикации и т.д.

kolecha

Если бы мне надо было это, я бы в шаблоне вывел эти поля и закрыл вопрос. В том же list_basic.tpl.php дата уже выведена, вставить только просмотры. Да и шаблон можно свой добавить, и тогда изменения никакие не слетят при обновлении.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.