Всего 125 167 комментариев

Сергей
4 часа назад
0
Ни первы ни второй вариант не работает) Я же говорю, я что только не пробовал)
Свой сниппет хотел сделать, но мне кажется галерея перестанет работать, проверю уже завтра.
Павел Романов
5 часов назад
0
А так не работает (пробелы только в & quot; уберите)?
[[+pagetitle:replace=`"==& quot ;`]]
{$pagetitle | replace : '"' : '& quot ;'}

Или можно сделать сниппет filter (он еще и кавычки-елочки ставит вместо обычных):
<?php
$str = $modx->stripTags($input);
$str = preg_replace("#([^=])\"([^\"]+)\"#", "\\1«\\2»", $str);
$arr1 = array(' & ', '"', '\'');
$arr2 = array(' & amp ; ', '& quot ;', '& apos ;');
return str_replace($arr1, $arr2, $str);

Ну и
[[+pagetitle:filter]]
{$pagetitle | filter}
Сергей
5 часов назад
0
Это не работает, пусто, как на новых так и на старых сайтах.
Наумов Алексей
6 часов назад
0
alt="{$pagetitle | e}"
e — это escape, документация

Да, я прочитал в тексте что не работает, но это должно работать. Готовый пример с десятка сайтов.
alex87.ru
Вчера в 14:39
0
Иван, привет, хороший компонент. Предложения:
1. Сделай настройку хранения миниатюр (assets/components/thumb3x/cache/), чтобы в место стандартного пути можно было указать свой (более короткий).
И в документации напиши вариант в виде модификатора, например:
{$images | Thumb3x : "w=239&h=331&zc=1"}
— так кстати работает, а вот так
{$images | Thumb3x : "w=239&h=331&zc=1&f=webp"}
— тоже работает, только не меняет формат изображения
А вот такое:
<img src="[[!Thumb3x?
    &sourceId=`2`
    &input=`[[*TV_proba]]` 
    &options=`w=520&h=520`

    &quality=`80`
    &format=`webp`

]]">
Как то диковато выглядит — ну если только в шаблоне так что то можно вызывать, в чанах лучше как модификатор
Евгений
Вчера в 10:42
0
@ВитОс то есть, Ваше предложение — создать одно tv для хранения, а второе для выбора из первого?
Если так, то да, согласен. Я сейчас как раз «откатился» к тому, что создал отдельную техническую страницу, завел там tv для хранения списка значений и «подсасываю» значения в другую тв-шку.
Но я чот прям хочу заморочиться на красоте решения:) И, как будто бы, всё получилось, кроме последнего, самого важного шага — сохранения migx значения путём обращения к migx через js =)

*не могу с уверенностью сказать, сколько значений там будет, так как это полностью будет зависеть от фантазии заказчика, а она у него богатая:)
ВитОс
Вчера в 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, 22:19
0
Уважаемый @ВитОс я как раз не хочу усложнять.
Задача казалась простой: сделать аналог мультивыбора: туда можно вбить значение, которого нет в предустановленном списке, и далее оно будет показываться.
Здесь, вместо простого строкового значения я хочу сохранять пару (название+текст) и в дальнейшем иметь возможность выбрать только что добавленный вариант. Путём некоторых размышлений пришёл к такому варианту. Храниться этот список думал в modx_migx_configelements

Если есть вариант проще и нативнее, то я Вас с удовольствием почитаю! подскажете?
Евгений
15 октября 2025, 13:49
0
Добрый день! Подскажите а в какой файл прописывать эти коды? index.php или какой то другой?
ВитОс
15 октября 2025, 02:38
0
Зачем вы опять усложняете. Где вы хотите брать список (где и как он должен обновляться)?
ВитОс
14 октября 2025, 23:12
0
удалил pr будет время создам заново, как нужно, по одному, а не пачкой
Александр Туниеков
14 октября 2025, 18:11
0
Полез смотреть код и похоже @ВитОс его откатил :-(. Пустые коммиты только вижу.
Евгений
14 октября 2025, 17:06
0
@Сергей Карпович @Тодор Спасибо Вам огромное! Всё заработало как надо после внесения этих 2х изменений!

Буду также благодарен, если посмотрите на ещё один мой вопрос: modx.pro/help/25368
Aleksandr Huz
14 октября 2025, 13:43
0
Спасибо!
Для тех, кто не знаком с ларавел или вообще новичок, можно использовать интерфейс компонента, который позволяет собирать блоки, вкладки, панели и отдельные меню с таблицами. На фронте использовать сниппеты.
А вот для сложных проектов удобно работать с контроллерами и роутами — здесь знания ларавела будут большим плюсом, но для тех, кто не знаком с ним, достаточно внимательно читать документацию.
Сергей
14 октября 2025, 11:51
+1
Пользовался плагином (правда пока только фри версией) на паре небольших инфо-сайтов вообще мастхев.
Надеюсь в ближайшее время подвернется возможность попробовать на каком-нибудь проекте полную версию.
Как мне кажется тем кто знаком с ларавел-разработкой въехать в работу дополнения не составит труда, мне хватило бегло почитать документацию.
Автору респект и сил пилить дальше это крутое дополнение.
Сергей Карпович
13 октября 2025, 22:52
0
А еще возьми за правило, если необходимо в колонке показать рендер через чанк, то для этого создай дополнительную колонку, например advantages_render, как советовал Тодор.
Александр
13 октября 2025, 22:20
0
Не работает внутри чанка.
Рабочая конструкция
<img src="[[+tv.image:phpthumb=`w=830&h=822&zc=1&f=webp`]]" class=«card-img-top»
alt="[[+custom-alt-Image?]]">
Меняем на
TV называется image с id равному 3
Евгений
13 октября 2025, 22:15
0
Спасибо, Сергей. Закрадывалась такая мысль, что имена пересекаются. Попробую реализовать.