2008-09-23 31 views
2

我不知道我該如何表達這一點,但我會試一試。
我最近開始在面向對象的PHP中編寫我的投資組合,我想知道是否根據最佳實踐來使用內容根據SQL數據和$ _GET變量而變化的單個頁面?整個網頁使用一個文件的利弊?

如果是這樣/不是,爲什麼?

編輯:看看我的下一篇文章,更深入的細節。

回答

11

您是否在詢問有關使用前端控制器模式的問題,其中一個文件可以滿足您的所有請求?通常這是通過一個index.php和mod_rewrite來完成的,它將所有的請求與其餘的URL一起作爲查詢字符串中的參數提供給它。

http://www.onlamp.com/pub/a/php/2004/07/08/front_controller.html

我會傾向於推薦用於應用這種模式,因爲它給你一個地方來處理之類的身份驗證,並經常就需要有新的地方的事情在一個更緊密集成的水平特徵是通過某種機制向控制器註冊的類很有意義。

對其他人提到的URL的擔憂並不準確,因爲除非您使用構建網站的古老技術,否則URL結構和文件結構之間沒有真正的關係。一個很好的apache功能基於文件/目錄結構和URL結構是不同的概念(別名模塊,重寫模塊,內容協商,等等)的概念

5
  • 不可擴展
  • 難以管理代碼
  • 分析器必須分析一切
  • 代碼
  • 完美的例子,聞
  • 一個錯誤崩潰,你的整個網站gatekiller提到
+0

不可擴展?!曾經訪問過維基百科? – kibibu 2010-03-30 23:52:48

0

一切+你也不能利用後期綁定。

0
  • 硬盤如果您正在使用版本控制將是一個困難得多回滾可能發生到您的網站的一個「頁」的任何更改管理代碼

。既然你將不得不重新合併任何可能來到後

0

這不是搜索引擎友好的,除非你使用國防部重寫

5

如果你的意思是一個單一的着陸頁(例如的index.php),然後使用會話變量等來確定需要包含哪些代碼,那麼是的,這是一種常用的技術。

編輯:和上面我的意思是丹尼爾Papasian詳細解釋了在他的優秀崗位

如果你的意思是將所有的HTML,SQL和PHP的單個文件,則沒有,理由指出由GateKiller提供。

+0

我希望這更符合他的想法。有時我會這樣做,有時我不會。這取決於其他人(如設計師)是否會嘗試修改網站。因爲他們與調用其他頁面的頁面混淆。 – 2008-09-23 16:20:53

+0

模板引擎的設計非常適合消除這種混淆。頁面的動態區域在(希望爲語義的)HTML中用特殊標記標記,因此負責設計佈局的人員可以識別不同內容應該去的地方。 – 2008-09-23 21:00:04

0

我傾向於不同意大多數 - if您的網站由自定義的CMS或類似的東西管理,沒有理由不使用一個頁面。

我做了CMS我寫了一段時間後類似的事情。所有客戶端都有一個default.asp頁面,用於查詢數據庫的主題,內容,附件和成員權限。爲了做出改變,我只做了一次修改,並在需要更改時將其複製到其他客戶端。

當然這不會在大多數情況下工作。如果你有一個網站做了很多不同的事情(我的CMS只是在加載頁面時重複了某些功能),那麼多個頁面確實是唯一的出路。

+0

投了你。老實說,我不明白你爲什麼被拒絕了。我可能不同意,但這並不意味着你錯了。 :) – willasaywhat 2008-11-12 16:34:56

2

的actaul頁面文件應該只包含有什麼不同勢有關從標準的「頁」網站上的該頁面(如網頁標題,索引頁可以有代碼來獲取最新的新聞,等等)。 Everythin是(或可能)在多個地方使用,應移到外部php文件,幷包括在內。例子有:

  • 數據庫信息來源(密碼,用戶名等)
  • 頁眉/頁腳
  • 登錄代碼

這使得代碼更easyer管理。例如,如果您更改了數據庫密碼,它只有一個需要更新的文件,或者如果您決定向標題添加橫幅,則只有一個頁面不是所有需要更改的頁面。

這也使得增加新的功能要少得多的工作,例如一個新的頁面可能僅僅是:

<?php 
require ('config.php') 
require ('start.php') 
require ('header.php') 
//custom page stuff 
require ('footer.php') 
?> 

或添加通過cookie自動登錄,是一個簡單的變化登錄()函數(創建一個cookie )和start.php(檢查cookie +調用Login())。

您也可以easyily這些文件在未來轉移到其他項目。

0

對於那些誰感興趣的話,存在使用這種精確模型的框架。最初爲ColdFusion。這種方法還有一個社區,5.5版是在一年前發佈的(2007年12月)。

FuseBox Framework site

Wikipedia entry

0

這screendump和下面的解釋可能給什麼我的代碼看起來像此刻更好的主意。

File-structure

我用同樣的模型作爲一個「互聯網朋友」,丹尼爾Papasian和其他幾個人提;前部控制器。

我的索引頁看起來像這樣。

require_once 'config.php'; 
require_once 'class_lib/template.php'; 

$template = new template($config); 
$template->dataQuery(); 
$template->pageCheck(); 
$template->titleAssembly(); 
$template->cssAssembly(); 
$template->metaAssembly(); 
$template->menuAssembly(); 
$template->content(); 
echo $template->publish(); 

類構造打開主模板文件並將其加載到一個變量中,每個方法都可以通過用生成的代碼替換標籤來操作。 因爲我將使用mod_rewrite清理它,所以醜陋的URL不是真正的問題。
不過,Papasian有一點,這種方法會更適合基於網絡的應用等。

非常抱歉,我的問題並不是非常具體。
此外,大家多謝幾位幫忙的人。

0

我經常使用不帶.php擴展名的PHP文件(即網站),並添加

<Files site> 
ForceType application/x-httpd-php 
</Files> 

到這使得阿帕奇interprete的文件作爲PHP文件中的.htaccess。

您可以分析瓦爾到URL中的文件:http://www.yourdomain.com/site/var1/var2/var3

使用

$var_array = explode("/",$_SERVER['REQUEST_URI']); 
$var1 = $var_array[1]; 
$var2 = $var_array[2]; 
$var3 = $var_array[3]; 

得到瓦爾。通過這種方式,您可以使用單個文件與searchengingfriendlyurls沒有modrewrite。

0

重:URL和文件結構

我轉換一個網站,所有內容在一個數據庫中,並與指數P = 434模型訪問?使用數據庫沒有任何好處,並且該網站對必須添加內容的人員感到困惑,因爲他們必須使用瀏覽器編輯內容,頁面只是數字。

我把所有的內容都拿出來放在不同的文件中。每個人都有一個明智的名字,並被組織成文件夾。每個文件看起來像這樣:

require('sitelib'); 
do_header('about', 'About Us'); 
// content here 
do_footer(); 

客戶喜歡它。他們能夠使用任何HTML編輯器進入,找到正確的文件並進行更改。他們能夠製作新的頁面。總而言之:有時候,使URL和文件結構匹配很有用。