Автор Тема: Изменить шаблон способа доставки  (Прочитано 76 раз)

19 Сентября 2016, 17:32:02
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте. С престой знаком только недавно,поэтому могу нести полную чушь, помогите пожалуйста разобраться.
  Есть задача к определенному способу доставки добавить кнопку "Выбрать пункт".  Нашел хук displayBeforeCarrier, который передает массив данных по заказу, один из параметров delivery_option_list, который и передается в шаблон order-carrier.tpl. Хочу поменять параметр delay у способа доставки,массив $params меняется, но в шаблон массив доходит неизменным. Как поменять этот массив? 
 
    public function hookdisplayBeforeCarrier($params){
        global $cookie;
        //print_rr($params);
       foreach($params['delivery_option_list'] as $option_list){
            foreach($option_list as $option){
               foreach($option['carrier_list'] as $key=>$carrier){
                    if($key==(int)Configuration::get('migpoint_cour_id')){
                        $carrier["instance"]->delay[$cookie->id_lang]='<a herf="" class="open_map" onclick="">Выберите пункт</a>';
                    }
               }
            }
         
       }
       //$params['carriers'][0]['delay']='12345';
       print_rr($params);
     //  return $params;
    }

19 Сентября 2016, 21:29:13
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Возвращать этот метод не может, поэтому нужно переопределить массив
public function hookdisplayBeforeCarrier($params){
    $delivery_option_list = $params['delivery_option_list'];
    // делаете что-то с массивом
    ....
    // переопределяете массив для шаблона
    $this->context->smarty->assign('delivery_option_list', $delivery_option_list);
20 Сентября 2016, 14:31:55
Ответ #2
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
К сожалению массив не изменился :(
Есть еще какие нибудь идеи? Может еще есть какой-нибудь способ вставить ссылку в способ доставки(ссылка должна меняться в зависимости от адреса доставки)?
20 Сентября 2016, 15:13:54
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 85953
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
ссылка должна меняться в зависимости от адреса доставки
Сделайте черз javascript. В файле order-carrier.js или order-opc.js создайте функцию проверки адреса и подстановки ссылки.
В модуле доставки создайте контроллер для обработки запроса из js файла.
20 Сентября 2016, 16:30:34
Ответ #4
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
ссылка должна меняться в зависимости от адреса доставки
Сделайте черз javascript. В файле order-carrier.js или order-opc.js создайте функцию проверки адреса и подстановки ссылки.
В модуле доставки создайте контроллер для обработки запроса из js файла.
Сделать через js это значит привязаться в определенному диву,например с классом delivery_option_delay, куда буду вставлять ссылку. А если название класса будет разная в зависимости от версии престы и шаблона? И еще, как я передам в order-carrier.js параметры(адрес,вес корзины)

До этого делал подобный модуль для вукомерс и опенкарта, и там такой проблемы не было. Неужели нельзя решить эту задачу через обычный php.
20 Сентября 2016, 16:51:20
Ответ #5
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22094
  • Репутация: +17108/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
В зависимости от адреса доставки как-то так:
$delivery_option_list = $params['delivery_option_list'];
if (isset($delivery_option_list[$id_address_delivery]))
{
$carrier_list = $delivery_option_list[$id_address_delivery];
foreach ($carrier_list as $id_carrier => $carrier_options)
{
$carrier = $carrier_options['carrier_list'][$id_carrier]['instance'];
$carrier->delay = 'текст, теги вырежит';
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
21 Сентября 2016, 16:29:05
Ответ #6
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Возвращать этот метод не может, поэтому нужно переопределить массив
public function hookdisplayBeforeCarrier($params){
    $delivery_option_list = $params['delivery_option_list'];
    // делаете что-то с массивом
    ....
    // переопределяете массив для шаблона
    $this->context->smarty->assign('delivery_option_list', $delivery_option_list);

помог этот метод,не понимаю почему раньше не работал.
Появилась следующая проблема. Создал в модуле контроллер для обработки пост запросов. URL набираю следующий:http://presta/index.php?fc=module&module=migpointcarrier&controller=frontmigpoint
ошибка:
 ok
Warning: Cannot modify header information - headers already sent by (output started at G:\home\presta\www\modules\migpointcarrier\controllers\front\frontmigpoint.php:7) in G:\home\presta\www\classes\controller\FrontController.php on line 756

Fatal error: Call to a member function getMediaLink() on a non-object in G:\home\presta\www\classes\controller\FrontController.php on line 1143

Что не так делаю?
class migpointcarrierfrontmigpointModuleFrontController extends ModuleFrontController
{
       
    public function init(){
      echo 'ok';
    }
}
21 Сентября 2016, 16:56:09
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
public function initContent()
{
parent::initContent();
        ....
Свой код  добавляте после этого.
22 Сентября 2016, 11:08:14
Ответ #8
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
public function initContent()
{
parent::initContent();
        ....
Свой код  добавляте после этого.
Спасибо помогло. А не подскажите как передать переменную пути модуля в js файл при подключении?
И еще, можно по урлу вызвать определенную функцию, например http://presta/index.php?fc=module&module=migpointcarrier&controller=frontmigpoint   +  к этому function=stores,
я хочу сделать контроллер как обработчик запросов,разные функции = разные запросы, и мне не нужно выводить весь сайт. В опенкарте так можно делать, а как в престе?
23 Сентября 2016, 17:06:52
Ответ #9
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ребятки помогите пожалуйста. В каком массиве хранятся все данные заказа? Оформление заказа пошаговое, и я так понимаю обновить аяксом способы доставки нельзя. Тогда после выбора пункта выдачи,мне нужно поменять стоимость доставки без перезагрузки страницы,где менять эту стоимость? Сессионный массив пустой:(