2

I have a Smarty 2 template and I wish to use CSS import or even just a regular <link> tag to include a CSS file rather than using the traditional {literal} tags with inline CSS.

Is this possible in Smarty 2?

The CSS file is in the same directory as the Smarty template, so I want to just get it from the same directory - but this is not working.

<link href="{$smarty.server.PHP_SELF}thumbnails.css" rel="stylesheet" type="text/css" />

Neither is the CSS @import functionality.

4

2 回答 2

4

您可以尝试以下方法:

使用 {php} 标签:

<style>
{php}include('/filesystem/path/to/thumbnails.css');{/php}
</style>

如果您知道文件的路径,请使用这种情况,并且不介意与 smarty3 不兼容

使用自定义函数:

创建一个自定义 smarty 函数并将其放在一个名为 function.include_file.php 的文件中,在你的plugins_dir

<?php
function smarty_function_include_file($params, &$smarty)
{
    include($params['file']);
}

然后调用它:

<style>
{include_file file='/filesystem/path/to/thumbnails.css'}
</style>

如果您知道文件的路径,请使用这种情况,并且不介意为此目的创建一个新函数

编辑您的 css 文件: 将 {literal} 标记附加到 css 文件的开头和结尾,例如:

/*{literal}*/
body{background-color:red!important}
/*{/literal}*/

然后将其包含在:

<style>
{include file = "thubnails.css"}
</style>

如果您不介意编辑 css 文件,请使用这种情况

请记住,上述所有情况显然会将您的所有文件都包含为内联样式表,这不是一个好习惯。一个更好的过程是将您的 css 文件放在可通过网络访问的某个位置(也就是说,您可以使用类似的东西访问它http://yoursite.example.com/path/to/css/thumbnails.css),然后像现在一样硬链接到它

于 2013-06-03T15:31:41.820 回答
1

$smarty.server.PHP_SELF 返回当前执行你的模板的文件的名称和路径,即 htt.../mypage.php,如果你在 remplate 渲染后查看源代码你会明白为什么 css 没有加载.

相反,在您的 php 文件中声明一个具有所需路径的变量并将其传递给 smarty(在示例中为 $css_path):

<link href="{$css_path}thumbnails.css" rel="stylesheet" type="text/css" />
于 2013-06-03T16:04:56.440 回答