Автор Тема: отображать изображения товара в деталях заказа?  (Прочитано 7165 раз)

10 Ноябрь 2014, 11:07:21
Ответ #30
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Показывается картинка , она же и ссылка, и как бы картинка показывалась если бы не менял PaymentModule.php и mailalerts.php (картинка не показывается, ссылка работает)
В файле PaymentModule.php  работает полностью вот такая конструкция, картинка показывается:

<td style="padding: 0.6em 0.4em; text-align: center;">'.$product['reference'].'<br><br><a href="http://сайт.ru/product.php?id_product='.$product['id_product'].'"><img src="http://сайт.ru/img/p/'.$product['id_image'].'-medium.jpg" alt="'.$product['reference'].'" height="80" width="54"></a></td>
<td style="padding: 0.6em 0.4em;"><strong><a href="http://сайт.ru/product.php?id_product='.$product['id_product'].'">'.$product['name'].'</a></strong></td>

В файле mailalerts.php вот такая конструкция:
<td style="padding:0.6em 0.4em; text-align:center;">'.$product['product_reference'].'<br><br><a href="http://сайт.ru/product.php?id_product='.(int)($product['product_id']).'"><img src="http://сайт.ru/img/p/'.$product['image_id'].'-medium.jpg" alt="'.$product['product_reference'].'" height="80" width="54"></a></td>
<td style="padding:0.6em 0.4em;"><strong><a href="http://сайт.ru/product.php?id_product='.(int)($product['product_id']).'">'.$product['product_name'].'</a></strong></td>
все работает только не показывает картинку. Т.Е. вот эта переменная '.$product['image_id'].' не выводит id картинки.
Зачем вам тогда менять mailalerts.php, если он вам не нужен? У вас он же только админу высылает письма. Или вы хотите выводить картинку в письме администратора? 
10 Ноябрь 2014, 12:00:23
Ответ #31
  • Ветеран
  • *****
  • Сообщений: 1090
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Зачем вам тогда менять mailalerts.php, если он вам не нужен? У вас он же только админу высылает письма. Или вы хотите выводить картинку в письме администратора?

Конечно, чтобы не перещелкивать, а сразу было видно что купили.
Не боги горшки обжигают, не зачем им такой хренью заниматься.
10 Ноябрь 2014, 13:27:29
Ответ #32
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В файле mailalerts.php нет image_id, перед вашей конструкцией image_id нужно достать из бд. Примерно так
public function getImageId($id_product_attribute)
{
$sql = 'SELECT pai.id_image
         FROM `'._DB_PREFIX_.'product_attribute_image` pai
         WHERE pai.`id_product_attribute` = '.(int)$id_product_attribute;
return Db::getInstance()->getRow($sql);
}
Потом в функцию отсылки письма добавить$images_info = $product->getImages((int)$id_lang);
$image_id_attribute = $product->getImageId($id_product_attribute);
foreach ($images_info as $k => $image)
{
    if($image_id_attribute['id_image'] == $image['id_image'])
    {
$id_image = $image['id_image'];
break;
    }
}
$images = $link->getImageLink($product->link_rewrite,$id_image,"medium");
Потом в шаблоне (если для админа письмо) или в фомировании списка товаров (если для покупателя) добавить вывод
Вам написали что нужно делать.
10 Ноябрь 2014, 22:50:23
Ответ #33
  • Ветеран
  • *****
  • Сообщений: 1090
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Пробовал у меня пока не заработало.
А вообще мне интересно почему при одинаковых
исходных данных в одном случае работает в другом нет.

Не понятно почему id продукта выводится   '.(int)($product['product_id']).'
а id изображения нет   '.(int)($product['image_id']).'

Кстати вопрос image_id и id_image  это одно и то же или нет?
Не боги горшки обжигают, не зачем им такой хренью заниматься.
11 Ноябрь 2014, 00:32:16
Ответ #34
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Цитировать
Кстати вопрос image_id и id_image  это одно и то же или нет?
Это разные переменные.
Цитировать
Не понятно почему id продукта выводится   '.(int)($product['product_id']).'
а id изображения нет   '.(int)($product['image_id']).'
Потому что в классе Product определена переменная id_product, а переменной id_image нет.
Вы можете сами увидеть, какие переменные входят в Product, для этого откройте структуру таблицы ps_product в phpmyadmin.
Для определения id_image каждого товара в классе Product есть функция getImages или getCover.

Между отсылкой email с помощью класса PaymentModule и модуля mailalerts очень большая разница.
Переменные товара, которые будут использоваться в письме, беруться из разных классов (таблиц).
PaymentModule - список товаров из класса Product (таблица ps_product). В этом классе в массив данных добавляют id_image из таблицы ps_image
mailalerts - список товаров из класса Order (для лучшего понимания см. таблицу ps_order). В этом классе в ид изображений не добавляют в массив товаров.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
12 Ноябрь 2014, 13:19:27
Ответ #35
  • Ветеран
  • *****
  • Сообщений: 1090
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
В таблицу  ps_order надо добавить  id_image,
чтобы '.(int)($product['id_image']).' начало работать?
Добавить еще одну строчку не проблема.

Не понятно почему данные для заполнения писем
берутся из разных таблиц, ведь данные одинаковые.
Не боги горшки обжигают, не зачем им такой хренью заниматься.
12 Ноябрь 2014, 13:28:38
Ответ #36
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
1. Работать не будет
2. Потому что так реализована работа движка.
Все данные в письмах разные.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
12 Ноябрь 2014, 14:19:11
Ответ #37
  • Ветеран
  • *****
  • Сообщений: 1090
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Попробуйте найти хотя бы одно отличие!
Не боги горшки обжигают, не зачем им такой хренью заниматься.
12 Ноябрь 2014, 14:32:50
Ответ #38
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 1146
  • Репутация: +338/-0
  • Job-Freelance - работа для специалистов PrestaShop
    • Просмотр профиля
    • Job Freelance - удаленная работа программистам, веб-мастерам и дизайнерам
Ответ вам пишет программист, для него видимая часть не нужна. Это для пользователя все одинаковое, а программист рассуждает на уровне кода.  Если хотите понять в чем различие, изучайте основы работы prestashop. На оф.сайте есть все необходимые документы - Prestashop Developer Guide. Не хотите вникать грубже в работу prestashop, тогда просто примите за основу то, что вам пишут.
Job Freelance - предложения от европейских работодателей для  программистов, веб-мастеров и дизайнеров - специалистам по Magento и PrestaShop.
12 Ноябрь 2014, 14:46:26
Ответ #39
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Ответ вам пишет программист, для него видимая часть не нужна. Это для пользователя все одинаковое, а программист рассуждает на уровне кода.  Если хотите понять в чем различие, изучайте основы работы prestashop. На оф.сайте есть все необходимые документы - Prestashop Developer Guide. Не хотите вникать грубже в работу prestashop, тогда просто примите за основу то, что вам пишут.
ИМХО, точно так.
Особено раздел Fundamentals.

Кстате, я попробывал то, что советывал coder. Прсто тупо подставил в код. Все работает.
Можно улучшить, добавить картинки в напоминалку не только админку, но и клиенту. В /classes/Product.php добавить
public function getImageId($id_product_attribute)
{
    $sql = 'SELECT pai.id_image
         FROM `'._DB_PREFIX_.'product_attribute_image` pai
         WHERE pai.`id_product_attribute` = '.(int)$id_product_attribute;
    return Db::getInstance()->getRow($sql);
}
В модуле /modules/mailalerts/mailalerts.php изменить sendCustomerAlert (это отправка клиенту)
public static function sendCustomerAlert($id_product, $id_product_attribute)
{
  $link = new Link();
  $id_lang = (int)Context::getContext()->language->id;
  $product = new Product((int)$id_product, false, $id_lang);

  $images_info = $product->getImages((int)$id_lang);
  $image_id_attribute = $product->getImageId($id_product_attribute);
  foreach ($images_info as $k => $image)
  {
if($image_id_attribute['id_image'] == $image['id_image'])
{
$id_image = $image['id_image'];
break;
}

  }
  $images = $link->getImageLink($product->link_rewrite,$id_image,"home_01prem");

  $templateVars = array(
'{product}' => (is_array($product->name) ? $product->name[$id_lang] : $product->name),
'{product_link}' => $link->getProductLink($product),
'{image}' => $images
);
  $customers = self::getCustomers($id_product, $id_product_attribute);
  foreach ($customers as $customer)
  {
   if ($customer['id_customer'])
   {
$customer = new Customer((int)$customer['id_customer']);
$customer_email = $customer->email;
$customer_id = (int)$customer->id;
   }
   else
   {
$customer_id = 0;
$customer_email = $customer['customer_email'];
   }
   $iso = Language::getIsoById($id_lang);
   if (file_exists(dirname(__FILE__).'/mails/'.$iso.'/customer_qty.txt') &&
file_exists(dirname(__FILE__).'/mails/'.$iso.'/customer_qty.html'))
Mail::Send((int)Configuration::get('PS_LANG_DEFAULT'), 'customer_qty', Mail::l('Product available', $id_lang), $templateVars, strval($customer_email), NULL, strval(Configuration::get('PS_SHOP_EMAIL')), strval(Configuration::get('PS_SHOP_NAME')), NULL, NULL, dirname(__FILE__).'/mails/');
   Hook::exec('actionModuleMailAlertSendCustomer', array('product' => (is_array($product->name) ? $product->name[$id_lang] : $product->name), 'link' => $link->getProductLink($product), 'image' => $images));
   self::deleteAlert((int)$customer_id, strval($customer_email), (int)$id_product, (int)$id_product_attribute);
  }
}
13 Ноябрь 2014, 14:40:28
Ответ #40
  • Ветеран
  • *****
  • Сообщений: 1090
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Так клиенту и так работает, в письме админу не работает.
Не понял куда вставлять вот это:
$images = $link->getImageLink($product->link_rewrite,$id_image,"medium");
Наверно я что то не так делаю - не работает.
Не боги горшки обжигают, не зачем им такой хренью заниматься.
13 Ноябрь 2014, 15:56:02
Ответ #41
  • Ветеран
  • *****
  • Сообщений: 1090
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Кстате, я попробывал то, что советывал coder. Прсто тупо подставил в код. Все работает.

Не кинете сюда картиночку как получилось.
Не боги горшки обжигают, не зачем им такой хренью заниматься.
13 Ноябрь 2014, 17:04:03
Ответ #42
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Нет картинки, мне это не нужно, попробывал, посмотрел и удалил. По мне, получение картинок в письме лишняя функция. Мало того, что не безопасно разрешать показ внешних ссыок в теле письма, так еще и грузить лишнии данные и ждать пока все покажет плюс еще и размер картинкок подбирвать, email приходит на телефон. Все что нужно можно смотреть в админке.
14 Ноябрь 2014, 13:15:10
Ответ #43
  • Ветеран
  • *****
  • Сообщений: 1090
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Там картинка весит 4-6 кб. не принципиально, зато клиенту
будет ясно что он купил, и мне будет понятно что купили.
Не боги горшки обжигают, не зачем им такой хренью заниматься.
04 Декабрь 2014, 18:50:04
Ответ #44
  • Ветеран
  • *****
  • Сообщений: 1090
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
В файле mailalerts.php нет image_id, перед вашей конструкцией image_id нужно достать из бд. Примерно так
public function getImageId($id_product_attribute)
{
$sql = 'SELECT pai.id_image
         FROM `'._DB_PREFIX_.'product_attribute_image` pai
         WHERE pai.`id_product_attribute` = '.(int)$id_product_attribute;
return Db::getInstance()->getRow($sql);
}
Потом в функцию отсылки письма добавить$images_info = $product->getImages((int)$id_lang);
$image_id_attribute = $product->getImageId($id_product_attribute);
foreach ($images_info as $k => $image)
{
    if($image_id_attribute['id_image'] == $image['id_image'])
    {
$id_image = $image['id_image'];
break;
    }
}
$images = $link->getImageLink($product->link_rewrite,$id_image,"medium");
Потом в шаблоне (если для админа письмо) или в фомировании списка товаров (если для покупателя) добавить вывод
Не могу понять, что значит "добавить вывод", что надо написать?
Не боги горшки обжигают, не зачем им такой хренью заниматься.