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


#1

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

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


#2

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

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

#3

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

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


#4

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


#5

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


#6

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


#7

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

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


#8

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


#9

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


#10

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


#11

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

{$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, вот это непонятно, т.к. не особо программист.


#12

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


#13

Кэш чистил.
Массив получается вывести, если добавить распечатку массива 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


#14

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

$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'];
        }
    }
}

#15

Спасибо, все работает. Также для оптовых цен добавил вывод в микрораметку: 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;
}

#16

подскажите, а как сделать чтобы цена 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}


#17

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