alt у картинок без "" msgallery - minishop2

Уже давно писал данный вопрос, но он так и остался открытым, уже все ИИ закидал вопросами, но все бестолку, может есть тут кто решал подобную задачу.

Проблема в том, что в alt могу вывести название товара — pagetitle, НО если у товара стоят кавычки, то разметка ломается, не могу найти ни одного решения, что только не перепробовал.

Детально.
Вывожу на странице похожие товары (часть вывода скрыл):
[[!msProducts?
    ....
    &tpl=`ralated_products`
.....
]]
Сам шаблон ralated_products
{$_modx->runSnippet('msGallery', [
          'tpl' => 'v2.tpl.ms2Galleryrcat',
           'product' => $id,
           'limit' => 1,
 ])}
И шаблон галереи
....
	{foreach $files as $idx => $file}
		{if $idx == 0}
		<div class="item">
		     <a href="[[+uri]]">
                <picture>
                  <source type="image/webp" srcset="{$file['webp200x200']}">
                  <img class="lazy"
                       data-src="{$file['200x200']}"
                       src="{$file['200x200']}"
                       data-srcset="{$file['200x200']}"
                       alt='[[+pagetitle]]'
                       width="200"
                       height="200">
                </picture>
                </a>
            </div>  
		{/if}
	{/foreach}
.....


Если делать настройку у текущего товара, то работает так
{'[[*pagetitle:stripTags:htmlent=`ENT_QUOTES`]]'|parse}
Но у похожих не работает ни чего
{'[[+pagetitle:stripTags:htmlent=`ENT_QUOTES`]]'|parse}
Даже не работает {$pagetitle} и если я как-то меняю [[+pagetitle]] то он просто перестает выводится. (пусто)
По логике (моей) должно работать так {$pagetitle | escape} — но вывод пустой

Одно решение я знаю, это у картинок прописать title и брать средствами галереи (но это не вариант, там более 50 000 картинок)

Очень нужна помощь, всем заранее спасибо, надеюсь вопрос получился понятным и конструктивным.

P/S Нашел только такое решение на данный момент [[#[[+id]].pagetitle:stripTags:htmlent=`ENT_QUOTES`]] - не знаю на сколько это корректно, но работает.
Сергей
17 октября 2025, 13:33
modx.pro
1 802
0

Комментарии: 21

Наумов Алексей
17 октября 2025, 15:48
0
alt="{$pagetitle | e}"
e — это escape, документация

Да, я прочитал в тексте что не работает, но это должно работать. Готовый пример с десятка сайтов.
    Сергей
    17 октября 2025, 16:43
    0
    Это не работает, пусто, как на новых так и на старых сайтах.
    Павел Романов
    17 октября 2025, 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}
      Сергей
      17 октября 2025, 18:03
      0
      Ни первы ни второй вариант не работает) Я же говорю, я что только не пробовал)
      Свой сниппет хотел сделать, но мне кажется галерея перестанет работать, проверю уже завтра.
    Константин Ильин
    18 октября 2025, 09:55
    0
    {$file['product_id'] | resource : 'pagetitle' | htmlent}
      Сергей
      18 октября 2025, 10:45
      0
      Спасибо, проверил, это работает только для текущего ресурса, речь идет о том, что не работает в категории.
        Константин Ильин
        18 октября 2025, 16:14
        0
        не для текущего ресурса. Хоть где выводи msGallery, будет выводить именно тот pagetitle ресурса(товара) к которому принадлежит файл.

        Другое дело если, вам надо вывести pagetitle текущего ресурса, к которому файл не относится, то надо так:
        {$_modx->resource.pagetitle | htmlent}
        Ну и скорее всего вы обманываете всех, вы используете ms2Gallery, а не msGallery.

        там уже другой код
        {$file['resource_id'] | resource : 'pagetitle' | htmlent}
      Alexey
      18 октября 2025, 10:36
      0
      [[+pagetitle:htmlent]] — синтаксис MODX
      {$pagetitle | htmlent} — fenom

      Оба варианта рабочие, масса проектов с ними.
        Сергей
        18 октября 2025, 10:48
        0
        Дайте хоть одним глазком взглянуть, где в категории есть товары и у них у alt корректно работает (заменяются кавычки). Я не понимаю, у меня на старых и на новых проектах в галерее это не работает. Я могу установить все на чистый сайт и проделать все тоже самое, это не будет работать. Может есть какое-то колдовство)
          Сергей
          18 октября 2025, 10:50
          0
          Спасибо за обратною связь! Все примеры, что вы пишите, по сути есть в документации +- и они у меня не работают, исключительно работает только [[+pagetitle]] и если начать его как то изменять, то поле сразу становится пустым. Даже не работает ссылка на fenom, только так [[+uri]]
            Николай Савин
            18 октября 2025, 10:57
            0
            Нет ощущения. что дело не в неработающих примерах, как вы это подаете?
            Для начала прекращайте смешивать синтаксис — у вас проблемы из-за этого, в том числе. Напишите все нормально либо в fenom, либо в MODX синтаксисе. Это разные технологии, они по разному устроены и работают.
              Сергей
              18 октября 2025, 10:59
              0
              Спасибо за наводку, была такая мысль, попробую все на fenom переписать и дам ответ, я так делал потому, что часть функций не работало, сейчас все попробую переделать,
                Сергей
                18 октября 2025, 11:01
                0
                Хотя нет, проблема не в этом, я проверил у категорий, там такая-же проблема, там все на fenom, не к чему придраться.
                  Сергей
                  18 октября 2025, 11:05
                  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}
              Сергей
              18 октября 2025, 12:27
              0
              В таком случае я уже не знаю куда копать(
                Alexey
                18 октября 2025, 12:31
                0
                А приведите пример чанка, в котором подставляется модификатор (на феноме) и который не работает
                  Сергей
                  18 октября 2025, 12:44
                  0
                  Вот чанк
                  {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 | htmlent}">
                                      </picture>
                              {/foreach}
                      {else}
                  
                      {/if}
                  и вот такой вывод скрин

                  поле просто пустое, это как у msgallery, так и у ms2gallery
                    Павел Романов
                    18 октября 2025, 14:08
                    0
                    Тут нет плейсхолдера pagetitle — получайте его через $file.resource_id (для ms2Gallery) или $file.product_id (для msGallery).

                    {foreach $files as $file}
                        <picture>
                            <source srcset="{$file['webp250x250']}" type="image/webp">
                            <img class="lazyload"
                                data-src="{$file['webp250x250']}"
                                src="{$file['webp250x250']}"
                                alt="{$file.resource_id | resource : 'pagetitle' | htmlent}">
                        </picture>
                    {/foreach}
                      Сергей
                      18 октября 2025, 14:17
                      0
                      Спасибо! Так работает, почему у других то работает по другому)
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          21