Русская поддержка интернет-магазина PrestaShop
русская поддержка PrestaShop.
Регистрация
Забыли пароль?
Главная
Возможности
Демо
Скачать
Каталог магазинов
Форум
Модули и шаблоны
Администрирование
Реклама и маркетинг
Аналитика и статистика
Оплата и платежные системы
Управление контентом
Экспорт
Фронт-офис
Локализация
Торговые площадки
Управление товарами
Средства миграции
Оформление заказа
Поиск и фильтры
Доставка и логистика
Слайд-шоу
Социальные сети
Модификаторы
Шаблоны PrestaShop
Работа
Главная
Форум
Общие форумы (prestashop v1.4.x)
Песочница
Переопределение FrontController
Переопределение FrontController
padlyuck
Новичок
Сообщений: 10
Регистрация: 31-01-2012
# 1
31-01-2012 16:24
Стоит задача прикрутить уже имеющийся в наличии модуль геолокации к PrestaShop.
Сам по себе модуль умеет определять страну пользователя и в соответствии с этим выдавать язык и валюту которая соответствует местоположению пользователя.
Было принято решение переопределить метод init() для FrontController. Проблема возникает именно при первом визите, т.к. cookies внутри модуля устанавливаются, но в браузер еще не отсылаются. После того как куки установлены я вызываю метод parent::init() для дальнейшей инициализации системы и этот метод затирает все те изменения в куках, которые я внес внутри модуля геолокации.
Курение исходников показало что все дело в том, что объект кукисов создается во FrontControllerCore::init() каждый раз без проверки существования глобальной переменной.
Править системный FrontControllerCore::init() - нельзя. Копировать целиком FrontControllerCore::init() во FrontController::init() и вносить необходимые правки, чтобы не вызывать родительский метод - тоже не выход, т.к. не известно что придет в следующем обновлении.
Возможно кто-то уже сталкивался с подобной задачей? Подскажите пожалуйста способ красиво обойти это ограничение?
e_v_medvedev
Профессионал
Сообщений: 806
Откуда: Москва
Регистрация: 25-03-2011
# 2
31-01-2012 19:07
Использовать override.
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009
# 3
31-01-2012 19:49
В папку /override/classes/ положить FrontController.php
Код:
<?php
class FrontController extends FrontControllerCore
{
public function init()
{
parent::init();
//my code
}
}
Модули для PrestaShop
,
Синхронизация с 1С
padlyuck
Новичок
Сообщений: 10
Регистрация: 31-01-2012
# 4
31-01-2012 23:38
Прошу прощения, я видимо не однозначно описал. Я уже использую overridde
Код:
<?php
class FrontController extends FrontControllerCore
{
public function init()
{
if(Module::isInstalled('autoswitch'))
Module::getInstanceByName('autoswitch')->run();
parent::init();
}
}
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009
# 5
01-02-2012 10:59
А что мешает вызывать модуль после parent::init()?
Модули для PrestaShop
,
Синхронизация с 1С
e_v_medvedev
Профессионал
Сообщений: 806
Откуда: Москва
Регистрация: 25-03-2011
# 6
01-02-2012 16:16
Да и что тогда беспокоиться об обновлениях версии если override и так используется? Если одного override мало сделайте еще столько, сколько вам нужно, переделав autoload.
На Главную форума
Найти
FaQ
Панель управления
Кто он-лайн
Общие форумы (prestashop v1.7.x)
-- Общий форум
-- Установка, Настройка, Обновление
-- Модули, плагины
-- Дизайн, шаблоны
-- Песочница
Общие форумы (prestashop v1.6.x)
-- Общий форум
-- Установка, Настройка, Обновление
-- Модули, плагины
-- Дизайн, шаблоны
-- Песочница
Общие форумы (prestashop v1.5.x)
-- Общий форум
Общие форумы (prestashop v1.4.x)
-- Новости и объявления
-- Общий форум
-- Установка, Настройка, Обновление
-- Дизайн, шаблоны
-- Модули, плагины
-- Песочница
-- Прочее
Общие форумы (prestashop v1.3.x)
-- Общий форум
-- Установка, Настройка, Обновление
-- Дизайн, шаблоны
-- Модули, плагины
---- Платные модули и хаки
-- Песочница
Другое
-- Корзина
---- Хостинг
---- Каталог магазинов
---- Общий форум
---- Прием багов