Отложенные сообщения (cron) и изображения в них?
Как удалось выяснить, при отправке отложенных сообщений (CRON) и вставке в эти сообщения информации о товаре с помощью {$wa->shop->productUrl($product, 'reviews')} и изображений с помощью {$wa->shop->productImgUrl($product, '100')} ссылки вставляются корректно, а вот с изображениями не все так просто.
Вот ответ от поддержки:
Да, действительно, такой способ формирования изображений адреса изображения в случае cron работать не будет, в стандартных шаблонах уведомлений его нет. Стоит отказаться от его использования в данном случае, либо модифицировать код необходимым образом, можем только посоветовать повторить ваш запрос в помощи: http://www.webasyst.ru/help/
Собственно прошу помощи..
8 ответов
Вот такое выведет полный URL до картинки товара размером 100:
{shopImage::getUrl(['product_id' => $product['id'], 'id' => $product['image_id'], 'ext' => $product['ext']], '100', true)}
Если у вас много витрин, то ссылка сгенерится на какую-то витрину. Но для картинки, это, наверное, не имеет особенного значения - её URL глазами всё равно не видать...
Пардон. Исправил код, заменив array(...) на [...], чтобы работало в шаблонах.
Ссылка все равно получается в таком же виде, ничего не изменилось..
Покажите ваш шаблон, пожалуйста.
<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>
Шаблон в порядке. Потестил отправку уведомлений из крона. Ссылка у меня тоже генерится неправильно. Либо баг налицо, либо я чего-то сильно не понимаю. Разберусь, напишу.
В качестве временного решения попробуйте такое:
{shopImage::getUrl(...всё как раньше...)|replace:'cli.php':'example.com/'}
заменив example.com на имя вашего сайта. (Слеш в конце важен и нужен.)
Долго боролся я с ссылками на отзыв о товаре и картинку в письме. 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
Можно как-то это все изящнее сделать?
Изображения товара в Рассылках 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;">
Не благодарите.