Отложенные сообщения (cron) и изображения в них?

Как удалось выяснить, при отправке отложенных сообщений (CRON) и вставке в эти сообщения информации о товаре с помощью {$wa->shop->productUrl($product, 'reviews')} и изображений с помощью {$wa->shop->productImgUrl($product, '100')} ссылки вставляются корректно, а вот с изображениями не все так просто.

Вот ответ от поддержки:

Да, действительно, такой способ формирования изображений адреса изображения в случае cron работать не будет, в стандартных шаблонах уведомлений его нет. Стоит отказаться от его использования в данном случае, либо модифицировать код необходимым образом, можем только посоветовать повторить ваш запрос в помощи: http://www.webasyst.ru/help/

Собственно прошу помощи..

8 ответов

  • 2

    Вот такое выведет полный URL до картинки товара размером 100:

    {shopImage::getUrl(['product_id' => $product['id'], 'id' => $product['image_id'], 'ext' => $product['ext']], '100', true)}

    Если у вас много витрин, то ссылка сгенерится на какую-то витрину. Но для картинки, это, наверное, не имеет особенного значения - её URL глазами всё равно не видать...

    • +1

      Пардон. Исправил код, заменив array(...) на [...], чтобы работало в шаблонах.

      • +1
        Роман Роман 24 апреля 2015 02:50 #

        Ссылка все равно получается в таком же виде, ничего не изменилось..

        • +1

          Покажите ваш шаблон, пожалуйста.

          • +1
            Роман Роман 24 апреля 2015 06:10 #

            <table width="100%" border="0" cellspacing="10" cellpadding="10" bgcolor="#eeeeee" class="apps">

            {foreach $order.items as $item}

            {$product = $wa->shop->product($item.product_id)}

            <tr>

            <td width="200" valign="middle" align="center">

            <a href="{$wa->shop->productUrl($product, 'reviews')}"><img src="{shopImage::getUrl(['product_id' => $product['id'], 'id' => $product['image_id'], 'ext' => $product['ext']], '100', true)}" border="0"></a>

            </td>

            <td valign="middle" align="left">

            <p><a href="{$wa->shop->productUrl($product, 'reviews')}">{$item.name|escape}</a></p>

            <p style="width: 60px; background: #55CA63; border-radius: 4px; font-size: 16px; padding: 5px 15px; text-decoration: none" bgcolor="#55CA63"><a href="{$wa->shop->productUrl($product, 'reviews')}" style="color: white; font-family: Helvetica, Arial, sans-serif; font-size: 14px; text-decoration: none">Оценить</a></p>

            </td>

            </tr>

            {/foreach}

            </table>

            • +1

              Шаблон в порядке. Потестил отправку уведомлений из крона. Ссылка у меня тоже генерится неправильно. Либо баг налицо, либо я чего-то сильно не понимаю. Разберусь, напишу.

              В качестве временного решения попробуйте такое:

              {shopImage::getUrl(...всё как раньше...)|replace:'cli.php':'example.com/'}

              заменив example.com на имя вашего сайта. (Слеш в конце важен и нужен.)

  • 1

    Долго боролся я с ссылками на отзыв о товаре и картинку в письме. Cron все обрабатывает по своему так как он выполняет скрипт не из домена.

    Проблема 1: {$wa->shop->productUrl($product, 'reviews')} через Cron выводить ссылку вила "http://site.ru/product/reviews" но, учитывая стандартные правила маршрутизации и тип построения "Естественный" мы все равно попадем на "http://site/product/".

    Поэтому ссылку на товар получаем в ручную через product-category-getUrl. Все работает, но Cron ругается "PHP Notice: Undefined index: url in /home/u13436/public_html/site.ru/wa-apps/shop/<wbr>lib/classes/shopViewHelper.<wbr>class.php on line 435". Он там не может получить $route['url'] так как все работает Cron. Печалька.

    Проблема 2: картинку товара просто так получить нельзя. Хотя такой функционал должен быть "из коробки" и ссылки на товар тоже кстати. Картинку получаем через shopImage::getUrl, но оно дает левую ссылку если картинку у товара нету. По этому работаем методом топора: если нету $item['image_id'] просто выводим dummy96. png.

    Про то что писали выше {shopImage::getUrl(...всё как раньше...)|replace:'cli.php':'example.com/'} - умолчу.

    <table width="100%" border="0" cellspacing="10" cellpadding="10" bgcolor="#eeeeee" class="apps">

    {foreach $order.items as $item}

    {if $item.type == 'product'}

    {$product = $wa->shop->product($item.product_id)}

    {$category = $wa->shop->category($product.category_id)}

    {$link_url = $wa->getUrl('shop/frontend/product', ['category_url' => $category.full_url, 'product_url' => $product.url], true)}

    <tr>

    <td width="200" valign="middle" align="center">

    <a href="{$link_url}">

    {if $item['image_id']}

    <"img border="0" src="{shopImage::getUrl(['product_id' => $item['product_id'], 'id' => $item['image_id'], 'ext' => $item['ext']], '96', true)|replace:'/home/u13434/public_html/':''}">{else}<"img border="0" src="http: // site.ru/wa-data/public/shop/themes/nifty/img/dummy96. png">

    {/if}

    </a>

    </td>

    <td valign="middle" align="left">

    <p><a href="{$link_url}">{$item.name|escape}</a></p>

    <p style="width: 60px; background: #55CA63; border-radius: 4px; font-size: 16px; padding: 5px 15px; text-decoration: none" bgcolor="#55CA63"><a href="{$link_url}reviews/" style="color: white; font-family: Helvetica, Arial, sans-serif; font-size: 14px; text-decoration: none">Оценить</a></p>

    </td>

    </tr>

    {/if}

    {/foreach}

    </table>

    Что бы все работало: заменить <"img на <img, http: // site на http://site и dummy96. png на dummy96.png

    Можно как-то это все изящнее сделать?

    • +2
      ShabbyRoom.ru ShabbyRoom.ru 16 декабря 2016 03:46 #

      Изображения товара в Рассылках cron

      Не знаю у кого как, но у меня в шаблонах приложения "Рассылки" smarty-модификатор replace не работает в принципе, кроме того вы предлагаете резать текущий home-path, включая имя пользователя u13434, что при смене хостинга или незначительных изменениях в его структуре грозит полным фиаско.

      Но к удивлению в рассылках исполняется нативный PHP-же!
      (на уровне встроенных функций языка)

      Давайте сравним пути к изображениям из wa и cron:
      /wa-data/public/shop/products/03/03/303/images/716/716.180.jpg
      и
      /var/www/u***/data/www/shabbyroom.ru/wa-data/public/shop/products/03/03/303/images/716/716.180.jpg

      Я предлагаю эксплойтить эти строки в массивчик по разделителю 'wa-data':
      в обоих случаях относительный путь станет первым элементом, кроме того, это универсальное решение спасает от любых хостинговых пертурбаций: куда бы вы не переехали со своим shop-script'ом, wa-data у вас будет всегда, а изображения товара всегда будут находиться именно там от корня сайта.

      Поэтому мои изображения товара, полученные от функции {$wa->shop->productImgUrl($product, '180')} видны и при отложенной, и при при горячей рассылке, и оформлены вот так:

      <img src="http://ShabbyRoom.ru/wa-data{$url = explode('wa-data', $wa->shop->productImgUrl($product,180))}{$url[1]}" alt="{$product.name}" style="display:block;">

      Не благодарите.

Добавить ответ

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