Добавить новую глобальную переменную в Smarty? доступно на всех страницах. (PrestaShop) - PullRequest
0 голосов
/ 07 мая 2018

Я хочу добавить глобальную переменную в smarty.

Я добавил стили css с {$ urls.css_url} в stylesheep.tpl

<link rel="stylesheet" type="text/css" href="{$urls.css_url}my.css">

Это работает очень хорошо, за исключением того, что, если я переключаю магазин в режим отладки, у меня появляется эта ошибка:

ContextErrorException in smarty_internal_templatebase.php(157) : eval()'d code line 393: Notice: Undefined index: css_url

Что это значит? что эта переменная не будет доступна в smarty ?, поэтому если я поставлю кеш, она не будет загружена?

Как сделать переменную {$ urls.css_url} доступной с помощью smarty? везде на сайте?

Какой код я должен поставить и где его разместить, чтобы переменная (url_css) оставалась доступной в режиме отладки?

Спасибо за вашу помощь


Спасибо за вашу помощь, у вас высокий уровень по сравнению со мной.

На самом деле переменная уже определена и доступна везде.

В frontcontroler.php у меня было это:

$assign_array = array(
    'img_ps_url' => _PS_IMG_,
    'img_cat_url' => _THEME_CAT_DIR_,
    'img_lang_url' => _THEME_LANG_DIR_,
    'img_prod_url' => _THEME_PROD_DIR_,
    'img_manu_url' => _THEME_MANU_DIR_,
    'img_sup_url' => _THEME_SUP_DIR_,
    'img_ship_url' => _THEME_SHIP_DIR_,
    'img_store_url' => _THEME_STORE_DIR_,
    'img_col_url' => _THEME_COL_DIR_,
    'img_url' => _THEME_IMG_DIR_,
    'css_url' => _THEME_CSS_DIR_,
    'js_url' => _THEME_JS_DIR_,
    'pic_url' => _THEME_PROD_PIC_DIR_,
);

Затем я добавил следующую строку ниже, чтобы назначить ее в smarty.

$this->context->smarty->assign(array('urls' => $urls));

Переменная отображается, без проблем, но если я переведу магазин в режим отладки:

/* Debug only */
if (!defined('_PS_MODE_DEV_')) {
define('_PS_MODE_DEV_', true);
}

У меня всегда есть это:

ContextErrorException in smarty_internal_templatebase.php(157) : eval()'d code line 393: Notice: Undefined index: css_url

Означает ли это, что нет значения? Почему исчезает его ценность? (когда я активирую PS_MODE_DEV)

Еще раз спасибо.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Может быть, это то, что вы ищете:

Версия: Prestashop 1.7.2.4

Мы собираемся сделать это, переопределяя класс, в данном случае следующий файл: classes / controller / FrontController.php, этот файл назначает глобальные переменные для Prestashop.

  1. Создать файл: переопределить / classes / controller / FrontController.php
  2. Скопируйте все содержимое из: classes / controller / FrontController.php в наш недавно созданный файл.
  3. Проверьте следующую строку: 1444, есть функция с именем getTemplateVarUrls () , внутри этой функции уже есть переменная css_url , которая указывает на тему css по умолчанию dir: / public_html / themes / имя темы / assets / css
  4. Если вы хотите создать собственную переменную url, напишите туда код, т.е.:

    public function getTemplateVarUrls()
    {
      $http = Tools::getCurrentUrlProtocolPrefix();
      $base_url = $this->context->shop->getBaseURL(true, true);
    
      //custom css url var points to a folder called "my_custom_css" in the root of the project
      $customCssFolderUrl = $base_url.'/my_customs_css';
    
      $urls = array(
        'base_url' => $base_url,
        'current_url' => $this->context->shop->getBaseURL(true, false).$_SERVER['REQUEST_URI'],
        'shop_domain_url' => $this->context->shop->getBaseURL(true, false),
        'custom_css_url' => $customCssFolderUrl ,
    );
    
  5. После того, как мы завершим все эти шаги, мы приступим к удалению файла public_html / app / cache / prod / class_index.php, чтобы Prestashop не игнорировал наш новый файл, чтобы узнать больше об этом: http://doc.prestashop.com/display/PS16/Overriding+default+behaviors

  6. Используйте новую переменную: {$ urls.custom_css_url} для любого файла .tpl

Надеюсь, это поможет.

0 голосов
/ 08 мая 2018

{$urls.css_url} означает получение значения css_url из массива urls.

Также полученное вами уведомление означает, что переменная не имеет значения, поэтому она вообще не может работать, поэтому, возможно, то, что вы считаете правильным, но то, что вы видите, исходит из другой переменной / ловушки.


Как установить переменную Smarty

В случае, если вы хотите установить переменную smarty, вы должны будете сначала назначить ее.

Вы можете сделать это через модуль, контроллер или TPL.

Из модуля или контроллера он будет доступен, как только вы его объявите. Чтобы распечатать или отладить его.

Так, например, если вы добавите его в хуках hookDisplayHeader или actionFrontControllerSetMedia, переменная будет доступна там, где вы хотите ее использовать.

Кроме того, чтобы присвоить значение в модуле или контроллере, вы должны будете использовать код, подобный этому:

$urls = array (
    'css_url' => 'The URL to your CSS'
    ...
);
$this->context->smarty->assign(array('urls' => $urls));

Тогда вы сможете получить к нему доступ, используя {$urls.css_url}


Как узнать уже определенные переменные в Smarty

Включите режим отладки вашего магазина, а затем просто добавьте {debug} в любой из ваших TPL, это покажет всплывающее окно (не забудьте разрешить всплывающие окна из вашего URL) со всеми переменными, назначенными Smarty.

...