iT邦幫忙

0

關於模板的提出?

假設我有一個頁面是這樣

<?
require_once __DIR__ . '/header.php';
?>

<div class="admin-container">
  <div class="left-side-content">
    <div class="left-side-content-container relative">
      (這放menu) require 'xxx.php';
    </div>
  </div>
  <div class="right-side-content">
    <div class="right-side-content-container relative">
      (這放內容) require 'xxx.php';
    </div>
  </div>
</div>

<?
require_once __DIR__ . '/footer.php';
?>

假如我的 menu 跟 內容都會丟一個 php 進去(當然會根據 router 不同而不同)
我能怎麼把這個模板提出,我就只要改 menu 跟 內容的 php 檔案名稱就好?
因為如果是有二十頁,就會有二十頁這一狗票的東西~但會變得只有 menu 跟 內容
謝謝說明!

vegalou iT邦新手 4 級 ‧ 2019-06-18 09:17:34 檢舉
先瞭解老牌Smarty的模版框架再弄懂SPA的單頁程式服務裡面有一堆AJ與區塊的變化也可以用動態頁框來做不過先決的條件請你先把底子打好再去摸MVC的框架路由控制

問題就是你沒功夫底子啊。
小松菜奈 iT邦研究生 4 級 ‧ 2019-06-18 12:25:57 檢舉
Smarty 可以直接拿來用嗎?即便網站本體不是框架?
fillano iT邦超人 1 級 ‧ 2019-06-18 13:48:06 檢舉
可以,他跟框架無關。

2 個回答

1
fillano
iT邦超人 1 級 ‧ 2019-06-19 09:29:22
最佳解答

https://www.smarty.net/inheritance

如果你要用Smarty的話,使用他的繼承功能,就可以做出你要的效果。共同的內容就放在他例子中的layout.tpl,在其中定義好變動的部份為block,然後每頁的template只要繼承layout.tpl,然後專注於block的內容就可以。

簡單的routing機制可以用front controller模式來實做,我google了一下,看到iT邦就有文章:https://ithelp.ithome.com.tw/articles/10193950 。這樣你就可以根據route來決定調用的template,會比較方便。

都做完以後你會發現,MVC裡面,V跟C的關係比較緊密,M通常可以抽換...一些舊的程式,需要的話可以先實做V,然後引入C,最後加入M,這樣一步一步改成MVC。

0
浩瀚星空
iT邦大師 1 級 ‧ 2019-06-18 09:39:03

搖頭中

聽到你說20個頁面要改,我就頭昏了。

從你提出來的範例來看,你的「require 'xxx.php';」
是依照不同的router來去取不同的頁面。

但試問一下,這20格頁面的格式是否是一樣架構的東西。
正統來說,你因該是建立一個模版之後。帶入參數來去生成你的東西。
這樣你只要一個頁面就好。

剩下來就是從程式中去處理變數輸出就行了。
用20多個頁面是一件很笨的事。

看更多先前的回應...收起先前的回應...
froce iT邦大師 6 級 ‧ 2019-06-18 09:53:30 檢舉

PHP沒模版語言這種東西嗎?
在現代的MVC框架中,要做這種事非常容易。把模版用函式render出來就好了。
純PHP得自己實現的話就比較麻煩了。

dragonH iT邦研究生 3 級 ‧ 2019-06-18 10:10:33 檢舉

我記得他之前的發問

好像有說他正在用Laravel寫 MVC 啥的...

帶值到模版中應該是MVC基本中的基本吧/images/emoticon/emoticon10.gif

其實,看到 require_once 的用法在view上面我就已經冷一半了。
雖然我不知道Laravel是否有view呼叫的做法。

小松菜奈 iT邦研究生 4 級 ‧ 2019-06-18 12:25:12 檢舉

有呢,我有看過一些模板引擎,只是還在摸索中,我想明白這原理,像這個是我昨天查到的:https://www.toolmao.com/php-simple-template

fillano iT邦超人 1 級 ‧ 2019-06-18 13:54:21 檢舉

Smarty是會經過編譯的(他會編譯成PHP,放在設定好的cache目錄),他的模板語法也就是一個簡單的程式語言了。你看到的例子是直接把模板要用的變數準備好,然後include模板,模板本身的實際上還是個PHP。

想要知道Smarty的原理,不如直接去看Smarty的原始碼,不過他複雜得多。

fillano iT邦超人 1 級 ‧ 2019-06-18 14:01:14 檢舉

另外,學習使用模板引擎的時候,首先要注意的重點並不是他的原理,而是頁面的內容以及如何重複利用共同的部份等等,把要呈現的東西組織起來。

vegalou iT邦新手 4 級 ‧ 2019-06-18 20:34:17 檢舉

好像看到酷SA的ID... /images/emoticon/emoticon12.gif

我要發表回答

立即登入回答