假設我有一個頁面是這樣
<?
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 跟 內容
謝謝說明!
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。
搖頭中
聽到你說20個頁面要改,我就頭昏了。
從你提出來的範例來看,你的「require 'xxx.php';」
是依照不同的router來去取不同的頁面。
但試問一下,這20格頁面的格式是否是一樣架構的東西。
正統來說,你因該是建立一個模版之後。帶入參數來去生成你的東西。
這樣你只要一個頁面就好。
剩下來就是從程式中去處理變數輸出就行了。
用20多個頁面是一件很笨的事。
PHP沒模版語言這種東西嗎?
在現代的MVC框架中,要做這種事非常容易。把模版用函式render出來就好了。
純PHP得自己實現的話就比較麻煩了。
我記得他之前的發問
好像有說他正在用Laravel寫 MVC 啥的...
帶值到模版中應該是MVC基本中的基本吧
其實,看到 require_once 的用法在view上面我就已經冷一半了。
雖然我不知道Laravel是否有view呼叫的做法。
有呢,我有看過一些模板引擎,只是還在摸索中,我想明白這原理,像這個是我昨天查到的:https://www.toolmao.com/php-simple-template