2011-03-23 51 views
0

在這個主要動機是,我很累或使用php標籤來寫非常醜陋的PHP視圖。考慮這樣的方法:面向HTML生成的PHP5.3面向對象建模,一種可能性或性能瓶頸?

<?php 
<ul> 
    <?php echo foreach($products as $product): ?> 
    <li><?php echo $product->getName()?><li> 
</ul> 

這是微不足道的MVC的,享有基本的做法,但我厭倦了這一點,所以我用phpQuery代替:

<?php 
$ul = pq('<ul />'); 

foreach($products as $product) { 
    $ul->append(pq('<li />') 
     ->html($product->getName()) 
    ); 
} 

echo $ul; 

這是乾淨多了。不幸的是,phpQuery在開發中似乎並不活躍。問題是,phpQuery是以過程方式編程的,並且很難理解和維護,並且包含一些在大多數DOM操作情況下無用的錯誤。我正在考慮使用Zend Framework的組件Zend_Dom_Query,使用與phpQuery相同的方法,基於jQuery編寫DOM寫作的OO方法:與jQuery相同的接口。

對PHP HTML發電機淨某些搜索後,我似乎無法找到太多,已經做了一部分,我的問題是,使用OO用PHP生成HTML性能瓶頸,因爲所有的靜態HTML會被服務器端生成?

我知道有HAML的方法,但我喜歡DOM操作的想法,以便可以在腳本執行期間的任何時間的任何時候注入html。在服務器端DOM操作導致查看腳本的傳承是這樣的:

//a parent index.phtml 
$container = pq('<div />') 
    ->addClass('.container') 
    ->html($this->_("Hello World!")); 

$this->setRenderReturn($container); 

//a child index.phtml 
$container = $this->renderParent(__FILE__); //retrieves the parent just like the conventional parent:: in php scripts 
$container->addClass('anotherClass'); 

$this->setRenderReturn($container); 

此外,如果我錯過了一個PHP庫,做到了這一點,我會很高興很感激,如果有人可以點我給它。

回答

2

在直接回答你的問題......

使用OO與PHP生成HTML性能瓶頸,因爲所有的靜態HTML將服務器端生成?

是的。

您應該看看Twig,特別是Symfony 2中添加的擴展。它支持模板繼承以及用於覆蓋/插入標記的命名部分。

+0

我一直在看它,它似乎非常強大,在我有任何使用情況。我不知道,你是否可以輕鬆地使用條件操作元素?下面是一個使用phpQuery的例子:http://pastebin.com/SFT4rMyJ並查看條件,在放置html之前,我可以動態地將一個類添加到未完成的元素。什麼是小枝相當於? - 最好的祝福 – 2011-03-25 16:43:56