ВитОс

ВитОс

С нами с 03 июня 2022; Место в рейтинге пользователей: #56
ВитОс
16 октября 2025, 00:17
0
мне кажется если не много значений будет, то можно использовать обычный 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`
Если правильно вас понял, то это то что вам нужно
ВитОс
15 октября 2025, 02:38
0
Зачем вы опять усложняете. Где вы хотите брать список (где и как он должен обновляться)?
ВитОс
14 октября 2025, 23:12
0
удалил pr будет время создам заново, как нужно, по одному, а не пачкой
ВитОс
06 октября 2025, 16:39
+2
спасибо. я и хотел просто поделиться. Понятное дело что попадет в общую версию, просто когда ищешь как решить одну и туже проблему по сто раз уходит много времени, вот и решил тут поделиться
ВитОс
03 октября 2025, 10:25
0
А как обновить его. Просто тут выложить?
На GitHub давно новых релизов не было
ВитОс
01 октября 2025, 23:15
0
да по хорошему нужно весь PdoTools подправить
тут писали давно что хотят обновить и тишина
Думаю заняться если Василий даст добро
Будет у меня первая такая штука
ВитОс
30 сентября 2025, 14:18
+1
у меня ai в timeweb плачу только за токены и бд, самое бд ~1800 токеты например deepseeak 500k 80 деревянных, GPT 5 660, сейчас у них самая дорогая CLOUDE и GROK по 1000
конечно если безлимит токеном нужен тогда и сервак GPU в копейку влетит
ВитОс
29 сентября 2025, 20:16
0
Для написания кода с новыми методами и документациями проще всего взять в нейротоксин закинуть новые доки и она все сделает правильно. Речь о загрузки новой информации ей в БД и она будет ее брать от туда. Я на deepseek так сделал
ВитОс
01 июня 2025, 15:40
0
Можно через снимает или fenom. Сделать. Да и if else не кто не отменял, даже в стандартном шаблонизаторе
ВитОс
20 февраля 2025, 18:39
0
Создать сниппет или плагин.
ВитОс
18 февраля 2025, 12:38
0
Эквайринг для самозянятых нужен
два знаю
intellect money
pay any way
ВитОс
15 февраля 2025, 01:39
0
В тройке он не работает
Используйте pThumb
ВитОс
26 января 2025, 17:19
0
Не работает если использовать феном
{'!FetchIt' | snippet : [
                      'snippet' => 'FormIt',
                      'form' => 'add.tpl',
                      'preHooks' => 'foreach'
                    ]}
если написать так то все работает
[[!FetchIt?
                    &snippet=`FormIt`
                    &form=`add.tpl`
                    &preHooks=`foreach`
                 ]]
ВитОс
24 января 2025, 01:52
0
так не чего не выводит вообще
ВитОс
23 января 2025, 15:05
0
так тоже не выводит(
ВитОс
23 января 2025, 11:51
0
в документации так написано
Обработка чекбоксов и мульти-селектора в пользовательском хуке
Если вы хотите установить поле массива (т.е. группу флажков с тем же именем или мульти-селектор) в preHook, вам нужно применить json_encode для значения массива.
$hook->setValue('hobbies',json_encode(array('music','films','books')));
или я не так понял?
как их заполнить?
ВитОс
08 января 2025, 19:32
0
там элементарная форма платежной системы. любую возьмите и по документации сделайте
ВитОс
22 ноября 2024, 08:53
0
если правильно понял то так
{set $rows = json_decode($_modx->resource.constructor_block, true)}
                        {foreach $rows as $index => $row}
                                <strong>{$row.name}</strong> {$row.description}
                                {set $lessons = json_decode($row.lesson, true)}
                                            {foreach $lessons as $lesson}
                                                    <h4>{$lesson.title}</h4>
                                            {/foreach}
                        {/foreach}
ВитОс
15 ноября 2024, 17:40
0
спасибо, несколько раз проверял и не заметил)