我會用一個方法讀取'sk'並運行另一種方法,具體取決於它的值。
一種方法是'照片',它會讀取'id'並從數據庫中獲取照片。然後,它會運行另一種方法displayPage
,該方法將顯示來自該數據的頁面。
displayPage
方法需要一個「模板」文件名和一個變量數組來提供給模板。它設置smarty object,提供變量,並指示它顯示模板。
在模板內部,我會在網站的每個頁面中包含全局標題的另一個模板,然後我將html頁面內容,使用smarty插入動態值,然後包含全局頁腳。
請注意,我已經簡化了這個系統。像這樣的真實頁面需要我花一個星期的時間來編寫所有的代碼,因爲一個大網站只是爲了顯示一個簡單的頁面而做了很多事情(例如:找出登錄的用戶是否真的有權訪問該頁面.. 。我無法訪問你給出的例子)。
<?php
// profile.php
class ProfileController
{
public function run()
{
if ($_GET['sk'] == 'photos')
return $this->photosPage();
}
protected function photosPage()
{
$id = (int)$_GET['id'];
$result = mysql_query("select * from photo where id = $id");
$photo = mysql_fetch_object($photo);
$this->displayPage('view-photo.tpl', array('photo' => $photo);
}
protected function displayPage($templateFile, $templateVariables)
{
$smarty = new Smarty();
foreach ($templateVariables as $variableName => $variableValue) {
$smarty->assign($variableName, $variableValue);
}
$smarty->display($templateFile);
}
}
$conntroller = new ProfileController();
$controller->run();
而智者代碼:
<!-- view-photo.tpl -->
{include file='head.tpl'}
<h1>View Photo {$photo->name|escape}</h1>
<img src="{$photo->src|escape}" width="{$photo->width|escape} height="{$photo->height|escape}>
{include file='foot.tpl'}
你確實想知道的Facebook是如何工作的,或者你只是想建立類似的東西? Facebook收到瘋狂的流量,因此該網站並非像世界上任何其他網站一樣建造。即使URL中有「.php」,如果該頁面甚至不執行任何PHP代碼,我也不會感到驚訝。 –
實例,與Facebook無關。它是關於$ _GET ['variables']/querystrings並基於查詢字符串填充頁面。頁面如何被調用?這是一個超級簡單的問題。我可能會讓它過於複雜。 – Graham
這不是一個簡單的問題,而且有很多完全不同的答案。擁有一個好的系統是很重要的,否則你的代碼往往會變成bug。請記住,「profile.php」會做很多不同的頁面,而不僅僅是一個頁面,你需要一種方法來分離所有不同頁面的代碼。我已經回答了大約我們如何在我工作的網絡編程業務上做的事情。 –