萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP中獲得$Smarty.capture.name截獲的輸出

PHP中獲得$Smarty.capture.name截獲的輸出

想要獲得$smarty->display後的輸出,並作為字符串賦給php變量有兩種方法:

  1、ob_start

  ob_start();

  $smarty->display("StockNews/getLeft.tpl");

  $string = ob_get_contents();

  ob_end_clean();

  2、$smarty->_smarty_vars['capture']['captureName'];

  $smarty->display("StockNews/getLeft.tpl");

  $string = $smarty->_smarty_vars['capture']['captureName'];

  //captureName為{capture name=banner}中的name;

  //方法需在tpl中使用capture捕獲輸出

  //和第一種原理是一樣的,查看編譯的php的到:

  //php $this->_smarty_vars['capture']['captureName'] = ob_get_contents(); ob_end_clean(); ?>

  //不難看出smarty的capture正是使用了php的ob_start方法

  總結:這個技巧在部分靜態化頁面中很有用處。也就是說,當使用了smarty,而且某頁面需一部分靜態,一部分動態輸出時,可以利用上述方法。

  我在smarty中靜態頁面時,采用這種方法:

  --static.html

  --index.php

  --includeStatic.tpl

  --index.tpl

  --needStatic.tpl

  index.php //主頁,此頁中分需靜態部分及動態輸出部分

<?PHP
if(file_exists('static.html')){
//存在靜態頁輸出靜態頁
//使用capture截獲包含靜態頁後的輸出
$smarty->assign('filename','static.html');
$smarty->display('includeStatic.tpl');
//動態輸出部分
$num = rand(1,9);
$smarty->assign('num',$num );
//再次display,輸出index
$smarty->display('index.tpl');
}else{
//不存在靜態頁往下繼續運行,並生成靜態頁
//這裡使用上述方法,動態獲得需靜態部分的輸出,這裡使用的方法一,同樣也可以使用方法二
ob_start();
//假如要靜態數組$array在display後的輸出
$smarty->assign('array',$array);
$smarty->display("needStatic.tpl");
//將動態輸出內容存至$string變量
$string = ob_get_contents();
ob_end_clean();
//生成靜態頁
$handle = fopen('static.html','wb');
fwrite($handle,$string);
fclose($handle);
//動態輸出部分
$num = rand(1,9);
$smarty->assign('num',$num );
//輸出index
$smarty->display('index.tpl');
}
?>
static.html //此頁是主頁中靜態部分產生的靜態頁

  我是靜態頁!

  includeStatic.tpl //假如存在靜態頁,則通過display此頁截獲一個輸出(用在index中的)

  {capture name=staticed}

  {include file=$filename}

  {/capture}

  needStatic.tpl //沒有已靜態好的頁面時,動態生成靜態頁,此處為主頁靜態部分的tpl

  {capture name=staticed}

  {section name=a loop=$array}

  {$array[a]}

  {/section}

  {/capture}

  index.tpl //首頁輸出,包括靜態及動態部分。注:無論靜態html是否存在,都會通過capture截獲輸出,用在此頁。

  我是首頁

  這裡是靜態部分:

  {$smarty.capture.staticed}

  這裡是動態部分:

  {$num}

  當不願在php中使用界定符或直接輸出html標記時(這樣顯得代碼很亂=.=!),可以通過上述兩種方法將display後的html賦給一個php變量以便操作

copyright © 萬盛學電腦網 all rights reserved