Микроразметка json-ld для категории opencart

  • Автор темы nuub
  • Дата начала
nuub

nuub

Уважаемый
#1
Здравствуйте, создаю модификатор для разметки категори товаров opencart микроразметкой json-ld, прошу помочь. Один из вариантов отрабатывает с ошибкой, так как в конце цикла добавляется лишняя запятая, как ее убрать?

Код:
<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>Category json-ld</name>
    <version>1.0</version>
    <link></link>
    <author>nuub</author>  
    <code>category-json-ld</code>

 
    <file path="catalog/view/theme/*/template/product/category.tpl">
        <operation>
            <search><![CDATA[<?php echo $footer; ?>]]></search>
            <add position="before"><![CDATA[
                    <script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "ItemList",
        "url": "<?php echo $breadcrumb['href']; ?>",
        "numberOfItems": "<?php echo $product_total; ?>",
        "itemListElement": [<?php foreach ($products as $product)  { ?>
            {
                "@type": "Product",
                "image": "<?php echo $product['thumb']; ?>",
                "url": "<?php echo $product['href']; ?>",
                "name": "<?php echo $product['name']; ?>",
                "offers": {
                    "@type": "Offer",
                    "price": "<?php echo $product['price']; ?>"
                }
            },<?php } ?>
]
      }
    </script>
                ]]></add>
        </operation>
    </file>
</modification>
 
ТС
nuub

nuub

Уважаемый
Топик Стартер #2
Ось ці варіанти не зміг прикрутити
<?php echo rtrim('Тут код', ','); ?>
<?php echo substr('Тут код', 0, -1); ?>
 
ALarik

ALarik

expert
#3
вот так было бы корретней:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>Category json-ld</name>
    <version>1.0</version>
    <link></link>
    <author>nuub</author> 
    <code>category-json-ld</code>
    <file path="catalog/view/theme/*/template/product/category.tpl">
        <operation>
            <search><![CDATA[<?php echo $footer; ?>]]></search>
            <add position="before"><![CDATA[
<script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "ItemList",
        "url": "<?php echo $breadcrumb['href']; ?>",
        "numberOfItems": "<?php echo $product_total; ?>",
        "itemListElement": [<?php foreach ($products as $key => $product) { ?>
            {
                "@type": "Product",
                "image": "<?php echo $product['thumb']; ?>",
                "url": "<?php echo $product['href']; ?>",
                "name": "<?php echo $product['name']; ?>",
                "offers": {
                    "@type": "Offer",
                    "price": "<?php echo $product['price']; ?>"
                }
            }<?php if ($key != count($products)){ ?>,<?php } ?><?php } ?>
        ]
    }
</script>
                ]]></add>
        </operation>
    </file>
</modification>
а вот по 2-му сообщения недопонял, что не получается куда прикрутить а в чем трабл?
 
ТС
nuub

nuub

Уважаемый
Топик Стартер #4
Дякую, спрацювало, скоригував <?php if ($key != count($products) - 1){ ?>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>Category json-ld</name>
    <version>1.0</version>
    <link></link>
    <author>nuub</author>
    <code>category-json-ld</code>
    <file path="catalog/view/theme/*/template/product/category.tpl">
        <operation>
            <search><![CDATA[<?php echo $footer; ?>]]></search>
            <add position="before"><![CDATA[
<script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "ItemList",
        "url": "<?php echo $breadcrumb['href']; ?>",
        "numberOfItems": "",
        "itemListElement": [<?php foreach ($products as $key => $product) { ?>
            {
                "@type": "Product",
                "image": "<?php echo $product['thumb']; ?>",
                "url": "<?php echo $product['href']; ?>",
                "name": "<?php echo $product['name']; ?>",
                "offers": {
                    "@type": "Offer",
                    "price": "<?php echo $product['price']; ?>"
                }
            }<?php if ($key != count($products) - 1){ ?>,<?php } ?><?php } ?>
        ]
    }
 
ТС
nuub

nuub

Уважаемый
Топик Стартер #6
Поправил, спасибо, странно но валидатор микроразметки ругается на отсутсвие параметра
"position": №п/п,
Как его реализовать внутри цикла foreach ?
<? php $i++; ?>

PHP:
<name>Category json-ld</name>
    <version>1.0</version>
    <link></link>
    <author>nuub</author>
    <code>category-json-ld</code>
    <file path="catalog/view/theme/*/template/product/category.tpl">
        <operation>
            <search><![CDATA[<?php echo $footer; ?>]]></search>
            <add position="before"><![CDATA[
<script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "ItemList",
        "url": "<?php echo $breadcrumb['href']; ?>",
        "numberOfItems": "$total_product", //здесь количество товаров на странице
        "itemListElement": [<?php foreach ($products as $key => $product) { ?>
            {
                "@type": "Product",
                "position": $i++, //здесь номер по порядку
                "image": "<?php echo $product['thumb']; ?>",
                "url": "<?php echo $product['href']; ?>",
                "name": "<?php echo $product['name']; ?>",
                "offers": {
                    "@type": "Offer",
                    "price": "<?php echo $product['price']; ?>"
                }
            }?php if ($key != (count($products) - 1)){ ?>,<?php } ?><?php } ?>
        ]
    }
 
Baco

Baco

architect
#7
"position", якщо не помиляюсь, то матюкається коли в ItemList не вказано, а тут не бачу щоб було, може в "хлібних крихтах" де пропустили?
якщо потрібно вказати порядковий номер, то перед циклом добавляємо змінну, а після - інкрементуємо значення, тобто повинно бути приблизно ось так:

JSON:
{
        "@context": "http://schema.org",
        "@type": "ItemList",
        "url": "<?php echo $breadcrumb['href']; ?>",
        "numberOfItems": "<?php echo count($products); ?>",
        "itemListElement": [<?php $i = 0; foreach ($products as $key => $product) { $i++; ?>
            {
                "@type": "Product",
                "position": "<?php echo $i; ?>",
                "image": "<?php echo $product['thumb']; ?>",
                "url": "<?php echo $product['href']; ?>",
                "name": "<?php echo $product['name']; ?>",
                "offers": {
                    "@type": "Offer",
                    "price": "<?php echo $product['price']; ?>"
                }
            }<?php if ($key != (count($products) - 1)){ ?>,<?php } ?><?php } ?>
        ]
    }
 
Последнее редактирование модератором:
ТС
nuub

nuub

Уважаемый
Топик Стартер #8
Дякую Baco. Не вдається пройти валідатор з Product, але з ListItem нормально
XML:
<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>Category json-ld</name>
    <version>1.0</version>
    <link></link>
    <author>nuub-ALarik-Baco</author>
    <code>category-json-ld</code>
    <file path="catalog/view/theme/*/template/product/category.tpl">
        <operation>
            <search><![CDATA[<?php echo $footer; ?>]]></search>
            <add position="before"><![CDATA[
<script type="application/ld+json"> 
{
        "@context": "http://schema.org",
        "@type": "ItemList",
        "url": "<?php echo $breadcrumb['href']; ?>",
        "numberOfItems": "<?php echo count($products); ?>",
        "itemListElement": [<?php $i = 0; foreach ($products as $key => $product) { $i++; ?>
                {
                "@type": "ListItem",
                "position": "<?php echo $i; ?>",
                "image": "<?php echo $product['thumb']; ?>",
                "url": "<?php echo $product['href']; ?>",
                "name": "<?php echo $product['name']; ?>"
            }<?php if ($key != (count($products) - 1)){ ?>,<?php } ?><?php } ?>
        ]
    }
</script>
                ]]></add>
        </operation>
    </file>
</modification>
Залишаю варіант каруселі без офера
1566557940129-png.83 - opencart
 

Вложения

Последнее редактирование:
Твой e-mail адрес не будет опубликован. Он нужен для подтверждения сообщения !
Вверх