2013-06-03 29 views
2

我有一個Smarty 2模板,我希望使用CSS import甚至只是常規的<link>標籤來包含CSS文件,而不是使用傳統的{literal}標籤內聯CSS。在Smarty 2模板中包含或導入(@import)樣式表

這是可能在Smarty 2?

CSS文件與Smarty模板位於同一個目錄中,所以我只想從同一目錄中獲取它 - 但這不起作用。

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

CSS @import功能也沒有。

回答

3

你可以嘗試以下方法:

使用{} PHP標籤:

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

使用此情況下,如果你知道路徑到您的文件,並且不介意被smarty3-不相容

使用自定義功能:

創建一個自定義Smarty的FUNC重刑,並將其放置在一個名爲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文件中創建一個新的功能: 追加{}文字標籤,你的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那樣訪問它),然後像現在這樣硬鏈接到它。

+0

無奈的是,我不得不繞到'{文字}'標籤我的所有CSS都放在'thumbnails.css'裏面,以使其在IDE中打開時看起來不太好。 – crmpicco

+0

你不必;把它們放在{include}的前後,或者在你的css文件的開始和結尾處(我已經更新了上面的例子) – periklis

+0

嗯......這不正確,因爲'{literal}'標籤意味着Smarty會對待字面上的內容,即不會解析它們。所以在這個例子中它會輸出'{include file =「thumbnails.css」}「,這是不正確的。 – crmpicco

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" />