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

Alexey
8 минут назад
0
А приведите пример чанка, в котором подставляется модификатор (на феноме) и который не работает
Сергей
12 минут назад
0
В таком случае я уже не знаю куда копать(
Сергей
2 часа назад
0
Для наглядность
{$_modx->runSnippet('pdoResources', [
     'tpl' => 'categoris',
     'depth' => '0',
     'limit' => '1000',
     'parents' => $_modx->resource.id,
     'where' => '{ "isfolder":1 }',
     'sortby'=>'{ "menuindex":"ASC" }',
 ])}
============
<div class="widget-element-wrap grid-item-5 grid-item-900-4 grid-item-700-3 grid-item-550-2 grid-item-350-1">
    <a href="{$uri}" class="category-block">
        <div class="category-image">
            {$_modx->runSnippet('ms2Gallery', [
                'resources' => $id,
                'limit' => 1,
                'tpl' => 'tpl.categori'
            ])}
        </div>
        <div class="category-title">
            {$pagetitle}
        </div>
    </a>
</div>
============
{if $files?}
            {foreach $files as $file}
                    <picture>
                      <source srcset="{$file['webp250x250']}" type="image/webp">
                      <img class="lazyload"
                           data-src="{$file['webp250x250']}"
                           src="{$file['webp250x250']}"
                           alt="[[+pagetitle]]">
                    </picture>
            {/foreach}
    {else}
            <picture>
              <source type="image/webp" srcset="assets/themes/img/noimage.webp">
                   <img src="" data-src="assets/themes/img/noimage.jpg" data-srcset="assets/themes/img/noimage.jpg" class="lazy"  alt="Нет изображения" width="300" height="300"/>
            </picture>
    {/if}
Сергей
2 часа назад
0
Хотя нет, проблема не в этом, я проверил у категорий, там такая-же проблема, там все на fenom, не к чему придраться.
Сергей
2 часа назад
0
Спасибо за наводку, была такая мысль, попробую все на fenom переписать и дам ответ, я так делал потому, что часть функций не работало, сейчас все попробую переделать,
Николай Савин
2 часа назад
0
Нет ощущения. что дело не в неработающих примерах, как вы это подаете?
Для начала прекращайте смешивать синтаксис — у вас проблемы из-за этого, в том числе. Напишите все нормально либо в fenom, либо в MODX синтаксисе. Это разные технологии, они по разному устроены и работают.
Сергей
2 часа назад
0
Спасибо за обратною связь! Все примеры, что вы пишите, по сути есть в документации +- и они у меня не работают, исключительно работает только [[+pagetitle]] и если начать его как то изменять, то поле сразу становится пустым. Даже не работает ссылка на fenom, только так [[+uri]]
Сергей
2 часа назад
0
Дайте хоть одним глазком взглянуть, где в категории есть товары и у них у alt корректно работает (заменяются кавычки). Я не понимаю, у меня на старых и на новых проектах в галерее это не работает. Я могу установить все на чистый сайт и проделать все тоже самое, это не будет работать. Может есть какое-то колдовство)
Сергей
2 часа назад
0
Спасибо, проверил, это работает только для текущего ресурса, речь идет о том, что не работает в категории.
Alexey
2 часа назад
0
[[+pagetitle:htmlent]] — синтаксис MODX
{$pagetitle | htmlent} — fenom

Оба варианта рабочие, масса проектов с ними.
Константин Ильин
3 часа назад
0
{$file['product_id'] | resource : 'pagetitle' | htmlent}
Сергей
Вчера в 18:03
0
Ни первы ни второй вариант не работает) Я же говорю, я что только не пробовал)
Свой сниппет хотел сделать, но мне кажется галерея перестанет работать, проверю уже завтра.
Павел Романов
Вчера в 17:30
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}
Сергей
Вчера в 16:43
0
Это не работает, пусто, как на новых так и на старых сайтах.
Наумов Алексей
Вчера в 15:48
0
alt="{$pagetitle | e}"
e — это escape, документация

Да, я прочитал в тексте что не работает, но это должно работать. Готовый пример с десятка сайтов.
alex87.ru
16 октября 2025, 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`

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

*не могу с уверенностью сказать, сколько значений там будет, так как это полностью будет зависеть от фантазии заказчика, а она у него богатая:)
ВитОс
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`
Если правильно вас понял, то это то что вам нужно