2010-06-18 98 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