2010-06-18 137 views
2

我有一些HTML代碼部分可以通過頁面重複很多次。我把這個html代碼放在一個函數裏,這樣很容易維護。它完美的作品。不過,我覺得這可能不是很好的做法。如何處理重複大量的HTML代碼

function drawTable($item){ 
?> 
    HTML CODE HERE 
<?php 
} 

我也碰到這個問題,當我想返回使用JSON數據下面就無法正常工作,這將是NULL:

$response['table'] = drawTable($item);  
return json_encode($response); 

什麼是正確的方式來處理HTML代碼重複了很多?

感謝

+0

對於JSON,函數需要返回的數據,你不能返回迴應聲明,或簡單顯示HTML的東西。 – 2010-06-18 23:21:45

+0

*(參考)*參見[POEAA中的Web Presentation Patterns]部分(http://martinfowler.com/eaaCatalog/index.html) – Gordon 2010-06-19 11:00:32

回答

1
function drawTable($item) { return '<p>something</p>'; } 

function yourOtherFunction() { 
$response['table'] = drawTable($item);  
return json_encode($response); 
} 
1

使用此函數定義

function drawTable($item){ 
    return 'HTML CODE HERE'; 
} 

print drawTable($item); 

叫這也會爲你的JSON返回值來運作。

+0

嗨,謝謝。但是,我不想把html代碼放在引號裏面,因爲它有相當長的html塊,並且很難發現錯誤,它可能涉及到處理一些字符轉義和最終導致混亂的問題。 m儘量讓代碼儘可能乾淨 – 2010-06-18 23:34:22

3

您可能希望考慮使用模板,而不是使用醜陋的heredoc或HTML內嵌的PHP函數,這些函數僅僅是不可維護的,並且不是IDE友好的。

What is the best way to include a php file as a template?

如果你有重複的部分,只需將模板多次使用循環加載。

雖然模板有助於D.R.Y.,但主要關注點是將表示與邏輯分開。在PHP函數中嵌入HTML不會。更何況,你不必逃避任何引號或打破縮進/格式化。

$data = array('title' => 'My Page', 'text' => 'My Paragraph'); 

$Template = new Template(); 
$Template->render('/path/to/file.php', $data); 

模板頁可能是這樣的:使用模板時

示例語法

<h1><?php echo $title; ?></h1> 

<p><?php echo $text; ?></p> 
+0

聽起來很像一個框架。考慮一個框架,它爲你做所有管道代碼 – ggfan 2010-06-19 03:15:14

+0

非常感謝!我認爲這樣做現在可以完成這項工作。我不知道extract()函數。是的,一旦我完成了這個項目,我會考慮學習CakePHP或者Zend Framework。 – 2010-06-19 09:30:53

+0

我發現這個問題的問題是,我仍然無法返回該HTML代碼作爲JSON。我想過使用像DomDocumentFragment這樣的東西將html加載到一個變量中,但是我不知道如何使用這樣的extract()... – 2010-06-19 23:05:52