对于wordpress短代码,我必须返回一个包含HTML标记的字符串,我想知道构建/存储它的最佳方法是什么。
我的第一次尝试就是这样一个难以理解的连接部分:
$output = '<div ';
if( $atts['ID'] ) {
$output .= 'id="'.$atts['ID'].'"';
}
$output .= ' class="responsive-map icon-'.$atts['icon'].'"';
感谢sprintf()
我可以将其修剪成更易读的形状:
$format = '
<!--[if lt IE 9]>
<div %1$s class="ie responsive-map %2$s" %3$s>
<![endif]-->
<!--[if !(lt IE 9)]><!-->
<div %1$s class="responsive-map %2$s" %3$s>
<!--<![endif]-->
<iframe src="%4$s"></iframe>
</div>
';
$output = sprintf( $format, $id, $icon, $height, $content );
我想知道是否有更好的方法可以做到这一点,特别是如果标记的复杂性和可变部分的数量增加的话。通常我只是逃避HTML,但在这种情况下,这不是一个选项,因为wordpress总是将转义的HTML放在帖子的顶部而不是预期的位置。
答案 0 :(得分:0)
首先,在模板中存储HTML的更好方法可能是使用模板引擎,使用模板文件。
虽然您可以使用双引号多线字符串,但我会使用here document。您可以插入变量,例如双引号字符串:
$format = <<<EOF
<!--[if lt IE 9]>
<div $variable1 class="ie responsive-map $variable2" %3$s>
<![endif]-->
<!--[if !(lt IE 9)]><!-->
<div $variable3 class="responsive-map $variable4" $variable5>
<!--<![endif]-->
<iframe src="$variable6"></iframe>
</div>
EOF
与多行双引号字符串相比,它提高了可读性,将尝试通过示例解释:
$format = "<!--[if lt IE 9]> <--- breaks indention
<div $variable1 class=\"ie responsive-map $variable2\" %3$s> <-- need to escape "
<![endif]-->
<!--[if !(lt IE 9)]><!-->
<div $variable3 class=\"responsive-map $variable4\" $variable5>
<!--<![endif]-->
<iframe src=\"$variable6\"></iframe>
</div>";
答案 1 :(得分:0)
有很多方法可以通过PHP实现您的目标。如果可读性对您来说是最重要的,那么只需使用HEREDOC或NOWDOC。
<?php
$output = <<<HTML
<!--[if lt IE 9]>
<div {$var} class="ie responsive-map {$var}" {$var}>
<![endif]-->
<!--[if !(lt IE 9)]><!-->
<div {$var} class="responsive-map {$var}" {$var}>
<!--<![endif]-->
<iframe src="{$var}"></iframe>
</div>
HTML;
答案 2 :(得分:0)
我希望您定位MVC pattern的观看部分。在这种情况下,您可以像这样使用它:
<!--[if lt IE 9]>
<div <?= $format ?> class="ie responsive-map <?= $id ?>" <?= $icon ?>>
<![endif]-->
<!--[if !(lt IE 9)]><!-->
<div <?= $format ?> class="responsive-map <?= $id ?>" <?= $icon ?>>
<!--<![endif]-->
<iframe src="<?= $height ?>"></iframe>
</div>
将此源保存在我们的控制器和包含实际逻辑和数据的模型的单独文件中非常重要。
您可以在此处找到介绍:http://php-html.net/tutorials/model-view-controller-in-php/