{{php}}
for($i=0;$i<count($assign);$i=$i+2){
echo '
<ul>
<li> <span class="zz_pic"><a href="'._url('picture',array('col_key'=>'cert','pic_id'=>$assign[$i][pic_id])).'" title=""><img src="uploads/thumb_'.$assign[$i][pic].'" alt=""></a></span> <span class="zz_title"><a href="'._url('picture',array('col_key'=>'cert','pic_id'=>$assign[$i][pic_id])).'" title="">'.$assign[$i][title].'</a></span> </li>
<li> <span class="zz_pic"><a href="'._url('picture',array('col_key'=>'cert','pic_id'=>$assign[$i+1][pic_id])).'" title=""><img src="uploads/thumb_'.$assign[$i+1][pic].'" alt=""></a></span> <span class="zz_title"><a href="'._url('picture',array('col_key'=>'cert','pic_id'=>$assign[$i+1][pic_id])).'" title="">'.$assign[$i+1][title].'</a></span> </li>i>
</ul>';}
{{/php}}
解決的方法是:模版變量全部存在smarty的一個(gè)對(duì)象里面;只要在for之前進(jìn)行賦值:$assign = $this->_tpl_vars[assign];
{{php}}
$assign = $this->_tpl_vars[assign];
for($i=0;$i<count($assign);$i=$i+2){
echo '
<ul>
<li> <span class="zz_pic"><a href="'._url('picture',array('col_key'=>'cert','pic_id'=>$assign[$i][pic_id])).'" title=""><img src="uploads/thumb_'.$assign[$i][pic].'" alt=""></a></span> <span class="zz_title"><a href="'._url('picture',array('col_key'=>'cert','pic_id'=>$assign[$i][pic_id])).'" title="">'.$assign[$i][title].'</a></span> </li>
<li> <span class="zz_pic"><a href="'._url('picture',array('col_key'=>'cert','pic_id'=>$assign[$i+1][pic_id])).'" title=""><img src="uploads/thumb_'.$assign[$i+1][pic].'" alt=""></a></span> <span class="zz_title"><a href="'._url('picture',array('col_key'=>'cert','pic_id'=>$assign[$i+1][pic_id])).'" title="">'.$assign[$i+1][title].'</a></span> </li>i>
</ul>';}
{{/php}}
1,capture標(biāo)簽
capture的中文意思是抓取,它的作用是抓取模板輸出的數(shù)據(jù),當(dāng)我們需要它的時(shí)候,調(diào)用它,以得到抓取數(shù)據(jù)的目的。例子:
說明:
在{capture name=”test”}和{/capture}之間的內(nèi)容被存儲(chǔ)到變量$test中,該變量由name屬性指定.在模板中通過 $smarty.capture.test 訪問該變量.如果沒有指定name 屬性,函數(shù)默認(rèn)將使用”default” 作為參數(shù),這一點(diǎn)很jquery中的clone
2,config_load標(biāo)簽
config_load可以直接將文件中的內(nèi)容讀取出來,這樣可以省掉assign這一步。
上述過程中如果出現(xiàn)這樣的問題Warning: Smarty error: unable to read resource, 請(qǐng)查看一下,你的test.csv是不是放在smarty的配置目錄中,默認(rèn)配置目錄是configs
3,literal標(biāo)簽的使用
做web開發(fā),難免會(huì)寫一些JS,jquery代碼。js和jquery里面都會(huì){}這樣的符號(hào),smarty會(huì)不會(huì)把它理解成php的變量呢?如果你不加literal標(biāo)簽的話,smarty肯定會(huì)把它理解變量了,加了就不會(huì),例如:
4,php標(biāo)簽
當(dāng)你習(xí)慣了assign后,你有沒有想過,在模板文件里面直接寫php代碼呢,我想有的時(shí)候你肯定很想吧。例如:
5,strip標(biāo)簽
strip標(biāo)簽去除標(biāo)簽內(nèi)的空格和回車,這一點(diǎn)我覺得,做手機(jī)開發(fā)的朋友肯定用的到,因?yàn)槿强崭裼锌赡軙?huì)導(dǎo)致整個(gè)頁面錯(cuò)亂,甚至是一個(gè)空白頁面。手機(jī)屏幕小,估計(jì)用smarty的可能性也比較小。
6,fetch標(biāo)簽
fetch標(biāo)簽根php的file_get_contents挺想的,都可以把文件中的內(nèi)容讀出來,并且是個(gè)字符串的形勢(shì)
]]>
如果直接這樣打印多維數(shù)組 {{$var|print_r}},在模版看到的結(jié)果會(huì)是遍歷后的所有的value,不會(huì)顯示完整的數(shù)組結(jié)構(gòu),正確的方法是在函數(shù)前加個(gè)@,意思是把變量作為整體去對(duì)待
{{$var|@print_r}}
]]>
模板中調(diào)用變量時(shí),當(dāng)只有一個(gè)參數(shù)是,就直接{$str1|函數(shù)名},當(dāng)有函數(shù)有兩個(gè)參數(shù)時(shí),{第一個(gè)參數(shù)|函數(shù)名:第二個(gè)參數(shù)},當(dāng)有三個(gè)參數(shù)時(shí),{第一個(gè)參數(shù)|函數(shù)名:第二個(gè)參數(shù):第三個(gè)參數(shù)},,當(dāng)有4,5,,,參數(shù)時(shí),以此類推。
smarty在模板上可以直接使用php自帶的函數(shù),甚至可以使用自定義的函數(shù)。
smarty使用date函數(shù)的用法是{{'Y-m-d'|date:$var}}
]]>
php已經(jīng)賦給模版一個(gè)數(shù)組,數(shù)組的信息如下:
$config= array(
1=>'中山',
2=>'石岐'
);
數(shù)據(jù)庫存儲(chǔ)地區(qū)的字段記錄的是該數(shù)組的鍵名,如1,現(xiàn)在要在模版上顯示:中山。
如果這樣寫會(huì)報(bào)錯(cuò):
{{$config.$row.region}}
模版上的正確的寫法是:{{$config[$row.region]}}
今天遇到的問題還更復(fù)雜一點(diǎn),數(shù)據(jù)庫字段存儲(chǔ)的是一些配置的序列化,所以在調(diào)取地區(qū)信息時(shí)還需要進(jìn)行反序列化處理,中間必須有一個(gè)賦值的過程:
{{assign var=param value=$l.params|unserialize}}
然后$param.region就可以取得1這個(gè)值了
]]>模板中調(diào)用變量時(shí),當(dāng)只有一個(gè)參數(shù)是,就直接{$str1|函數(shù)名},當(dāng)有函數(shù)有兩個(gè)參數(shù)時(shí),{第一個(gè)參數(shù)|函數(shù)名:第二個(gè)參數(shù)},當(dāng)有三個(gè)參數(shù)時(shí),{第一個(gè)參數(shù)|函數(shù)名:第二個(gè)參數(shù):第三個(gè)參數(shù)},,當(dāng)有4,5,,,參數(shù)時(shí),以此類推。
smarty使用date函數(shù)的用法是{{'Y-m-d'|date:$var}}
]]>