熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

如何在smarty中增加類似foreach的功能自動加載數據

2013-11-15 12:36:14  來源: PHP編程 

  在smarty中使用自定義插件來加載數據(見編寫Smarty插件在模板中直接加載數據的詳細介紹)在使用的時候還是感覺不夠方便靈機一動就想寫成類似foreach那種標簽

第一步在Smarty_Compilerclassphp的_compile_tag函數中增加

復制代碼 代碼如下:
//加載數據的開始標簽
case load:
$this>_push_tag(load);
return $this>_complie_load_start($tag_args);
break;
//加載數據的結束標簽
case /load:
$this>_pop_tag(load);
return "<?php endforeach; endif; unset(/$_from); ?>";
break;

  
第二步增加一個方法

復制代碼 代碼如下:
/**
* 加載數據
* @param $tag_args
*/
function _complie_load_start($tag_args)
{
$key = substr(md($tag_args) ); //根據參數生成一個特殊的變量名
$attrs = $this>_parse_attrs($tag_args);
//這裡可以增加更多的處理
$class = (!isset($attrs[class]) || empty($attrs[class])) ? cls_crud : trim($attrs[class]);
(!isset($attrs[table]) || empty($attrs[table])) && exit(`table` is empty!);
$db = $class::factory(array(table => substr($attrs[table] )));
//定義新變量
$this>_tpl_vars[$key] = $db>get_block_list(array(substr($attrs[where] )) $attrs[limit]);
$tag_args = "from=/${$key} " $tag_args;

//調用foreach標簽處理函數進行處理
return $this>_compile_foreach_start($tag_args);
}

  
這樣就可以在模板中使用load這個標簽了用法例如

復制代碼 代碼如下:

  
{load table="test" where="`id`<" limit= item=rec}

{/load}


From:http://tw.wingwit.com/Article/program/PHP/201311/21257.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.