Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 099 комментариев

ВитОс
ВитОс
мне кажется если не много значений будет, то можно использовать обычный migx без кастомных баз
вот пример
самый простой вариант
создать migx color
{
  "formtabs":[
    {
      "MIGX_id":1,
      "caption":"",
      "print_before_tabs":"0",
      "fields":[
        {
          "MIGX_id":1,
          "field":"name",
          "caption":"\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
          "description":"",
          "description_is_code":"0",
          "inputTV":"",
          "inputTVtype":"",
          "validation":"",
          "configs":"",
          "restrictive_condition":"",
          "display":"",
          "sourceFrom":"config",
          "sources":"",
          "inputOptionValues":"",
          "default":"",
          "useDefaultIfEmpty":"0",
          "pos":1
        },
        {
          "MIGX_id":2,
          "field":"number",
          "caption":"\u041d\u043e\u043c\u0435\u0440",
          "description":"",
          "description_is_code":"0",
          "inputTV":"",
          "inputTVtype":"number",
          "validation":"",
          "configs":"",
          "restrictive_condition":"",
          "display":"",
          "sourceFrom":"config",
          "sources":"",
          "inputOptionValues":"",
          "default":"",
          "useDefaultIfEmpty":"0",
          "pos":2
        }
      ],
      "pos":1
    }
  ],
  "contextmenus":"",
  "actionbuttons":"",
  "columnbuttons":"",
  "filters":"",
  "extended":{
    "migx_add":"",
    "disable_add_item":"",
    "add_items_directly":"",
    "formcaption":"",
    "update_win_title":"",
    "win_id":"",
    "maxRecords":"",
    "addNewItemAt":"bottom",
    "media_source_id":"",
    "multiple_formtabs":"",
    "multiple_formtabs_label":"",
    "multiple_formtabs_field":"",
    "multiple_formtabs_optionstext":"",
    "multiple_formtabs_optionsvalue":"",
    "actionbuttonsperrow":4,
    "winbuttonslist":"",
    "extrahandlers":"",
    "filtersperrow":4,
    "packageName":"",
    "classname":"",
    "task":"",
    "getlistsort":"",
    "getlistsortdir":"",
    "sortconfig":"",
    "gridpagesize":"",
    "use_custom_prefix":"0",
    "prefix":"",
    "grid":"",
    "gridload_mode":1,
    "check_resid":1,
    "check_resid_TV":"",
    "join_alias":"",
    "has_jointable":"yes",
    "getlistwhere":"",
    "joins":"",
    "hooksnippets":"",
    "cmpmaincaption":"",
    "cmptabcaption":"",
    "cmptabdescription":"",
    "cmptabcontroller":"",
    "winbuttons":"",
    "onsubmitsuccess":"",
    "submitparams":""
  },
  "permissions":{
    "apiaccess":"",
    "view":"",
    "list":"",
    "save":"",
    "create":"",
    "remove":"",
    "delete":"",
    "publish":"",
    "unpublish":"",
    "viewdeleted":"",
    "viewunpublished":""
  },
  "fieldpermissions":"",
  "columns":[
    {
      "MIGX_id":1,
      "header":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430",
      "dataIndex":"name",
      "width":"",
      "sortable":"false",
      "show_in_grid":1,
      "customrenderer":"",
      "renderer":"",
      "clickaction":"",
      "selectorconfig":"",
      "renderchunktpl":"",
      "renderoptions":"",
      "editor":""
    }
  ],
  "category":""
}
его подключаем например на tv_color
Затем создаем migx new
{
  "formtabs":[
    {
      "MIGX_id":3,
      "caption":"",
      "print_before_tabs":"0",
      "fields":[
        {
          "MIGX_id":4,
          "field":"selected_item",
          "caption":"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",
          "description":"\u0412\u044b\u0431\u043e\u0440 \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439",
          "description_is_code":"0",
          "inputTV":"",
          "inputTVtype":"listbox",
          "validation":"",
          "configs":"",
          "restrictive_condition":"",
          "display":"",
          "sourceFrom":"config",
          "sources":"",
          "inputOptionValues":"@SNIPPET getTestItems",
          "default":"",
          "useDefaultIfEmpty":"0",
          "pos":1
        },
        {
          "MIGX_id":5,
          "field":"custom_note",
          "caption":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430",
          "description":"\u041b\u044e\u0431\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435",
          "description_is_code":"0",
          "inputTV":"",
          "inputTVtype":"",
          "validation":"",
          "configs":"",
          "restrictive_condition":"",
          "display":"",
          "sourceFrom":"config",
          "sources":"",
          "inputOptionValues":"",
          "default":"",
          "useDefaultIfEmpty":"0",
          "pos":2
        }
      ],
      "pos":1
    }
  ],
  "contextmenus":"",
  "actionbuttons":"",
  "columnbuttons":"",
  "filters":"",
  "extended":{
    "migx_add":"",
    "disable_add_item":"",
    "add_items_directly":"",
    "formcaption":"",
    "update_win_title":"",
    "win_id":"",
    "maxRecords":"",
    "addNewItemAt":"bottom",
    "media_source_id":"",
    "multiple_formtabs":"",
    "multiple_formtabs_label":"",
    "multiple_formtabs_field":"",
    "multiple_formtabs_optionstext":"",
    "multiple_formtabs_optionsvalue":"",
    "actionbuttonsperrow":4,
    "winbuttonslist":"",
    "extrahandlers":"",
    "filtersperrow":4,
    "packageName":"",
    "classname":"",
    "task":"",
    "getlistsort":"",
    "getlistsortdir":"",
    "sortconfig":"",
    "gridpagesize":"",
    "use_custom_prefix":"0",
    "prefix":"",
    "grid":"",
    "gridload_mode":1,
    "check_resid":1,
    "check_resid_TV":"",
    "join_alias":"",
    "has_jointable":"yes",
    "getlistwhere":"",
    "joins":"",
    "hooksnippets":"",
    "cmpmaincaption":"",
    "cmptabcaption":"",
    "cmptabdescription":"",
    "cmptabcontroller":"",
    "winbuttons":"",
    "onsubmitsuccess":"",
    "submitparams":""
  },
  "permissions":{
    "apiaccess":"",
    "view":"",
    "list":"",
    "save":"",
    "create":"",
    "remove":"",
    "delete":"",
    "publish":"",
    "unpublish":"",
    "viewdeleted":"",
    "viewunpublished":""
  },
  "fieldpermissions":"",
  "columns":[
    {
      "MIGX_id":1,
      "header":"\u0437\u0430\u043c\u0435\u0442\u043a\u0430",
      "dataIndex":"custom_note",
      "width":"",
      "sortable":"false",
      "show_in_grid":1,
      "customrenderer":"",
      "renderer":"",
      "clickaction":"",
      "selectorconfig":"",
      "renderchunktpl":"",
      "renderoptions":"",
      "editor":""
    },
    {
      "MIGX_id":2,
      "header":"\u0426\u0432\u0435\u0442",
      "dataIndex":"selected_item",
      "width":"",
      "sortable":"false",
      "show_in_grid":1,
      "customrenderer":"",
      "renderer":"",
      "clickaction":"",
      "selectorconfig":"",
      "renderchunktpl":"",
      "renderoptions":"",
      "editor":""
    }
  ],
  "category":""
}
тут в поле selected_item в Input Option Values указан спиппет
создаем его getTestItems
$output = [];

// Получаем TV с первым MIGX где цвет
$tv = $modx->getObject('modTemplateVar', array('name' => 'tv_color'));
if ($tv) {
    $value = $tv->getValue($modx->resource->get('id'));
    
    if (!empty($value)) {
        $items = $modx->fromJSON($value);
        
        if (is_array($items)) {
            foreach ($items as $item) {
                if (!empty($item['name'])) {
                    $output[] = $item['name'] . '==' . $item['number'];
                }
            }
        }
    }
}

return implode('||', $output);
вот что получается




если их будет очень много можно вместо сниппета указать запрос к bd например
@SELECT `name`,`number` FROM `[[+PREFIX]]migx_color`
Если правильно вас понял, то это то что вам нужно
Евгений
Евгений
Уважаемый @ВитОс я как раз не хочу усложнять.
Задача казалась простой: сделать аналог мультивыбора: туда можно вбить значение, которого нет в предустановленном списке, и далее оно будет показываться.
Здесь, вместо простого строкового значения я хочу сохранять пару (название+текст) и в дальнейшем иметь возможность выбрать только что добавленный вариант. Путём некоторых размышлений пришёл к такому варианту. Храниться этот список думал в modx_migx_configelements

Если есть вариант проще и нативнее, то я Вас с удовольствием почитаю! подскажете?
Евгений
Евгений
@Сергей Карпович @Тодор Спасибо Вам огромное! Всё заработало как надо после внесения этих 2х изменений!

Буду также благодарен, если посмотрите на ещё один мой вопрос: modx.pro/help/25368
Aleksandr Huz
Aleksandr Huz
Сергей
Сергей
Пользовался плагином (правда пока только фри версией) на паре небольших инфо-сайтов вообще мастхев.
Надеюсь в ближайшее время подвернется возможность попробовать на каком-нибудь проекте полную версию.
Как мне кажется тем кто знаком с ларавел-разработкой въехать в работу дополнения не составит труда, мне хватило бегло почитать документацию.
Автору респект и сил пилить дальше это крутое дополнение.
Сергей Карпович
Сергей Карпович
А еще возьми за правило, если необходимо в колонке показать рендер через чанк, то для этого создай дополнительную колонку, например advantages_render, как советовал Тодор.
Сергей Карпович
Сергей Карпович
Николай Савин
Николай Савин
Продолжаю эксперименты с AI контентом. Для сравнения подключил DeepSeek к нашем дайджесту. Как по мне, получилось намного лучше, сравнение с Yandex GPT наглядное.

@Aleksandr Huz на этот раз тебя не забыли.
DeepSeek конечно отсыпал знатно и всему сообществу, и мне за минишоп и отдельным товарищам