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

fortuner

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

(пример замены на слово ГРН - в символах: \u0433\u0440\u043D)

файл: translations/cldr/main–ru-RU—currencies

находим: "symbol":"\u20b4" заменяем: "symbol":"\u0433\u0440\u043D"

находим: "symbol-alt-narrow":"\u20b4"} заменяем: "symbol-alt-narrow":"\u0433\u0440\u043D"}

обновления PS не затрагивают данные изменения
 
Для престашоп 1.7, возможно и 1.6.1, ооочень полезная штука чтобы скрывать любые блоки в шаблоне для мобильных девайсов или наоборот.

get device :

Context::getContext()->getDevice();

Check Mobile :

Context::getContext()->isMobile();

Check Tablet:

Context::getContext()->isTablet();

Например прямо в шаблоне:

{if Context::getContext()->getDevice() > 1} mobile{/if}

Где 1 это компьютер

P.S: Если это хотите указать в шаблоне модуля, то лучше всего это в PHP делать, т.к. шаблон модуля может кешироватся и тогда у Вас в зависимости от того, где Вы в первый раз после изменений открыли сайт (мобила или компьютер) будет на всех страницах отображаться именно в таком виде.


<-------------- добавлено через 84 сек. -------------->


Если вдруг, кому понадобиться вывести в листинге товара в категориях вторую фотку (по позиции) у товара.

Надо в файле themes\classic\templates\catalog\_partials\miniatures\product.tpl

Добавить:

Код:
{assign var=prod_pics value=Image::getImages($language.id,$product.id_product)}

А где нужно вывести вторую фотку, вот этот код:
Код:
          {if isset($prod_pics[1])}
            {assign var=pic_id value="`$product.id_product`-`$prod_pics[1].id_image`"}
            <img src = "{$link->getImageLink($product.link_rewrite, $pic_id, 'home_default')}" alt="" />
          {/if}

Это для 1.7.2
 
Привязываем цены на сайте к курсу валюты.

В админке устанавливаем основную валюту, относительно которой будут изменяться цены на сайте. Например - доллар.
GrqBd5bhQMyPGm.png

Для посетителей сайта устанавливаем валюту - гривна.
Открываем файл:
classes/controller/FrontController.php
Находим строку:
PHP:
$currency = Tools::setCurrency($this->context->cookie);
И перед ней вставляем:
PHP:
$this->context->cookie->id_currency = 1;
Где 1 - id валюты (в нашем случае гривна)

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

VrweWZBtOqvPY2.png
 
Последнее редактирование:
Отключаем форму обращения в регистрации и быстром заказе.
LmGpqvLFekDEl2.png
Редактируем файл: \classes\form\CustomerFormatter.php
Закомментируем или удаляем следующие строки кода:
PHP:
$genderField = (new FormField)
    ->setName('id_gender')
    ->setType('radio-buttons')
    ->setLabel(
        $this->translator->trans(
            'Social title', [], 'Shop.Forms.Labels'
        )
    )
;
foreach (Gender::getGenders($this->language->id) as $gender) {
    $genderField->addAvailableValue($gender->id, $gender->name);
}
$format[$genderField->getName()] = $genderField;

Редактируем файл: \classes\controller\FrontController.php
Также комментим или удаляем:
PHP:
$cust['gender'] = $this->objectPresenter->present(new Gender($cust['id_gender']));
unset($cust['id_gender']);
 
Нашел как убрать рекламу на странице модулей
Открываем файл
\app\config\config.yml
На строке 115 меняем
PHP:
base_url: "https://api-addons.prestashop.com"
на
PHP:
base_url: "127.0.0.1"
Все!
Теперь на основной странице модулей будут отображаться только модули, которые есть в папке модулей, но не установлены
Никакой рекламы и филиала addons.prestashop в админке.
Кроме того, теперь страницы модулей открываются офлайн, раньше выдавало ошибку 500 и, таким образом, было невозможно поработать без подключения к интернету.
Подозреваю, что стучалки в модулях, которые могут настучать в официальный магазин и если таковые имеются, тоже работать не будут.
Есть и минус: обновления модулей не будут прилетать. Хотя кого это волнует?:)
 
Починка картинок в поиске в PrestaShop 1.7.2.4. Данная обнова сломала картинки в поиске. Ломал голову пару дней, но все же осилил и сделал фикс.
Чтобы починить, залейте в \override\classes\controller файл ProductListingFrontController.php Если он у вас есть, то замените.
Данный фикс починит картинки во всех шаблонах и модулях, где они должны работать. А если хотите, чтобы заработали в стандартном шаблоне, то замените полностью в \modules\ps_searchbar файл ps_searchbar.js. Это файл для удобства из поста ранее.
P.S. Не плохо было бы закрепить данную тему.
 

Вложения

  • pic_search.rar
    6,6 KB · Просмотры: 32
Починка картинок в поиске в PrestaShop 1.7.2.4. Данная обнова сломала картинки в поиске. Ломал голову пару дней, но все же осилил и сделал фикс.
Чтобы починить, залейте в \override\classes\controller файл ProductListingFrontController.php Если он у вас есть, то замените.
Данный фикс починит картинки во всех шаблонах и модулях, где они должны работать. А если хотите, чтобы заработали в стандартном шаблоне, то замените полностью в \modules\ps_searchbar файл ps_searchbar.js. Это файл для удобства из поста ранее.
P.S. Не плохо было бы закрепить данную тему.
Да, было дело, обновился и перестало работать. Я прозрел, конечно, блин. Они в 1.7.2.4 убрали из аякс-ответа картинки и кучу всего остального. Не знаю, можно ли как-то на стороне клента просмотреть эти данные, но убрали и ладно. Складывается впечатление, что нам усложняют жизнь :) Хотя может быть с полным переходом на Symfony (читай - PS1.8) все станет наоборот гораздо проще, а роль оверрайдов будут выполнять сами модули. Я оптимист :)
Весь класс писать в оверрайд не обязательно. Вот мой фикс:
В тот же файл написать
Код:
<?php
abstract class ProductListingFrontController extends ProductListingFrontControllerCore {
    protected function prepareProductArrayForAjaxReturn(array $products)
    {
        $allowed_properties = array('id_product', 'price', 'reference', 'active', 'description_short', 'link',
            'link_rewrite', 'name', 'manufacturer_name', 'position', 'url', 'cover', 'canonical_url', 'add_to_cart_url',
            'has_discount', 'discount_type', 'discount_percentage', 'discount_percentage_absolute', 'discount_amount',
            'price_amount', 'regular_price_amount', 'regular_price', 'discount_to_display', 'labels', 'main_variants',
            'unit_price', 'tax_name', 'rate'
        );
        foreach ($products as $product_key => $product) {
            foreach ($product as $product_property => $data) {
                if (!in_array($product_property, $allowed_properties)) {
                    unset($products[$product_key][$product_property]);
                }
            }
        }
        return $products;
    }
}
Сохранить, очистить кеш, пользоваться.

Вообще подправьте кто-нибудь стандартный модуль - переименуйте, пихните туда и оверрайд и js, чтобы поставил и пользуешься.
Я б сделал работы там на полчаса, но сейчас не до того :(

UPD: Вот почитал код и подумал: можно кроме того убрать 'labels' и добавить их в поиске. И будет "скидка!!!11" в выпадающем списке. Уже тянет на платный модуль, учитывая что они нам пытаются продать в своем магазине :)
 
опишите плиз как нормально делать вывод текста только на первой странице категории товаров при наличии лееред фильтра, а то все описания что есть только скрывают текст от пользователя, а в коде страницы он все равно есть
 
опишите плиз как нормально делать вывод текста только на первой странице категории товаров при наличии лееред фильтра, а то все описания что есть только скрывают текст от пользователя, а в коде страницы он все равно есть
В любом файле шаблона пишешь
Код:
{debug}
Во всплывающем окне с переменными ищешь что-то типа $page => number
В шаблоне категории пишешь
Код:
{if $page.number == "1"}
{$category.description}
{/if}
Хотя смысла особого нет, т.к. сейчас в 1.7 есть каноникал урл, то есть пагинация и фильтры не считаются дублями. Или я что-то пропустил?
 
c лееред навигацией на всех страницах
page.number = 1
 
Назад
Сверху