2009-06-04 40 views
4

我正在尋找一個輕量級,基於PHP的佈局框架。就像Zend Framework如何使用佈局一樣,我想創建一個佈局模板並僅包含必要頁面的內容。輕量級,基於PHP,佈局框架...知道任何?

<html> 
<head> 
<title><?= $pageTitle ?></title> 
</head> 
<body> 
<?= $content ?> 
</body> 
</html> 

任何人都知道這是什麼?我會使用Zend Framework,但對於我想實現的目標來說太多了。

回答

2

我實際上即將在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 - 默認

+0

終於開始檢查europaphp.org。正是我想要的!看起來就像我喜歡使用Zend Framework一樣。 – Andrew 2009-06-19 10:12:10

33

我投票支持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()並作爲字符串返回。要輸出此字符串,只需輸入echoprint,或將其分配給要作爲內容傳遞給佈局的數組。如果你理解了這一點,那麼很容易就可以把我寫的東西寫出來,或者使用邏輯輸出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

+0

cool!謝謝你的幫助! – Andrew 2009-06-17 00:13:06

3

如果你想超輕量級,你可以使用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到路徑和文件的映射。

+0

我喜歡這個。這很簡單,使用我能理解的PHP,並以我想要的方式工作。我的問題:有沒有辦法實現這一點,而不使用htaccess?另外...我假設append.php是「佈局」。這假設我總是想要使用這種佈局。有沒有辦法做到這一點與多個佈局?或者沒有佈局?我不介意URL的固定映射,但是這讓我想知道......這將與子目錄一起工作嗎? – Andrew 2009-06-05 07:58:56

+0

你可以在你的PHP.ini而不是在htaccess中設置prepend和append文件。如果你想改變佈局,你可以用另一個間接級別來實現,並且每個頁面都定義一個`$ layout`變量和一個頁面標題,並且附加文件require()是你想要的特定佈局。只要你有正確設置前綴和附加文件的路徑(手冊中提到「文件被包含,就好像它是用require()函數調用的一樣,所以使用了include_path」),你應該對文件沒有問題在子目錄中。 – 2009-06-05 16:19:47

1

Limonade也可能是有用的......沒有嚴格的佈局。

1

我一直在使用Smarty的年齡。 成熟,積極維護並得到廣泛支持。

無論如何,你會發現這裏的模板引擎的整個範圍: http://en.wikipedia.org/wiki/Template_engine_(web)

如果單擊語言欄,你會很容易看到PHP什麼是可用的,並且發動機如何比較。

1

只是拋出另一個框架:CodeIgniter恕我直言很好,使用MVC方法,所以你會輸出文件作爲視圖,並說有一個小腳印。它也有一個template parser船上。

歡呼聲,