alt у картинок без "" msgallery - minishop2
        Уже давно писал данный вопрос, но он так и остался открытым, уже все ИИ закидал вопросами, но все бестолку, может есть тут кто решал подобную задачу.
Проблема в том, что в alt могу вывести название товара — pagetitle, НО если у товара стоят кавычки, то разметка ломается, не могу найти ни одного решения, что только не перепробовал.
Детально.
Вывожу на странице похожие товары (часть вывода скрыл):
Если делать настройку у текущего товара, то работает так
{'[[*pagetitle:stripTags:htmlent=`ENT_QUOTES`]]'|parse}
Но у похожих не работает ни чего
По логике (моей) должно работать так {$pagetitle | escape} — но вывод пустой
Одно решение я знаю, это у картинок прописать title и брать средствами галереи (но это не вариант, там более 50 000 картинок)
Очень нужна помощь, всем заранее спасибо, надеюсь вопрос получился понятным и конструктивным.
    
    
                                                                                
            Проблема в том, что в alt могу вывести название товара — pagetitle, НО если у товара стоят кавычки, то разметка ломается, не могу найти ни одного решения, что только не перепробовал.
Детально.
Вывожу на странице похожие товары (часть вывода скрыл):
[[!msProducts?
    ....
    &tpl=`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 | escape} — но вывод пустой
Одно решение я знаю, это у картинок прописать title и брать средствами галереи (но это не вариант, там более 50 000 картинок)
Очень нужна помощь, всем заранее спасибо, надеюсь вопрос получился понятным и конструктивным.
P/S Нашел только такое решение на данный момент [[#[[+id]].pagetitle:stripTags:htmlent=`ENT_QUOTES`]] - не знаю на сколько это корректно, но работает.Комментарии: 21
alt="{$pagetitle | e}"Да, я прочитал в тексте что не работает, но это должно работать. Готовый пример с десятка сайтов.
                Это не работает, пусто, как на новых так и на старых сайтах.            
                    
                А так не работает (пробелы только в & quot; уберите)?
Или можно сделать сниппет filter (он еще и кавычки-елочки ставит вместо обычных):
Ну и
                    [[+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}
                Ни первы ни второй вариант не работает) Я же говорю, я что только не пробовал) 
Свой сниппет хотел сделать, но мне кажется галерея перестанет работать, проверю уже завтра.
                    Свой сниппет хотел сделать, но мне кажется галерея перестанет работать, проверю уже завтра.
                -            
                    {$file['product_id'] | resource : 'pagetitle' | htmlent}
                Спасибо, проверил, это работает только для текущего ресурса, речь идет о том, что не работает в категории.            
                    
                не для текущего ресурса. Хоть где выводи msGallery, будет выводить именно тот pagetitle ресурса(товара) к которому принадлежит файл.
Другое дело если, вам надо вывести pagetitle текущего ресурса, к которому файл не относится, то надо так:
там уже другой код
                    Другое дело если, вам надо вывести pagetitle текущего ресурса, к которому файл не относится, то надо так:
{$_modx->resource.pagetitle | htmlent}там уже другой код
{$file['resource_id'] | resource : 'pagetitle' | htmlent}
                [[+pagetitle:htmlent]] — синтаксис MODX
{$pagetitle | htmlent} — fenom
Оба варианта рабочие, масса проектов с ними.
                    {$pagetitle | htmlent} — fenom
Оба варианта рабочие, масса проектов с ними.
                Дайте хоть одним глазком взглянуть, где в категории есть товары и у них у alt корректно работает (заменяются кавычки). Я не понимаю, у меня на старых и на новых проектах в галерее это не работает. Я могу установить все на чистый сайт и проделать все тоже самое, это не будет работать. Может есть какое-то колдовство)            
                    
                Спасибо за обратною связь! Все примеры, что вы пишите, по сути есть в документации +- и они у меня не работают, исключительно работает только [[+pagetitle]] и если начать его как то изменять, то поле сразу становится пустым. Даже не работает ссылка на fenom, только так [[+uri]]            
                    
                Нет ощущения. что дело не в неработающих примерах, как вы это подаете? 
Для начала прекращайте смешивать синтаксис — у вас проблемы из-за этого, в том числе. Напишите все нормально либо в fenom, либо в MODX синтаксисе. Это разные технологии, они по разному устроены и работают.
                    Для начала прекращайте смешивать синтаксис — у вас проблемы из-за этого, в том числе. Напишите все нормально либо в fenom, либо в MODX синтаксисе. Это разные технологии, они по разному устроены и работают.
                Спасибо за наводку, была такая мысль, попробую все на fenom переписать и дам ответ, я так делал потому, что часть функций не работало, сейчас все попробую переделать,            
                    
                Хотя нет, проблема не в этом, я проверил у категорий, там такая-же проблема, там все на fenom, не к чему придраться.            
                    
                Для наглядность 
 
                    {$_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}
                В таком случае я уже не знаю куда копать(            
                    
                А приведите пример чанка, в котором подставляется модификатор (на феноме) и который не работает            
                    
                Вот чанк 
 
поле просто пустое, это как у msgallery, так и у ms2gallery
                    {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
                Тут нет плейсхолдера 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}
                Спасибо! Так работает, почему у других то работает по другому)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    
             
             
                    
                    
                







