PHP - 使用PHP简化冗余HTML格式

时间:2012-01-25 03:30:59

标签: php html arrays oop

我发现自己经常重复HTML代码来格式化项目,例如列表,表格和其他重复保存格式的区域(即:员工照片)。我知道必须有一些方法来简化使用重复格式化的部分的HTML输出,但我不确定数组是否适用或者是否有更好的方法我还没有发现。

例如,我最近开发了Macon Mall的商店列表目录。这是代码的一部分:

<ul>
   <li>Belk<br /><span class="both">Upper &amp; Lower Level</span><br />(478) 477-2355</li>
   <li>JCPenney<br /><span class="both">Upper &amp; Lower Level</span><br />(478) 477-8400</li>
   <li>Macy's<br /><span class="both">Upper &amp; Lower Level</span><br />(478) 471-3847</li>
   <li>Sears<br /><span class="both">Upper &amp; Lower Level</span><br />(478) 471-5555</li>
</ul>

如何利用PHP的强大功能简化输入过程?

我希望我已经清楚了。如果没有,请随时提问。谢谢你的帮助,全部!

3 个答案:

答案 0 :(得分:2)

<?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>

答案 1 :(得分:0)

听起来你在限制范围内正在尽你所能。 CMS可能需要探索。

答案 2 :(得分:0)

如果你想冒险尝试新的东西,我建议尝试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$open\n$inner\n$close\n";};

}

现在这段代码:

//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');

//现在这是你的&#34;关闭&#34; HTML!

echo $ul(
   $li("belk".$br.$span("Upper &amp; Lower Level").$br."(478) 477-2355").
   $li("JCPenney".$br.$span("Upper &amp; Lower Level").$br."(478) 477-2355").
   $li("Macys".$br.$span("Upper &amp; Lower Level").$br."(478) 477-2355").
   $li("Sears".$br.$span("Upper &amp; Lower Level").$br."(478) 477-2355")
);

首先,您注意到没有结束标签!这是因为封闭功能像发髻一样,用两半关闭你的汉堡!注意闭包函数

  

H()

返回一个函数!闭包获取环境的快照(在这种情况下是带有属性的开始和结束标记),当它再次被调用时,它会记住将它们放在正确的位置。

谁说我们可以到此为止!你可以嵌套你想要的所有HTML,一切都正确!使用这种技术,您永远不必使用原始HTML来弄脏您的视图。没有什么能阻止你创建接收数组的函数并直接在每个元素周围映射HTML。