Модуль Полезные модификации Prestashop 1.7

fortuner

Хранитель порядка
Регистрация
26 Июн 2012
Сообщения
631
Реакции
1.239
Делимся полезными модификациями, хаками, допиленными модулями (или самописными) для Prestashop 1.7.
Предлагаю скопировать правила из темы модулей Prestashop, чтобы в теме было проще ориентироваться.
Правила:
1. Увидели чужую ошибку - исправьте :)
2. Запросы "а сделайте мне то-то" пожалуйста пишите в тему "Помощь с Prestashop".
3. Не спамьте, пусть раздел будет соответствовать своему названию :)
4. Не пишите "спасибо, должен навеки вечные!", просто нажмите "спасибо".
 
Это все уже готово. Скриншоты вот. Подсчет прибылей, расходов на доставку, фильтры по всем мыслимым параметрам - имя, фамилия, адрес, телефон, язык заказа, товар, производитель, поставщик, перевозчик и номер отслеживания, дата, оплачен/не оплачен и т.д. - в любых комбинациях. Фильтр можно сохранить для удобства. Вся инфа по заказам перед глазами, смена статуса АЯКСом без перезагрузки страницы, массовая смена статусов, массовая печать чеков и доставок и т.д. и т.п. Делал модуль с душой и умом, сам пользуюсь и он прям очень ускоряет обработку заказов и помогает с учетом. Кроме того, можно посмотреть всякие интересные цифры, расчет прибыли по фильтрам:
- сколько заказов оформлено на каждом языке
- сколько заказов/доход/расход на каждом перевозчике
- прибыль/доход/расход с каждого поставщика
- прибыль/доход/расход с каждого производителя

И тд. и тп.
Кстати, если есть пожелания, могу добавить

Модерация на Аддонс придирается ко всяким несущественным вещам, я их и подправляю.
Выглядит очень многообещающе!
Такого инструмента очень не хватает.
Из пожеланий, могу предложить добавить возможность видеть каждый заказ в списке в виде одной строчки, с краткой информацией, и возможность развернуть это строку в виде некого "выпадающего списка" (точнее, аккордеона) со всеми подробностями о заказе. Благодаря этому, на одном экране можно будет увидеть больше заказов, и развернуть только те, которые необходимы.
Пример реализации тут:
Для просмотра ссылки Войди или Зарегистрируйся

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

Учет.png
 
Последнее редактирование:
Вот делал тоже на основе onepagecheckoutPS. Правда сильно поработал со стилями и немного с базой, чтобы телефон переместить из ненужного раздела о доставке. Инфы для ввода минимум. Еще думаю убрать комменты к заказу, т.к. за все время только один раз туда написали. По факту поле бесполезное.
Для просмотра ссылки Войди или Зарегистрируйся
 
Поставить символ рубля в Prestashop 1.7.x
Чтобы поменять символ валюты в prestashop 1.7.x – нужно зайти в папку вашего магазина через фтп, найти файл: translations/cldr/main–ru-RU—currencies. Далее открываем файл для редактирования. Находим валюту по символам “RUB“, далее находим
Код:
"symbol":"\u0440\u0443\u0431."

Не дочитал тему до конца, но поправлю, они в
1.7.6.3 символы валюты перенесли в БД таблица ps_currency_lang
image-1581249279261.png
 
PrestaShop 1.7.6.0 проверено
Скрыть выбор комбинаций которых нет
Меняем файл

/var/www/17.paimon.pro/themes/classic/templates/catalog/_partials/product-variants.tpl

Добавляем в него код в трех местах, после
Код:
{foreach from=$group.attributes key=id_attribute item=group_attribute}
такой код:
Код:
{if $group.attributes_quantity.$id_attribute > 0}
...
{/if}

Должно получиться так:
Код:
<div class="product-variants">
{foreach from=$groups key=id_attribute_group item=group}
{if !empty($group.attributes)}
<div class="clearfix product-variants-item">
<span class="control-label">{$group.name}</span>
{if $group.group_type == 'select'}
<select
class="form-control form-control-select"
id="group_{$id_attribute_group}"
data-product-attribute="{$id_attribute_group}"
name="group[{$id_attribute_group}]">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
{if $group.attributes_quantity.$id_attribute > 0}
<option value="{$id_attribute}" title="{$group_attribute.name}"{if $group_attribute.selected} selected="selected"{/if}>{$group_attribute.name}</option>
{/if}
{/foreach}
</select>
{elseif $group.group_type == 'color'}
<ul id="group_{$id_attribute_group}">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
{if $group.attributes_quantity.$id_attribute > 0}
<li class="float-xs-left input-container">
<label>
<input class="input-color" type="radio" data-product-attribute="{$id_attribute_group}" name="group[{$id_attribute_group}]" value="{$id_attribute}"{if $group_attribute.selected} checked="checked"{/if}>
<span
{if $group_attribute.html_color_code && !$group_attribute.texture}class="color" style="background-color: {$group_attribute.html_color_code}" {/if}
{if $group_attribute.texture}class="color texture" style="background-image: url({$group_attribute.texture})" {/if}
><span class="sr-only">{$group_attribute.name}</span></span>
</label>
</li>
{/if}
{/foreach}
</ul>
{elseif $group.group_type == 'radio'}
<ul id="group_{$id_attribute_group}">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
{if $group.attributes_quantity.$id_attribute > 0}
<li class="input-container float-xs-left">
<label>
<input class="input-radio" type="radio" data-product-attribute="{$id_attribute_group}" name="group[{$id_attribute_group}]" value="{$id_attribute}"{if $group_attribute.selected} checked="checked"{/if}>
<span class="radio-label">{$group_attribute.name}</span>
</label>
</li>
{/if}
{/foreach}
</ul>
{/if}
</div>
{/if}
{/foreach}
</div>
 
PrestaShop 1.7.6.0 проверено

Получить суммарные остатки товара, по его id (все комбинации одного товара).
Функцию отдельную в престе не нашел, если есть такая, сообщите цитатой
Код:
  /**
  * Получаем все остатки по товару
  *
  * @param int $id_product
  * return int общий остаток
  */
  public function getAllStockProductsById ($id_product = 1)
  {
  $Sql = '
  SELECT SQL_CALC_FOUND_ROWS p.`id_product`  AS `id_product`,
  p.`reference`  AS `reference`,
  sa.`price`  AS `price`,
  p.`id_shop_default`  AS `id_shop_default`,
  p.`is_virtual`  AS `is_virtual`,
  pl.`name`  AS `name`,
  pl.`link_rewrite`  AS `link_rewrite`,
  sa.`active`  AS `active`,
  shop.`name`  AS `shopname`,
  image_shop.`id_image`  AS `id_image`,
  cl.`name`  AS `name_category`,
  0 AS `price_final`,
  pd.`nb_downloadable`  AS `nb_downloadable`,
  sav.`quantity`  AS `sav_quantity`,
  IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`
  FROM  `' . _DB_PREFIX_ . 'product` p
  LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (pl.`id_product` = p.`id_product` AND pl.`id_lang` = 2 AND pl.`id_shop` = 1)
  LEFT JOIN `' . _DB_PREFIX_ . 'stock_available` sav ON (sav.`id_product` = p.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop = 1  AND sav.id_shop_group = 0 )
  JOIN `' . _DB_PREFIX_ . 'product_shop` sa ON (p.`id_product` = sa.`id_product` AND sa.id_shop = 1)
  LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND cl.`id_lang` = 2 AND cl.id_shop = 1)
  LEFT JOIN `' . _DB_PREFIX_ . 'category` c ON (c.`id_category` = cl.`id_category`)
  LEFT JOIN `' . _DB_PREFIX_ . 'shop` shop ON (shop.id_shop = 1)
  LEFT JOIN `' . _DB_PREFIX_ . 'image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = 1)
  LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_image` = image_shop.`id_image`)
  LEFT JOIN `' . _DB_PREFIX_ . 'product_download` pd ON (pd.`id_product` = p.`id_product`)
  WHERE (1 AND p.`id_product` = ' . $id_product . '  AND state = 1)
   
  ORDER BY  `id_product` desc
   
  LIMIT 0, 20
  ;
  ';
  $Result = Db::getInstance()->executeS($Sql, $array = true, $use_cache = 0);
  $Quantity = $Result[0]['sav_quantity'];
  return $Quantity;
  }
 
Получить суммарные остатки товара, по его id (все комбинации одного товара).
Функцию отдельную в престе не нашел, если есть такая, сообщите цитатой

StockAvailable::getQuantityAvailableByProduct($id_product)
 
Назад
Сверху