EcStart PHP 技術討論論壇's Archiver

sqaure 發表於 2009-2-28 00:16

smarty頁面中又要包含另外一個smarty程式的頁面?(避免程式碼重複寫)

標題似乎有點難表達我的問題..

我想做的是 :
[b]list.php[/b]
$smarty = new $smarty();
//....相關設定後
$smarty->assign("content" , "list.tpl");
//query articles....
$smarty->assign("article" , articles);
$smarty->display("main.tpl");

[b]main.tpl[/b]

     {include file="head.tpl"}
-------┬-------------------------   
tool   |  
div1   | {include file = $content}
-------┤
tool   |
div2   |
:     |
-------┴--------------------------
     {include file="footer.tpl"}

main.tpl 是一個共用的樣板
主要架構就是 頁面的header跟footer都是固定的靜態樣板(方便未來可替換用)
直接利用smarty   { include file="header.tpl"} { include file="footer.tpl"}
就可以解決,
而畫面中主要的內容區  主要是利用assign $content 來選擇想顯示的樣板(例如 $content= list.tpl (文章列表) )
同時把$content的樣板中的資料 assign 進去
最後在整個  $smarty->display("main.tpl") 就會顯示出所有畫面
這是的初步構想 也的確是work的

但比較大的問題就是 左方的功能列 是類似一個個的小視窗
每個小視窗都希望 未來是可以獨立運作的
例如 : tool_1.php  <---> tool_1.tpl
請問這樣該怎麼做呢?
做法一 : 如同$content
       {include file="tool_1.tpl"}
       同時在list.php 當中 assign tool_1.tpl中所需要的資料
        缺點 : 如果tool_1.tpl 又需要 給其他頁面共用
               assign 給 tool_1.tpl的資料 又要再重複寫一次


作法二 : 利用ajax 的方式 送出request 要求tool_1.php
        將responseText貼回 小視窗的div中
         缺點 : 寫法較為困難,後續維護需要更高技巧
                其tool_1的相關js 與css,又要另外請求利用javascript 加入link到list.tpl的DOM中

目前我是採取 做法二 ,但不知道是否各位有更好的做法?

因為目前所開發的網站中 會有很多如此共用的頁面
所以才想要避免程式碼重複寫,以便維護
希望能聽聽大家的意見。

FIEND 發表於 2009-3-19 02:07

小弟的作法如下 :

把 整個 WEB 的架構切割如下 ... ( 個人喜好 )
1. DB or other data
2. MODEL ( GET DB LOGIC )
3. CONETNE LOGIC (XML SCHEMA , ...... )
4. Display Logic ( XSL ... )
5. HTML , JAVASCRIPT , AJAX .....

方塊圖就不劃了 ....

例如 :

1. 將 取得 DB 內容 的 邏輯模組化 運用 OBJ 的 FACTORY 寫法 讓 MODEL 的 LOGIC 支援所有的 DB SERVER .

2. 將 DB 的內容 打成 XML  的邏輯模組化 定義 固定格式的 XML SCHEMA .  
    並且 嚴格規定所有的 XML SCHEMA 的 格式 要 一致 .
    以後只要 下參數給 物件 配合 MODEL 的 OBJ 就可以 吐出固定格式的 XML SCHEMA .

3. 利用 XSL , AJAX , FLASH ..  等技術 將 XML 的資料 轉化成 要做的內容 .
     將一些常用的 COMPONENT 一一的 建設起來  , 並且可以重覆的使用.

4. 假如 需要誇平台介接 可以用 SOAP 或是 直接吐出 XML 給 另一個 COMPONENT 接起來使用.

這樣一來 .

以這個FRAME去建構 自己想要的開發環境 .

在一個經過設計的 RELATION 的系統下 ,

我只要 呼叫 MODEL 物件 將 XML 吐出來 .

然後再將 現成 的 ( 一致性且模姐化過的 )畫面邏輯 套用進來.

就可以 避免大量 重覆寫的問題.

連更換資料庫伺服器都可以不用改程式 .

只要改劃面邏輯還有維護 各層的物件 就好.

往後在執行第二個專案時 , 只要重新設計 RELATION 及 FLOW .

將參數重餵 , 至少可以比原本的開發方式快上數十倍或百倍.

這樣一來 只要 FRAME 隋著時間的成熟 想寫的程式會愈來愈少 ,

慢慢的只要管好 各LAYER 的 OBJ ,  Human interface , ART , DATA RELATION , FLOW ...

就可以不停的重覆使用及把玩專案.

當 UI 工程師最大的樂趣 絕對不是在 PROGRAMER 而是在此吧?

相較起來 以 smarty 建設起來的架構顯得笨又難用多了.

雖然我可以將 畫面抽離 但是我還是無法讓 資料邏輯和畫面邏輯 可以有一致性和重覆使用性 ( 因為沒有標準的規範 )

所以 - 說穿了smarty 只是玩具 試問 玩 玩具 磨出來的技術跟FRAME 怎麼進步呢 ?

john75116 發表於 2009-6-10 18:43

FIEND 關於你講得方法,我實在太有興趣了,可否請你在講詳細點呢

FIEND 發表於 2009-6-11 11:11

[quote]FIEND 關於你講得方法,我實在太有興趣了,可否請你在講詳細點呢
[size=2][color=#999999]john75116 發表於 2009-6-10 18:43[/color] [url=http://bbs.ecstart.com/redirect.php?goto=findpost&pid=95949&ptid=34571][img]http://bbs.ecstart.com/images/common/back.gif[/img][/url][/size][/quote]

我想這些應該是 commonsense .

小弟有點老王賣瓜了.

相信很多精通 web 開發的大大們 都很了解這種架構.

上述只是小弟十幾年來 玩 web programmer 的一些小小心得和看法.

我也很想詳盡的分析在下的心得 但是礙於我還要工作 實在撥不出時間詳盡的解說 如何實作這個架構.

況且 .. 我覺得就算我寫了一系列教學 有興趣的人應該也非常少...

所以 如果您真的有興趣 , 可以自己玩看看.

或是參考己經做好的 framework.

目前 php 我覺得大部份寫出來的 framework 都寫的很亂.

而且沒有照標準的規範來寫 .

例如 :

有名的 cakephp  

定義好 mode view control 後 .

把 畫面邏輯放在 control 然後 又把 內容邏輯又放入 view..

亂七八糟 .... 雖然它的名氣很大...

我記得 二三年前 我有玩過一星期後就被它的架構給嚇到了 .

除了 model 的部份值得學習外..... 其它我覺得一文不值 我連用它的動力都沒有.

我覺得您可以參考別的程式語言的 framework .

例如 java 或是 python .

以 python 來說 model 的應用可以參考 :

[url]http://www.sqlalchemy.org/[/url]

而 xml 的應用 您也可以多查找 google ...

或到 w3c 多看看....

頁: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.