К сожалению, вы сталкиваетесь с общей проблемой с smarty, и, в частности, с тем, как она реализована в Prestashop.
Переменные Smarty очень ограничены в области действия в Prestashop, и их область действия определяется тем, какая часть кодаони назначены в беге.В случае {$category->id_cms_category}
он назначается в CMSController в точке, в которой отображается основное содержимое (важные элементы посередине), и поэтому будет доступно в cms.tpl, как вы продемонстрировали.
Причина, по которой он недоступен в левом столбце или в заголовке, связана с порядком отображения каждого из этих разделов.Это будет:
a) Заголовок (в частности, верхняя часть страницы, а не блок заголовка html), затем b) Левый столбец, затем c) «Основной» контент, затем d) Правый столбец, затем e) Нижний колонтитул
Вы должны обнаружить, что если вы будете ссылаться на него в правом столбце или в нижнем колонтитуле страницы, то волшебным образом он будет вам доступен (конечно, только на страницах CMS, поскольку мы полагаемся на CMSController).запускается и присваивает ему значение).
Если вам нужно сослаться на такие вещи, как категория cms в заголовке страницы (возможно, чтобы выделить подсветку при горизонтальной навигации), то вам нужно будет извлечьзначение и назначьте его для умного себя.Вы можете сделать это одним из двух способов:
1) Написать модуль, который подключен к заголовку, и назначить там свою переменную. 2) Переопределить класс FrontController и назначить там переменную smarty (например, в функции init).)
Примером 2), который вы можете попробовать, является создание файла /override/classes/FrontController.php
, содержащего:
<?php
class FrontController extends FrontControllerCore
{
function init() {
parent::init();
$id_cms_category = (int)Tools::getValue('id_cms_category');
$id_cms_page = (int)Tools::getValue('id_cms');
self::$smarty->assign(array(
'my_cms_category_id' => $id_cms_category,
'my_cms_page_id' => $id_cms_page
)
);
}
}
Вышеуказанное должно позволять отображать {my_cms_category_id}
и {my_cms_page_id}
в любом местев вашей теме (потому что мы устанавливаем переменные smarty до того, как все будет обработано).Для страницы, не относящейся к cms, они оба должны быть 0, my_cms_category_id
должно быть установлено ненулевым на страницах категории cms, а {my_cms_page_id}
должно быть ненулевым, когда на определенной странице cms.
Надеюсь, этоидет к тому, чтобы сделать это немного яснее!