我发现自己经常重复HTML代码来格式化项目,如列表、表格和其他重复保存格式的区域(即:员工照片)。我知道必须有一些方法来简化使用重复格式的部分的HTML输出,但我不确定Array是否适用,或者是否有我还没有发现的更好的方法。
例如,我最近为Macon Mall开发了一个商店列表目录。这是代码的一部分:
<ul>
<li>Belk<br /><span class="both">Upper & Lower Level</span><br />(478) 477-2355</li>
<li>JCPenney<br /><span class="both">Upper & Lower Level</span><br />(478) 477-8400</li>
<li>Macy's<br /><span class="both">Upper & Lower Level</span><br />(478) 471-3847</li>
<li>Sears<br /><span class="both">Upper & Lower Level</span><br />(478) 471-5555</li>
</ul>
如何利用PHP的强大功能简化输入过程?
我希望我已经说清楚了。如果没有,请随意提问。谢谢大家的帮助!
<?php
$stores = array(
array(
'name' => 'Belk',
'level' => 'Upper & Lower Level',
'number' => '(478) 477-2355'
),
array(
'name' => 'JCPenney',
'level' => 'Upper & Lower Level',
'number' => '(478) 477-8400'
),
array(
'name' => 'Macy's',
'level' => 'Upper & Lower Level',
'number' => '(478) 471-3847'
),
array(
'name' => 'Sears',
'level' => 'Upper & Lower Level',
'number' => '(478) 471-5555'
)
);
?>
<ul>
<?php foreach( $stores as $store): ?>
<li><?= $store['name']?><br /><span class="both"><?= htmlspecialchars( $store['level']) ?></span><br /><?= $store['number']?></li>
<?php endforeach; ?>
</ul>
这听起来像是在你的限制范围内尽你所能。CMS可能会探索一些东西。
如果你想尝试一些新的东西,我建议你尝试一下PHP的闭包功能。您将从示例中看到,从代码中完全删除HTML是多么容易。我打算围绕这个(表单等)开发一个库,但核心概念非常简单。从这个功能开始(现在不用担心它是如何工作的):
function h($code , $id="", $class=""){
if ($id !== "") $id = " id = "$id"" ;
$class = ($class !== "")? " class ="$class"":"";
$open = "<$code$id$class>";
$cls = trim(substr($code,0,strpos($code.' ',' ')));
$close = "</$cls>";
return function ($inner = "") use ($open, $close){
return "n$openn$innern$closen";};
}
现在这个代码:
//Create two simple tags (Why not an entire page layout!)
$tags = array('ul','li');
foreach ($tags as $element)
$$element = h( $element);
//Create the span tag with its class...
$span=h("span", "", "both");
//Creating an optional div with an id
$div = h("div", "test");
//Constant linebreak
$br = "<br />";
//more optional tags
$bold = h('strong');
$italic = h('i');
//现在这是您的"关闭"HTML!
echo $ul(
$li("belk".$br.$span("Upper & Lower Level").$br."(478) 477-2355").
$li("JCPenney".$br.$span("Upper & Lower Level").$br."(478) 477-2355").
$li("Macys".$br.$span("Upper & Lower Level").$br."(478) 477-2355").
$li("Sears".$br.$span("Upper & Lower Level").$br."(478) 477-2355")
);
首先,您注意到没有结束标记!这是因为闭合功能就像一个小面包,用两半闭合汉堡!注意关闭功能
h()
返回一个函数!闭包获取环境的快照(在本例中,打开和关闭标记及其属性),当再次调用时,它会记住将它们放在正确的位置。
谁说我们可以到此为止!你可以嵌套所有你想要的HTML,一切都会正确!有了这种技术,您就不必用原始HTML弄脏视图。没有什么可以阻止您创建接收数组并直接围绕每个元素映射HTML的函数。