Prestashop 是否在smarty中添加新的全局变量?可在所有页面上找到。(普雷斯塔索普)

Prestashop 是否在smarty中添加新的全局变量?可在所有页面上找到。(普雷斯塔索普),prestashop,smarty,Prestashop,Smarty,我希望在smarty中添加一个全局变量 $this->context->smarty->assign(array('urls' => $urls)); 我在stylesheep.tpl中添加了带有{$url.css_url}的css样式 <link rel="stylesheet" type="text/css" href="{$urls.css_url}my.css"> 这是什么意思?这个变量在smarty?中不可用,所以如果我放入缓存,它将不会被加载

我希望在smarty中添加一个全局变量

$this->context->smarty->assign(array('urls' => $urls));
我在stylesheep.tpl中添加了带有{$url.css_url}的css样式

<link rel="stylesheet" type="text/css" href="{$urls.css_url}my.css">
这是什么意思?这个变量在smarty?中不可用,所以如果我放入缓存,它将不会被加载

如何使变量{$url.css_url}在smarty中可用?网站上到处都是

我应该把哪些代码放在哪里,以便变量(url_css)在调试模式下保持可用

谢谢你的帮助


谢谢你的帮助,你的水平比我高

事实上,该变量已经定义,并且在任何地方都可用

在frontcontroller.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时)


再次感谢。

{$url.css\u url}
表示从url数组中检索css\u url值

此外,您收到的通知意味着该变量没有值,因此它根本无法工作,因此您认为可能是正确的,但您看到的是来自其他变量/挂钩


如何设置Smarty变量

如果要设置smarty变量,必须首先分配它

您可以通过模块、控制器或TPL来实现

从模块或控制器中,它将在您声明后立即可用。打印或调试它

因此,例如,如果将其添加到
hookDisplayHeader
actionFrontControllerSetMedia
挂钩中,该变量将在您想要使用它的地方可用

此外,要在模块或控制器中分配值,必须使用如下代码:

$urls = array (
    'css_url' => 'The URL to your CSS'
    ...
);
$this->context->smarty->assign(array('urls' => $urls));
然后您可以使用
{$url.css\u url}


如何知道Smarty中已定义的变量


启用商店的调试模式,然后只需在任何TPL中添加
{debug}
,这将显示一个弹出窗口(请记住允许从URL弹出窗口),其中包含分配给Smarty的所有变量。

也许这就是您要查找的:

版本:Prestashop 1.7.2.4

我们将重写一个类,在本例中是以下文件:classes/controller/FrontController.php,该文件为Prestashop分配全局变量

  • 创建一个文件:override/classes/controller/FrontController.php
  • 将所有内容从:classes/controller/FrontController.php复制到我们最近创建的文件中
  • 检查以下行:1444,有一个名为getTemplateVarUrls()的函数,在这个函数中已经有一个变量css\u url指向主题css默认目录:/public\u html/themes/theme\u name/assets/css
  • 如果要创建自定义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 ,
    );
    
  • 完成所有这些步骤后,我们将继续删除public_html/app/cache/prod/class_index.php文件,这是为了防止Prestashop忽略我们的新文件,请阅读更多相关信息:

  • 在任何.tpl文件上使用新变量:{$url.custom_css_url}

  • 希望这有帮助