在页面上包含不同的CSS或JavaScript文件是否真实,具体取决于其名称。
例如,如果我有页面订单,将包含orders.css
,如果我有索引页面将包括index.css
,或者可能包含其他检查,如果x = 3包括main.js
, x = 5包括validate.js
。
我知道我可以通过PHP执行此操作,例如:
if (x = 3) $smarty->assign('file_css', 'orders');
else $smarty->assign('file_css', 'index');
并在模板中写下如下内容:
<link rel='stylesheet' href='css/{$file_css}.css' />
但也许有一种方法可以通过聪明的方式来做到这一点?
前段时间,我在项目中看到类似智能模板中的块,其中是css / js文件,它们包含了一些魔法页面,mby by PHP我不知道,但它看起来非常清晰,舒适。有1个文件,其中包括:
{smarty block='css'}
<link ....... />
<script ..... />
{/smarty block}
然后这个块被包含在模板上的必要位置。
这只是一个例子,我不记得它是如何调用的,但它就是这样的。
答案 0 :(得分:2)
您可以使用{smarty.template},其中包含.tpl扩展名的当前模板名称,例如“orders.tpl”。 将扩展名替换为您的选项
<link rel='stylesheet' href='css/{$smarty.template|replace :'.tpl':'.css'}' />
答案 1 :(得分:1)
有几种方法可以做你想做的事。但是,您可能正在考虑模板继承。
您可以执行类似此示例的操作,并在main.tpl中使用不同的样式表附加CSS。
在index.tpl
<html>
<head>
{block name='head'}{/block}
</head>
<body>
{block name='body_main'}{block}
</body>
</html>
main.tpl
{block name='head' append}
<-- your css -->
{/block}
{block name='body_main'}
your content here
{/block}
在这里查看更多信息。 http://www.smarty.net/inheritance