В prestashop версии 1.5 включен такой новый объект как Context, он предназначен для того, что бы избавиться от использования старых глобальных переменных, а именно: $cookie, $smarty и д.т.
Например, вместо $cookie->id_lang
, нам стоит теперь указывать $this->context->language->id
(аналогично country, shop, cookie, link, smarty – они доступны всегда; customer, cart, controller – с фронтенда; employee – с бекэенда), т.к. в context->language
– у нас находится объект, то нам полагаются все с этим связанные плюшки: нет необходимости дергать какой-то метод для получения language_code или iso_code. Если по какой-то причине контекста у нас нет, мы можем его получить, воспользовавшись Context::getContext()
.
Обычно в контроллерах (где родителем является AdminController или FrontController, а они в свою очередь потомки Controller) объект Context заносится в свойство context контроллера в конструкторе (ControllerCore::__construct
), поэтому в них мы можем спокойно использовать такой код $this->context->smarty->assign('nb_products', $this->nbProducts);
, или $this->context->link->getAdminLink('AdminCarrierWizard')
или $this->context->language->id
.
Что же касается моделей (классов потомков ObjectModel), то у них свойства, содержащего текущий контекст нет (пожалуй и не надо), поэтому для получения текущего контекста необходимо использовать контсрукцию Context::getContext(), например $id_lang = Context::getContext()->language->id
.
В общем и целом каких-то особенных проблем с использованием контекста вместо глобальных переменных не возникает; в версии prestashop 1.5 использование глобальных переменных по старинке к проблемам не приведет, однако, разработчики prestashop настоятельно рекомендуют начинать использовать Context.