Неправильные ссылки на товары в отложенных сообщениях через CRON На рассмотрении

1

Хотели поинтересоваться когда будет решен вопрос с правильным формированием ссылок на товары заказа для отложенных (триггерных) сообщений с предложением оставить отзыв о купленных товарах. Данный вопрос рассматривался в нескольких темах:


Проблема в том, что при использовании предложенной конструкции:

<ul>
{foreach $order.items as $item}
{$product = $wa->shop->product($item.product_id)}
{$product_url = $wa->shop->productUrl($product)}
<li><a href="http://{$order.params.storefront}{$product_url}">{$item.name|escape}</a></li>
{/foreach}
</ul>

при отправке тестового сообщения формируются рабочие ссылки, а при отправке через CRON нерабочие, такого вида:

http://мойдомен.руhttp//мойдомен.ру/товар 

или http://мойдомен.руhttp//второйдомен.ру/товар, если имеется несколько витрин. 

Для решения этой проблемы на форуме предлагалось следующее решение:

<ul>
{foreach $order.items as $item}
{$product=$wa->shop->product($item.product_id)}
<li><a href="{$wa->shop->productUrl($product)|replace:'http//':'http://'}reviews/"  target="_blank">{$item.name|escape}</a></li>
{/foreach}
</ul>

В данном случае ссылка в тестовом сообщении была нерабочая, а через CRON рабочая, но этот вариант подходит, если имеется только одна витрина, но не позволяет выбрать нужную витрину, если используется несколько витрин, так как в ссылку подставляется та витрина, которая не нужна в данном случае. 

Также ссылки формируются с http, а не с https.


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

2 комментария

  • +2
    Михаил Ушенин Михаил Ушенин Webasyst 5 сентября 2019 12:53 #

    В шпаргалке под редактором шаблона триггерного уведомления есть конструкция для получения URL товара с учётом указанного адреса витрины:

    {$product->getProductUrl($storefront_url)}

    В неё вместо переменной $storefront_url подставьте переменную $order.params.storefront, в которой хранится адрес витрины, на которой оформлен заказ. Получится вот так:

    <ul>
        {foreach $order.items as $item}
            {$product=$wa->shop->product($item.product_id)}
            <li><a href="{$product->getProductUrl($order.params.storefront)}">{$item.name|escape}</a></li>
        {/foreach}
    </ul>

    Если заказ оформлен через бекенд, то переменная $order.params.storefront с адресом витрины будет пустой, и ссылка на товар не сформируется. Чтобы ссылки формировались для всех заказов, можно указать адрес какой-то витрины по умолчанию с помощью строки

    {if !strlen($order.params.storefront)}{$order.params.storefront = 'mydomain.ru'}{/if}

    Только убедитесь, что в свойствах этой витрины выбраны все типы товаров, иначе некоторые ссылки могут оказаться нерабочими.

    Итоговый код:

    {if !strlen($order.params.storefront)}{$order.params.storefront = 'mydomain.ru'}{/if}
    
    <ul>
        {foreach $order.items as $item}
            {$product=$wa->shop->product($item.product_id)}
            <li><a href="{$product->getProductUrl($order.params.storefront)}">{$item.name|escape}</a></li>
        {/foreach}
    </ul>

    • 0
      Unotechno Unotechno 9 сентября 2019 16:24 #

      Здравствуйте Михаил!

      Спасибо! Попробуем и отпишемся.

      Добавить комментарий

      Чтобы добавить комментарий, зарегистрируйтесь или войдите