Вывести оптовую цену (lowPrice) в микроразметке

Здравствуйте,

Хочу вывести оптовую цену (lowPrice) в микроразметке. Чтобы цена отображалась От и До.
Как можно захватить последнюю цену из данного массива?
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Для того, чтобы получить минимальную из всего массива можно так

{$lowest_price = $product.price}
{foreach from=$product.prices item=p}
    {if $p.price < $lowest_price}
        {$lowest_price = $p.price}
    {/if}
{/foreach}
2 лайка

{$price = $product.price}
{foreach from=$product.prices item=pprice}
{if $pprice.price < $price}
{$price = $pprice.price}
{/if}
{/foreach}

а этот ваш код уже не действителен?:slight_smile:

Спасибо, добавил вывод после массива, все работает
<meta itemprop="lowPrice" content="{$lowest_price}"/>

1 лайк

у меня эта строка “сьелась” когда вставлял сюда

1 лайк

Тоже самое, тольку сбоку :slight_smile:

1 лайк

В последних версиях CS-Cart микроразметка формируется методом JSON-LD в файле app/addons/seo/func.php. Нужно в микроразметке указать вывод lowPrice (минимальной оптовой цены у товара).

Кто-нибудь знает способ?

Схема та же. Распечатайте массив $product, посмотрите, есть ли там элемент prices

Пробовал в func.php добавлять распечатку массива fn_print_r($product); но почему-то не срабатывает.

Лучше в шаблоне вставить
{$product|fn_print_r}

Как в шаблоне сделать, то впринципе понятно, там получение минимальной оптовой цены работает:

{$lowest_price = $product.price}
{foreach from=$product.prices item=p}
    {if $p.price < $lowest_price}
        {$lowest_price = $p.price}
    {/if}
{/foreach}

Как минимальную цену передать и вывести в JSON в app/addons/seo/func.php, вот это непонятно, т.к. не особо программист.

Попробуйте после добавления кэш почистить

Кэш чистил.
Массив получается вывести, если добавить распечатку массива fn_print_r($product_data); внутрь функции function fn_seo_get_schema_org_markup_items.
Тогда цены на странице товара распечатываются.
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Тогда по аналогии

$lowest_price = $product_data['price'];
if (!empty($product_data['prices'])) {
    foreach ($product_data['prices'] as $p) {
        if ($p['price'] < $lowest_price) {
            $lowest_price = $p['price'];
        }
    }
}
1 лайк

Спасибо, все работает. Также для оптовых цен добавил вывод в микрораметку: highPrice, offerCount, Может кому пригодится.

 if (!empty($product_data['prices'])) {
	$offer['@type'] = 'http://schema.org/AggregateOffer';
	$offer['offerCount'] = count($product_data['prices']) +1;
	$offer['highPrice'] = fn_format_price($product_data['price'], $currency);
	$lowest_price = $product_data['price'];
	foreach ($product_data['prices'] as $p) {
		if ($p['price'] < $lowest_price) {
			$lowest_price = $p['price'];
		}
	}
	$offer['lowPrice'] = $lowest_price;
}
6 лайков

подскажите, а как сделать чтобы цена price менялась в сниппете на минимальную если такова есть у товара?

сейчас код который вы давали ранее, с появлением JSON-LD не работает.

design\themes\YOUR_THEME\templates\addons\seo\hooks\products\view_main_info.pre.tpl

Замените

< m e t a itemprop=“price” content="{$product.price|fn_format_price:$primary_currency} "/ >

на

{$price = $product.price}
{foreach from=$product.prices item=pprice}
{if $pprice.price < $price}
{$price = $pprice.price}
{/if}
{/foreach}

1 лайк

Тут задача посложнее. Используйте хук seo_get_schema_org_markup_items_post в функции fn_seo_get_schema_org_markup_items (app/addons/seo/func.php)

1 лайк

еще вопросик если не возражаете … как я понял этот код срабатывает на одиночном товаре и вариации как отдельные товары. Но если будет вариации как один товар то наибольшая цена не попадает в схему … а в наименьшей отображается наибольшая цена … можно текущий код подправить, чтобы это работало в этом случае?

Да, можно. Но так, с наскока, не скажу, как сделать. Нужно в модуль вариаций лезть

что для этого нужно сделать? где разместить заявку?