alt у картинок без "" msgallery - minishop2
Уже давно писал данный вопрос, но он так и остался открытым, уже все ИИ закидал вопросами, но все бестолку, может есть тут кто решал подобную задачу.
Проблема в том, что в alt могу вывести название товара — pagetitle, НО если у товара стоят кавычки, то разметка ломается, не могу найти ни одного решения, что только не перепробовал.
Детально.
Вывожу на странице похожие товары (часть вывода скрыл):
Если делать настройку у текущего товара, то работает так
{'[[*pagetitle:stripTags:htmlent=`ENT_QUOTES`]]'|parse}
Но у похожих не работает ни чего
По логике (моей) должно работать так {$pagetitle | escape} — но вывод пустой
Одно решение я знаю, это у картинок прописать title и брать средствами галереи (но это не вариант, там более 50 000 картинок)
Очень нужна помощь, всем заранее спасибо, надеюсь вопрос получился понятным и конструктивным.
Проблема в том, что в 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`]] - не знаю на сколько это корректно, но работает. Комментарии: 21
alt="{$pagetitle | e}"e — это escape, документацияДа, я прочитал в тексте что не работает, но это должно работать. Готовый пример с десятка сайтов.
Это не работает, пусто, как на новых так и на старых сайтах.
А так не работает (пробелы только в & 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}Ну и скорее всего вы обманываете всех, вы используете ms2Gallery, а не msGallery.там уже другой код
{$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}
Спасибо! Так работает, почему у других то работает по другому)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.