Игорь

Игорь

С нами с 27 мая 2015; Место в рейтинге пользователей: #366
Игорь
09 ноября 2021, 15:03
0
1. @iWatchYouFromAfar, вы правы — мне следовало написать, что предложенный вами вариант решает задачу формирования семантически правильных ХК («хлебных крошек») в 99,9% случаях (специально проверил на своих и клиентских сайтах). Спасибо, что выложили рабочий код, но заметки на вашем сайте я читаю достаточно внимательно (давно уже в закладках).

Тем не менее, предложенный вами вариант формирования ХК на одном сайте «не сработал» (повторно перепроверял … ни в какую… ). Спасибо за предложенный вами вариант замены
href="{$_modx->makeUrl(1)}"
на
href="{$_modx->makeUrl($_modx->config['site_start’])}"
но в этом случае получаю ошибку
«Unexpected token 'site_start' in expression in pdoCrumbs»
Буду благодарен за совет, как от нее избавится.

2. По поводу того, что «на всех нормальных сайтах в ХК просто напросто нет текущего элемента» — не соглашусь. Например, на многих «нормальных» сайтах установлен SeoFilter, в котором «стандартный функционал заточен под чанк tpl.SeoFilter.crumbs.current, который идёт в комплекте. Для тех, кто использует pdoCrumbs, достаточно указать параметр в вызове сниппета: &tplCurrent=`tpl.SeoFilter.crumbs.current`»

Не стоит забывать, что уровень технических знаний у нас всех разный и кто-то (как, например, я) воспользуется документацией SeoFilter. Правда, чтобы добиться семантически правильных ХК, мне пришлось изменить tpl.SeoFilter.crumbs.current

<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" class="breadcrumb-item sf_crumb{if !$sflink} active{/if}" data-idx="{$idx}" data-separator="{$outputSeparator|htmlentities}">
    {if $sflink}
        <a title="{$menutitle}" itemprop="item" href="{$link}"><span itemprop="name">{$menutitle}</span>
        <meta itemprop="position" content="{$idx}"></a>
    {else}
        <span itemprop="name">{$menutitle}</span>
        <meta itemprop="position" content="{$idx}"
    {/if}
</li>{if $sflink}{$outputSeparator}<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" class="breadcrumb-item active sf_crumbs" data-idx="{++$idx}">
<span itemprop="name" class="sf_link">{$sflink}</span>
<meta itemprop="position" content="{$idx}"
    {*закомментированный ниже вариант позволит возвращать ссылку *}
    {*{set $page_link = $link}
    {foreach ['.html','.php'] as $suffix}
        {set $msufx = '*'~$suffix}
        {if $page_link | match : $msufx}
            {set $r_mask = '/'~$suffix~'$/'}
            {set $page_link = ($page_link | ereplace: $r_mask:'/')}
            {break}
        {/if}
    {/foreach}
    <a href="{$page_link}{$sfurl}" class="sf_link">{$sflink}</a>
    *}
</li>
{/if}
Возможно @Евгений Шеронов или кто-то из «старших товарищей» исправит и этот «говнокод» — к сожалению, других «правильных» вариантов мне найти не удалось.
Игорь
08 ноября 2021, 22:17
0
На данный момент, рабочий вариант для Google такой:
{'pdoCrumbs' | snippet: [
'showAtHome' => '0',
'showHome' => '1',
'outputSeparator' => '<li> / </li>',
'tplWrapper' => '@INLINE <ol class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">{$output}</ol>',
'tplHome' => '@INLINE
        <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
             <a title="{$menutitle}" itemprop="item" href="{$_modx->makeUrl(1)}"><span itemprop="name">{$pagetitle}</span>
             <meta itemprop="position" content="{$idx}"></a>
        </li>',
'tpl' => '@INLINE
        <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
             <a title="{$menutitle}" itemprop="item" href="{$link}"><span itemprop="name">{$pagetitle}</span>
             <meta itemprop="position" content="{$idx}"></a>
        </li>',    
'tplCurrent' => '@INLINE
        <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
             <a title="{$menutitle}" itemprop="item" href="{$link}"><span itemprop="name">{$pagetitle}</span>
             <meta itemprop="position" content="{$idx}"></a>
        </li>',

]}
В предложенном @iWatchYouFromAfar варианте, валидатор микроразметки выдавал предупреждение, что у первого элемента хлебной крошки («Номе») в коде нет атрибута itemprop=«item». Ошибка пропала при замене в 'tplHome'
href="{$link}"
на
href="{$_modx->makeUrl(1)}"
Возможно, «костыль», но рабочий)
Игорь
27 апреля 2021, 21:54
0
Спасибо! Как я понял, здесь указано как работать с {$image}. Не сочтите за наглость, а как правильно прописать конфигурацию конкретного хоста, при использовании {$thumb}? Возможна ли генерация изображений в формате avif?
Игорь
11 апреля 2021, 13:39
0
Поддержу, очень не хватает «связки» SeoFilter + Polylang, а также mvtSeoData + Polylang!
Игорь
03 апреля 2021, 18:48
0
Спасибо! Воссоздал «проблему» на тестовом сайте, логин и пароль скинул в личные сообщения.
Игорь
01 апреля 2021, 17:07
0
Да, «Описание» это поле компонента. Не могу сказать по какой причине, но выше указанный вызов «условно-работает». Например, если указана стоимость 10, то выведет — «10 Под заказ», если стоимость не указана (0), то — «0 Под заказ».
Феном не работает, но
{$_modx->resource.price}
вполне рабочий
Игорь
01 апреля 2021, 14:55
0
В поле «Описание» не срабатывает проверка на наличие цены у товара:
{if $_modx->resource.price?}{$_modx->resource.price}{else}Под заказ{/if}
Подскажите, пожалуйста, это штатная работа компонента или я что-то делаю не так (в шаблоне товара проверка работает)?
Игорь
31 марта 2021, 17:15
0
Спасибо за оперативность! В целом все работает (не забываем повторно сформировать индекс для товарных категорий).
Проблема возникает, если в категории выводятся товары из другой категории. Реальный пример — в основной категории (в которой идет подсчет компонентом) находятся 7 товаров + с другой категории отображается — 3, таким образом всего — 10 (mFilter2 тоже подчитывает — 10). А вот компонент в этой ситуации выводит — 13
Игорь
31 марта 2021, 13:35
0
Добрый день! На моем сайте, переменная
{count_products}
выводит не количество товаров в данной категории (как указано в информации компонента), а количество товаров в данной категории у которых указана стоимость (цена). Если стоимость не указана — количество товаров подсчитывается не верно.
Подскажите, пожалуйста, как вывести именно количество товаров в данной категории (включая товар без указаной стоимости, например — под заказ).
Игорь
08 января 2020, 19:31
0
Второй скриншот — укажите язык «ru», это же «ru» локализация? Все поля «ru» локализации заполните текстом на русском языке.
Игорь
08 января 2020, 19:06
0
Вероятно, не заполнена «ru» локализация. См. modx.pro/components/12012#comment-82464. На скриншоте prnt.sc/qksola вами выбрана «en» локализация.
Игорь
22 марта 2019, 19:47
0
Добрый вечер! Подскажите, пожалуйста, как можно назначить «Категории» (добавить, удалить) для уже импортированных товаров? Данное поле есть при «Импорте товаров», но отсутствует при выборе типа импорта «Обновить данные товара».
Игорь
07 февраля 2019, 18:45
0
100% верное уточнение! Проверьте добавлена ли у вас в локализатор украинская версия и заполнено ли там поле «Заголовок меню»
Игорь
07 февраля 2019, 18:22
0
У меня работает в таком варианте
{'!pdoMenu' | snippet : [
	'parents' => 0,
	'context' => 'web'
	'showLog' => 0,
	'level' => 1,
	'startId' => 0,
	'firstClass'=> 0,
	'lastClass'=> 0,
	'leftJoin' => '{
		"localizator" : {
		"class" : "localizatorContent",
		"alias" : "localizator",
		"on" : "localizator.resource_id = modResource.id"
		}
	 }',
	'select' => '{ "localizator" : "modResource.*, localizator.*, modResource.id" }',
	'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '"}',
	'outerClass'=> 'main-nav-menu',
'tpl' => '@INLINE <li class="{$classes}"><a class="default" href="{$link}"><i class="icon others"></i>{$menutitle}</a></li>'
]}
Игорь
18 марта 2018, 15:46
0
Спасибо, Павел! Больше всего не хотелось отвлекать именно вас на составление «регулярок».

Но у меня есть вопрос именно по работе xParser — при запуске задания обрабатываются (копируются) ровно 20 записей, хотя в конфигурации указано от 1 до 100 (все 100 записей в коде страницы донора есть, пагинация отсутсвует).
Проблема решается перезарузкой в браузере страницы с запущенным заданием, изменением кофикурации (указываем с 20 до 100) и повторным запуском xParser. При этом он обработает (скопируют) следующие 20 записей (с 20 по 40). В логе ошибок нет, как будто парсер просто «зависает».

Перечитал документацию, комментарии — нигде об этой особенности не упоминается. Может отработка по 20 заданий специально предусмотрена для работы через крон?
Игорь
18 марта 2018, 01:30
0
Друзья, кто может помочь — правильно составить XPath выражение для получения метатегов. Гугл подсказывает:
.//meta[@name='description']/@content

.//*[@name='description']/@content

но в XPath мне так и не удалось получить значение поля content в метатеге «description» (пробовал разные вариации).
Игорь
16 марта 2018, 19:12
0
Спасибо! Не сочтите за наглость, а как можно получить значения метатегов с помощью RegExp?

Например
<meta property="og:image" content="http://site.com/images/image.jpg"/>
Пишем «регулярку»
<meta[^<>]*?og:image['"][^<>]*?content=['"*)*)*)*)*)[(*^<>]*?)['"]
Проверяем на валидность, все работает
https://regex101.com/r/N8oNHE/1
Вставляю «регулярку» в xParser — пусто.

Игорь
16 марта 2018, 00:52
0
К сожалению, срок техподдержки истек, поэтому прошу ответить на вопрос — может ли xParser преобразовать относительные URL в абсолютные для их передачи из основного задания в дополнительное?

Пример относительных URL донора на полную версию новости:
<a href="news-1">Новость 1</a>
вместо абсолютных:
<a href="https://site.com/news-1">Новость 1</a>
При попыке выполнить задание, xParser вполне обосновано пишет в лог ошибки-
PHP warning: file_get_contents(news-1): failed to open stream: No such file or directory