我正在尋找一個輕量級,基於PHP的佈局框架。就像Zend Framework如何使用佈局一樣,我想創建一個佈局模板並僅包含必要頁面的內容。輕量級,基於PHP,佈局框架...知道任何?
<html>
<head>
<title><?= $pageTitle ?></title>
</head>
<body>
<?= $content ?>
</body>
</html>
任何人都知道這是什麼?我會使用Zend Framework,但對於我想實現的目標來說太多了。
我正在尋找一個輕量級,基於PHP的佈局框架。就像Zend Framework如何使用佈局一樣,我想創建一個佈局模板並僅包含必要頁面的內容。輕量級,基於PHP,佈局框架...知道任何?
<html>
<head>
<title><?= $pageTitle ?></title>
</head>
<body>
<?= $content ?>
</body>
</html>
任何人都知道這是什麼?我會使用Zend Framework,但對於我想實現的目標來說太多了。
我實際上即將在europaphp.org上發佈一個以及示例和完整文檔。它在約定和編碼標準中與Zend Framework非常相似。完成後我會發布一些信息;大概在接下來的一週內。
您可以在以下位置獲取代碼:[http://code.google.com/p/europa/source/browse/#svn/trunk/Sandbox - 默認值] [1]。
該鏈接將顯示沙盒的最新svn,您只需下載並開始使用它即可,無需任何配置。
目前,它比大多數其他任何PHP框架都快。
[1]:http://code.google.com/p/europa/source/browse/#svn/trunk/Sandbox - 默認
FryPHP是一樣輕便。
BareBones:一個文件,沒有配置,MVC框架PHP5
我投票支持PHP。 (PHP 是一個模板引擎。)
function template($file, $vars) {
ob_start();
if(count($vars) > 0) { extract($vars); }
include 'views/'.strtolower($file).'.php';
return ob_get_clean();
}
,順便說一下,讓你做到以下幾點。
echo template('layout', array('content' => template('page', $myData)));
如果PHP本身可以滿足只有6條線,那麼你是否應該甚至打擾使用另一個模板/佈局引擎?
編輯:
也許我不是如何工作的明確。
template()
被稱爲模板的名稱(組織工作的子目錄),數組對象作爲第二個參數。如果給定的變量不是空白的,如template('index',null)
是,那麼該數組被視爲一個關聯數組:每個鍵變成一個包含該值的變量。
所以邏輯變爲:
template('my_template', array(
'oranges' => 'apples'
));
和 「視圖/ my_template.php」 是:
<html>
<head>
<title>Are apples == <?= $oranges ?>?</title>
</head>
<body>
<p style="color: <?= $oranges == 'oranges' ? 'orange" : 'darkgreen' ?>">
Are apples == oranges?
</p>
</body>
</head>
所以,每次可變$oranges
使用PHP時間獲取從導出的數據陣列,。
因此,所有的輸出然後由ob_get_clean()
並作爲字符串返回。要輸出此字符串,只需輸入echo
或print
,或將其分配給要作爲內容傳遞給佈局的數組。如果你理解了這一點,那麼很容易就可以把我寫的東西寫出來,或者使用邏輯輸出JSON的頁面。
我建議你在放棄之前試用這個答案。它有一種在你身上成長的傾向。
編輯2:
按照要求,我會告訴我的項目將使用的目錄佈局。請注意其他MVC框架使用不同的結構。但是,我喜歡我的簡單。
index.php
application/
framework.php
controllers/
welcome.php
views/
template.php
index.php
爲了安全起見,我有一個.htaccess
文件的路由每一個請求,除了那些js/
或css/
,到index.php
腳本,有效地使我的目錄是隱藏的。你甚至可以通過模板製作CSS,如果你希望,我已經做了,使用變量等。
所以,任何對template('template', array())
的調用都會自動加載文件./views/template.php
。如果我在名稱中包含斜線,它將成爲路徑的一部分,如下所示:./views/posts/view.php
。
編輯3:
感謝您的更新。所以你必須在你的index.php文件中有一些代碼將請求的URL路由到適當的控制器,對嗎?你能展示一些嗎?另外,它看起來並不像你的視圖鏡像你的控制器目錄。你能稍微解釋一下urls如何映射到控制器和/或視圖嗎?你在framework.php中有什麼?它有什麼作用?謝謝!
我所展示的代碼是我的私人Web開發框架的一個小小的摘錄。 I've talked already about potentially releasing it擁有雙重許可證,或作爲商業用途的捐贈物品,但在短時間(15-21天)內沒有任何其他人不能書寫。如果你想要你可以read my source code on GitHub ...但是請記住它仍然是alpha材質。
許可證是Creative Commons SA。
cool!謝謝你的幫助! – Andrew 2009-06-17 00:13:06
如果你想超輕量級,你可以使用auto-prepend文件,與一些output buffering混合構建你想要的。首先,你需要設置你的前插和附加文件 - 把下面的線在你的.htaccess文件(你可能會想使前插和追加不可讀遊人文件,太):
php_value auto_prepend_file prepend.php
php_value auto_append_file append.php
然後在你prepend.php文件,你要打開輸出緩衝:
<?php
ob_start();
在append.php,你要搶輸出緩衝區的內容,明確緩衝區並做t的任何其他處理他想要的內容(在本例中,我設置了默認頁面標題)。
<?php
if (!isset($page_title)) {
$page_title = 'Default Page Title';
}
$content = ob_get_contents();
ob_end_clean();
?>
<html>
<head>
<title><?php echo $page_title; ?></title>
</head>
<body>
<?php echo $content ?>
</body>
</html>
在此之後,您可以正常編寫每個頁面。這裏有一個例子的index.php
<?php
$page_title = "Index Page!";
?>
<h1>This is the <?php echo __FILE__; ?> page</h1>
...這確實中途有趣的東西一個例子other.php:
<?php
$page_title = "Secondary Page!";
?>
<h1>This is the <?php echo __FILE__; ?> page</h1>
<p>enjoy some PHP...</p>
<ol>
<?php for ($i = 1; $i <= 10; $i++) : ?>
<li><?php echo "$i $i $i"; ?></li>
<?php endfor ?>
</ol>
大功告成。你可以在這一點上增長一些,比如在prepend中初始化數據庫連接,但是在某些時候,你可能想要轉移到一個更抽象的系統,這個系統會打破固定的URL到路徑和文件的映射。
我喜歡這個。這很簡單,使用我能理解的PHP,並以我想要的方式工作。我的問題:有沒有辦法實現這一點,而不使用htaccess?另外...我假設append.php是「佈局」。這假設我總是想要使用這種佈局。有沒有辦法做到這一點與多個佈局?或者沒有佈局?我不介意URL的固定映射,但是這讓我想知道......這將與子目錄一起工作嗎? – Andrew 2009-06-05 07:58:56
你可以在你的PHP.ini而不是在htaccess中設置prepend和append文件。如果你想改變佈局,你可以用另一個間接級別來實現,並且每個頁面都定義一個`$ layout`變量和一個頁面標題,並且附加文件require()是你想要的特定佈局。只要你有正確設置前綴和附加文件的路徑(手冊中提到「文件被包含,就好像它是用require()函數調用的一樣,所以使用了include_path」),你應該對文件沒有問題在子目錄中。 – 2009-06-05 16:19:47
Limonade也可能是有用的......沒有嚴格的佈局。
我一直在使用Smarty的年齡。 成熟,積極維護並得到廣泛支持。
無論如何,你會發現這裏的模板引擎的整個範圍: http://en.wikipedia.org/wiki/Template_engine_(web)
如果單擊語言欄,你會很容易看到PHP什麼是可用的,並且發動機如何比較。
只是拋出另一個框架:CodeIgniter恕我直言很好,使用MVC方法,所以你會輸出文件作爲視圖,並說有一個小腳印。它也有一個template parser船上。
歡呼聲,
終於開始檢查europaphp.org。正是我想要的!看起來就像我喜歡使用Zend Framework一樣。 – Andrew 2009-06-19 10:12:10