iT邦幫忙

0

smarty include 問題

  • 分享至 

  • xImage

假設我有一個特定區塊是判斷有沒有登入的 login form
幾乎全站每一頁都有,我可以在各別頁面用 include 的方式使用他嗎?
目前遇到的問題是,如果單獨寫一個 login_form.php
對應 $smarty->display('login_form.html')
在 index.php include 的話似乎是不可行的
這是否代表 login policy 在每一頁都要重下並且重新 assign?

chan15 iT邦新手 2 級 ‧ 2011-06-02 17:46:00 檢舉
之前也想用 MVC
在 CI 跟 Zend 之間掙扎
要不要用 Smarty 也掙扎很久
後來覺得至少先要讓 HTML 跟 PHP 分離
還是 Smarty 頂著先
fillano iT邦超人 1 級 ‧ 2011-06-02 22:57:54 檢舉
其實要不要使用Template Engine也是見仁見智,php本身也可以拿來當作template language使用,不過使用Smarty會分離比較徹底,不然其實在template裡面還是要夾雜PHP程式,使是他是用來顯示傳入的變數以及控制頁面邏輯。smarty最後會把template編譯成php,放在cache目錄裡面。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

6
fillano
iT邦超人 1 級 ‧ 2011-06-01 09:45:40
最佳解答

對於不想立即輸出的內容,可以改用$smarty->fetch()來取得輸出字串,然後在適當的地方echo。

看更多先前的回應...收起先前的回應...
chan15 iT邦新手 2 級 ‧ 2011-06-01 11:36:40 檢舉

fillano 大大,根據您提供的線索,我弄了這樣的架構,您可以幫我看一下有沒有更好得架構嗎

index.php

<pre class="c" name="code">
require_once 'config.php';
require_once 'login.php';
$smarty->display('index.html');

index.html

<pre class="c" name="code">

<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{$smarty.const.SITE_TITLE}</title>



{$loginArea}

login.php

<pre class="c" name="code">
<?php
$smarty->assign('loginName','test');
$login = $smarty->fetch('login.html');
$smarty->assign('loginArea', $login);
?>

login.html

<pre class="c" name="code">
<?php
$smarty->assign('loginName','test');
$login = $smarty->fetch('login.html');
$smarty->assign('loginArea', $login);
?>
chan15 iT邦新手 2 級 ‧ 2011-06-01 11:37:56 檢舉

login.html 這樣才對

<pre class="c" name="code">
<div style="width: 100px; height: 100px; border: 1px solid red;">
{$loginName}
</div>
fillano iT邦超人 1 級 ‧ 2011-06-01 13:58:38 檢舉

直接使用Smarty的話,這樣應該就可以了。

fillano iT邦超人 1 級 ‧ 2011-06-01 14:12:07 檢舉

需要更好的架構的話,那可能要參考一些MVC Framework的作法,依照你要達到的功能設計出架構,不過底層簡單地說也就是這樣做而已。

想下手的話,可以先參考這篇文章:
如何打造 WebMVC Framework – 基礎概念篇

作者應該還會慢慢加入一些細節,只是不知哪年哪月。對這些有興趣的話,不妨到:
http://groups.google.com/group/zf-tw
晃晃,通常隔週有聚會。

我要發表回答

立即登入回答