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

fortuner

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

просто создайте файл оверрайдов
/override/classes/Tools.php

с содержанием:

Код:
<?php
class Tools extends ToolsCore
{
    public static function setCurrency($cookie)
    {
        if (Tools::isSubmit('SubmitCurrency') && ($id_currency = Tools::getValue('id_currency'))) {
            /** @var Currency $currency */
            $currency = Currency::getCurrencyInstance((int) $id_currency);
            if (is_object($currency) && $currency->id && !$currency->deleted && $currency->isAssociatedToShop()) {
                $cookie->id_currency = (int) $currency->id;
            }
        }


//webpc
if (!(int)$cookie->id_currency) $cookie->id_currency = 1;        // 1 - это номер валюты, которую делаем на фронте постоянной по-умолчанию (как правило это ГРН, а в настройках локализации сайта выбираем любую другую валюту по умолчанию, например USD или EUR)

        $currency = null;
        if ((int) $cookie->id_currency) {
            $currency = Currency::getCurrencyInstance((int) $cookie->id_currency);
        }
        if (!Validate::isLoadedObject($currency) || (bool) $currency->deleted || !(bool) $currency->active) {
            $currency = Currency::getCurrencyInstance(Configuration::get('PS_CURRENCY_DEFAULT'));
        }

        $cookie->id_currency = (int) $currency->id;
        if ($currency->isAssociatedToShop()) {
            return $currency;
        } else {
            // get currency from context
            $currency = Shop::getEntityIds('currency', Context::getContext()->shop->id, true, true);
            if (isset($currency[0]) && $currency[0]['id_currency']) {
                $cookie->id_currency = $currency[0]['id_currency'];

                return Currency::getCurrencyInstance((int) $cookie->id_currency);
            }
        }

        return $currency;
    }
}

P.S. работает в том числе и на самых новых ядрах 1.7.6.х
 
Добрый!
Как в престе 1.7 удалить пустые корзины которые нельзя уже выделить галочкой и не нужные заказы?
Может у кого плагин есть или придётся лезть всё таки в таблицу!
Просто может есть удобный способ раз проверил заказ и не нужный или брошенный нажал и удалил!
 
Добрый!
Как в престе 1.7 удалить пустые корзины которые нельзя уже выделить галочкой и не нужные заказы?
Может у кого плагин есть или придётся лезть всё таки в таблицу!
Просто может есть удобный способ раз проверил заказ и не нужный или брошенный нажал и удалил!
Для просмотра ссылки Войди или Зарегистрируйся
 
Спасибо!
Он у меня есть!
Но в бесплатном можно удалять 1 за 1 раз и нету возможности убрать скопом!
Например скажем так 200 или 500 пустых через него трудно убирать!
Тогда нужно про версию покупать!
 
В стандартном шаблоне 1.7 номера телефонов не кликабельны на мобилках

Вопрос для сообщества и тех кто силен в PHP как сделать кликабельными телефоны в стандартном шаблоне в шапке:
В шапке - шаблон\modules\ps_contactinfo\nav.tpl
Вот такой код
<div id="_desktop_contact_link">
<div id="contact-link">
{if $contact_infos.phone}
{* [1][/1] is for a HTML tag. *}
{l
s='Call us: [1]%phone%[/1]'
sprintf=[
'[1]' => '<span>',
'[/1]' => '</span>',
'%phone%' => $contact_infos.phone
]
d='Shop.Theme.Global'
}
{else}
<a href="{$urls.pages.contact}">{l s='Contact us' d='Shop.Theme.Global'}</a>
{/if}
</div>
</div>

Подскажите кто знает PHP, куда тут вставить tel: чтобы тоже кликабельно было ? И если в верхней строке нужно 2 номера вывести, то как добавить и куда переменную, чтобы настроить оба тедлефона ?? Может просто где '%phone%' => $contact_infos.phone вместо $contact_infos.phone впихнуть 2 номера телефона с tel: ??

Ваш_сайт/themes/classic/modules/ps_contactinfo/nav.tpl

строки 29 - 37

Код:
      {l
        s='Call us: [1]%phone%[/1]'
        sprintf=[
          '[1]' => '<span>',
          '[/1]' => '</span>',
          '%phone%' => $contact_infos.phone
        ]
        d='Shop.Theme.Global'
      }

Заменить на

Код:
{l s='Call us:' d='Shop.Theme.Global'} <a href="tel:{$contact_infos.phone}">{$contact_infos.phone}</a>
 
для улучшения страницы редактирования товара, т.е. назначение связей товаров на категории:

полное отображение всей длины названия категории + перенос галочки для указания дефолтной категории

добавить в конец файла:

/YourAdmin/themes/new-theme/public/theme.css

Код:
/* webPCstudio */
.product-page .category-tree-overflow {
    /*white-space: normal !important; */
    overflow: visible !important;
}

.product-page .category-tree-overflow ul.category-tree label .default-category {
    top: 4px;
    left: -40px;
}
 
Как сделать на фронте сайта валюту по-умолчанию всегда ГРН, а в админке хранить стоимость товаров в любой удобной вам (EUR, USD и т.п.:(

просто создайте файл оверрайдов
/override/classes/Tools.php

с содержанием:

Код:
<?php
class Tools extends ToolsCore
{
    public static function setCurrency($cookie)
    {
        if (Tools::isSubmit('SubmitCurrency') && ($id_currency = Tools::getValue('id_currency'))) {
            /** @var Currency $currency */
            $currency = Currency::getCurrencyInstance((int) $id_currency);
            if (is_object($currency) && $currency->id && !$currency->deleted && $currency->isAssociatedToShop()) {
                $cookie->id_currency = (int) $currency->id;
            }
        }


//webpc
if (!(int)$cookie->id_currency) $cookie->id_currency = 1;        // 1 - это номер валюты, которую делаем на фронте постоянной по-умолчанию (как правило это ГРН, а в настройках локализации сайта выбираем любую другую валюту по умолчанию, например USD или EUR)

        $currency = null;
        if ((int) $cookie->id_currency) {
            $currency = Currency::getCurrencyInstance((int) $cookie->id_currency);
        }
        if (!Validate::isLoadedObject($currency) || (bool) $currency->deleted || !(bool) $currency->active) {
            $currency = Currency::getCurrencyInstance(Configuration::get('PS_CURRENCY_DEFAULT'));
        }

        $cookie->id_currency = (int) $currency->id;
        if ($currency->isAssociatedToShop()) {
            return $currency;
        } else {
            // get currency from context
            $currency = Shop::getEntityIds('currency', Context::getContext()->shop->id, true, true);
            if (isset($currency[0]) && $currency[0]['id_currency']) {
                $cookie->id_currency = $currency[0]['id_currency'];

                return Currency::getCurrencyInstance((int) $cookie->id_currency);
            }
        }

        return $currency;
    }
}

P.S. работает в том числе и на самых новых ядрах 1.7.6.х

Отличный метод, но, похоже он не совместим с модулем доставки новой почтой от Elcommerce.
Неправильно считается стоимость доставки и комиссия наложенного платежа:

Screenshot_3.png
 
Отличный метод, но, похоже он не совместим с модулем доставки новой почтой от Elcommerce.
Неправильно считается стоимость доставки и комиссия наложенного платежа:

С модулем ElCommerce много чего несовместимо. Чем допиливать и перепиливать, лучше заказать на стороне за 100-200 баксов или написать самому.
 
С модулем ElCommerce много чего несовместимо. Чем допиливать и перепиливать, лучше заказать на стороне за 100-200 баксов или написать самому.
А есть ли какие-то аналоги их модуля доставки Новой почтой?
Заказывать модуль с нуля дороговато выходит..., а купить стабильное, готовое решение за адекватную стоимость - это можно.
 
Кстати, кто-то реализовывал Autocomplete для города с привязкой области?
Пытаюсь реализовать - может кому-то будет тоже интересно - подключайтесь...

Конечно, все это дело должно легко подгружаться.

Код:
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
  <script>
$(function() {
var $_searchCountry = $("#search-country");
var country = {
    1: "Ukraine",
    2: "Germany",
    3: "France",
    4: "Spain",
    5: "Sweden",
    6: "USA",
    7: "Canada",
    8: "Moldova",
    9: "Belarus",
    10: "Poland"
};
$.ui.autocomplete.prototype._renderItem = function(ul, item) {
    var re = new RegExp($.ui.autocomplete.escapeRegex(this.term), "i");
    var t = item.label.replace(re, "<span style='font-weight:600;color:#FF0000;'>" + "$&" + "</span>");
    return $("<li></li>").append("<a>" + t + "</a>").appendTo(ul)
};
$_searchCountry.autocomplete({
    source: function(request, response) {
        var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
        response($.map(Object.keys(country), function(item) {
            return {
                value: country[item],
                label: country[item]
            }
        }).filter(function(item) {
            return matcher.test(item.label)
        }))
    }
});
var city = {
    "1": {
        "country": 1,
        "name": "Kiev"
    },
    "2": {
        "country": 3,
        "name": "Paris"
    },
    "3": {
        "country": 4,
        "name": "Madrid"
    },
    "4": {
        "country": 6,
        "name": "Houston"
    },
    "5": {
        "country": 7,
        "name": "Montreal"
    },
    "6": {
        "country": 8,
        "name": "Кишинев"
    },
    "7": {
        "country": 9,
        "name": "Minsk"
    },
    "8": {
        "country": 10,
        "name": "Warsaw"
    },
    "100": {
        "country": 1,
        "name": "Львов"
    },
    "101": {
        "country": 1,
        "name": "Николаев"
    },
    "103": {
        "country": 1,
        "name": "Переяслав-Хмельницкий"
    },
    "104": {
        "country": 1,
        "name": "Каменец-Подольский"
    },
    "105": {
        "country": 1,
        "name": "Donetsk"
    },
    "106": {
        "country": 1,
        "name": "Kharkov"
    },
    "107": {
        "country": 1,
        "name": "Луцк"
    },
    "108": {
        "country": 1,
        "name": "Poltava"
    },
    "109": {
        "country": 1,
        "name": "Черновцы"
    },
    "299": {
        "country": 1,
        "name": "Чернигов"
    },
    "333": {
        "country": 1,
        "name": "Чернигов"
    }
}
var $_searchCity = $("#search-city");
$_searchCity.autocomplete({
    source: function(request, response) {
        var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
        var land = $_searchCountry.val();
        land = Object.keys(country).filter(function(item) {
            return country[item] == land
        });
        var town = Object.keys(city).filter(function(item) {
            return city[item].country == land
        });
        response($.map(town, function(item) {
            return {
                value: city[item].name,
                label: city[item].name
            }
        }).filter(function(item) {
            return matcher.test(item.label)
        }))
    },
    minLength: 0
});
});
  </script>
</head>

<body>
<label>Search country:</label>
<input id="search-country" type="text" />
<label>Search city:</label>
<input id="search-city" type="text" />

</body>
</html>
 

Вложения

  • города.zip
    320,7 KB · Просмотры: 5
Назад
Сверху