我希望在smarty中添加一个全局变量。
我在stylesheep.tpl中添加了{$ urls.css_url}的css样式
<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中不可用?所以,如果我放入缓存,它将无法加载?
如何使用smarty提供变量{$ urls.css_url}?网站上到处都是什么?
我应该放置哪些代码以及放置它的位置,以便变量(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_,
);
然后我添加了下面的一行,以巧妙的方式分配它。
$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时)
再次感谢。
答案 0 :(得分:0)
{$urls.css_url}
表示从urls数组中检索css_url值。
此外,您收到的通知表示该变量没有值,因此它根本无法工作,所以也许您认为正确,但您看到的是来自其他变量/钩子。
如何设置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中已定义的变量
启用商店的调试模式,然后在任何TPL中添加{debug}
,这将显示弹出窗口(记得允许从您的URL弹出窗口),并将所有变量分配给Smarty。
答案 1 :(得分:0)
也许这就是你要找的东西:
版本:Prestashop 1.7.2.4
我们将覆盖一个类,在本例中为以下文件:classes / controller / FrontController.php,此文件为Prestashop分配全局变量。
如果要创建自定义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忽略我们的新文件,以了解更多相关信息:http://doc.prestashop.com/display/PS16/Overriding+default+behaviors
在任何.tpl文件中使用新变量:{$ urls.custom_css_url}
希望这有帮助。