Фид товаров для Facebook

Рекламщики дали задачу собрать им фид товаров для импорта в facebook*.

Распишу этапы работ, которые делал, может кому нибудь пригодится. А заодно может кто-то предложит решение лучше и укажет на мои ошибки, которые возможно есть))


1) Создаем ресурс. Я назвал его facebook*.
Шаблон: пустой шаблон (я код указал сразу в Содержимом, поэтому пустой шаблон, можно все запихнуть в отдельный Шаблон и указать его)
Псевдоним: facebook*
Тип содержимого: XML

Содержимое
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
<title>{1 | resource : 'longtitle' | title}</title>
<link rel="self" href="{$_modx->config.site_url}"/>
{'!msProducts' | snippet : [
    'parents' => '3',
    'limit' => '0',
    'includeThumbs' => 'medium',
    'tpl' => 'tpl.facebook*Item',
]}            
</feed>

2) Создаем чанк tpl.facebook*Item.

tpl.facebook*Item
<entry>
    <g:id>{$id}</g:id>
    <g:title>{$pagetitle | title}</g:title>
    <g:description>{$description | title}</g:description>
    <g:link>{$id | url : ['scheme' => 'full']}</g:link>
    <g:image_link>{$_modx->config.site_url}{$medium}</g:image_link>
    {'!msGallery' | snippet : [
        'product' => $id,
        'tpl' => 'tpl.facebook*Gallery',
    ]}
    <g:brand>{$_pls['vendor.name']}</g:brand>
    <fb_product_category>{$parent | resource : 'pagetitle'}</fb_product_category>
    <g:condition>new</g:condition>
    <g:availability>available for order</g:availability>
    {if $old_price > 0}
        <g:price>{$old_price | replace : ' ' : ''} RUB</g:price>
        <g:sale_price>{$price | replace : ' ' : ''} RUB</g:sale_price>
    {else}    
        <g:price>{$price | replace : ' ' : ''} RUB</g:price>
    {/if}
</entry>

3) Создаем чанк tpl.facebook*Gallery в котором выводим все изображения товара, кроме первого. Первое изображение выводится в чанке выше. Почему то параметр offset не работает в msGallery, поэтому отсеял первый элемент в цикле foreach.

tpl.facebook*Gallery
{if $files?}
    {foreach $files as $file}
        {if !$file@first}
            <additional_image_link>{$_modx->config.site_url}{$file['medium']}</additional_image_link>
        {/if}
    {/foreach}
{/if}

4) Еще у меня используется сниппет title и вызывается в виде модификатора. Нашел на просторах интернета. Сниппет чистит строку от ненужных символов, а также заменяет кавычки на кавычки-елочки, которые не сломают вывод.

title
<?php
$str = preg_replace ("#([^=])\"([^\"]+)\"#", "\\1«\\2»", $input);
$str = str_replace (array("\r","\n"), "", $str);
$str = str_replace ('&', '', $str);
$str = strip_tags ($str);
return $str;

После того как все сделали по ссылке site_name.ru/facebook*.xml будет доступен наш фид.

Документация по параметрам есть тут https://www.facebook*.com/business/help
Андрей Шевяков
05 июля 2021, 15:21
modx.pro
5
1 444
+6
Поблагодарить автора Отправить деньги

Комментарии: 7

Евгений Шеронов
05 июля 2021, 15:51
+1
Решение хорошее.

Но раз это готовое бесплатное решение, то позволите мне немного рекламы?)

Для тех кто хочет визуально управлять элементами с описаниями полей, выгружать большие объемы точно валидного XML и не трогать код — то выгрузка под похожий формат Google Rss 2.0 (это Гугл покупки, и что-то для Фейсбука) есть в компоненте YandexMarket2 (пост о добавлении такого типа выгрузок писать не стал, инфа была только в changelog)
    Андрей Шевяков
    05 июля 2021, 15:57
    +1
    Но раз это готовое бесплатное решение, то позволите мне немного рекламы?
    Возьму на заметку. Готового решения не смог нагуглить, поэтому изобрел свой велосипед.
    Алексей Соин
    06 июля 2021, 09:33
    0
    Возможно немного не по теме, но можете подсказать, что при выводе заголовка делает | title?
      Андрей Шевяков
      06 июля 2021, 11:01
      0
      Я в 4м пункте написал.
      Этот сниппет, выводится в виде модификатора, чистит строку от ненужных символов, а также заменяет кавычки на кавычки-елочки, которые не сломают вывод.
      Роман
      07 июля 2021, 09:20
      0
      Подскажите, изображения с watermark не принимаются Фейсбуком или проходят проверку?
        Андрей Шевяков
        07 июля 2021, 09:56
        +1
        Добрый день.
        Вот что написано в справочнике Facebook
        https://www.facebook.com/business/help/686259348512056?id=725943027795860



        Рекомендации для изображений товаров

        Используйте изображения товаров, которые:

        • имеют белый фон;
        • наглядно демонстрируют товар целиком;
        • демонстрируют товар с разных сторон или ракурсов (если изображений несколько);
        • показывают товар в реальных жизненных ситуациях.

        Не используйте изображения товаров, которые содержат:

        • текст (например, призывы к действию или промокоды);
        • информацию, привязанную ко времени (например, краткосрочное снижение цены);
        • водяные знаки.



        PS. На сайте для которого делал Фид, все изображения подходят под требования.
        Точно не подскажу, пройдут ли проверку изображения с watermark.
          Роман
          07 июля 2021, 10:09
          0
          Благодарю.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7