程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中獲得$Smarty.capture.name截獲的輸出

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

編輯:關於PHP編程

    想要獲得$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變量以便操作

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved