您见过的最优雅的模板(最好是纯PHP!)解决方案是什么?
具体来说我对处理感兴趣:
我正在寻找一些让这不那么痛苦的东西:
<?php
$persons = array('John', 'Jack', 'Jill', 'Jason');
?>
<?php $i = 0; ?>
<?php if (isset($persons)): ?>
<ul>
<?php foreach ($persons as $name): ?>
<li class="<?= ($i++ % 2 === 0) ? 'odd' : 'even' ?>"><?= $name ?></li>
<?php endforeach ?>
</ul>
<?php endif ?>
Run Code Online (Sandbox Code Playgroud)
是否真的需要上面的混乱来创建这样的东西?
<ul>
<li class="odd">John</li>
<li class="even">Jack</li>
<li class="odd">Jill</li>
<li class="even">Jason</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
只有我发现上面几乎可怕吗?
所有那些启动和关闭php标签让我感到畏缩.
Ran*_*ndy 12
您不需要多次打开标签.如果你多次做同样的事情,你也可以用它来制作一个函数:
<?php
function makeul($items, $classes) {
$c = count($classes);
$out = "";
if (isset($items) && count($items) > 0) {
$out = "<ul>\n";
foreach ($items as $item) {
$out .= "\t<li class=\"" . $classes[$i++%$c] . "\">$item</li>\n";
}
$out .= "</ul>\n";
}
return $out;
}
?>
other page content
<?php
$persons = array('John', 'Jack', 'Jill', 'Jason');
$classes = array('odd', 'even');
print makeul($persons, $classes);
?>
Run Code Online (Sandbox Code Playgroud)
此外,如果你不介意使用Javascript,Jquery可以很容易地完成mod 2的操作(例如,对于斑马条带化表格):
$("tr:odd").addClass("odd");
$("tr:even").addClass("even");
Run Code Online (Sandbox Code Playgroud)
微小但强壮
它没有在页面中嵌入另一种宏语言的巧妙错误,但它确实允许您处理我曾经抛出的每个实际的Web显示问题.特别地,上述奇数/偶数构造是轻而易举的.对于类似于从数据库表中选择代码的内容
在PHP文件中
$TBS->MergeBlock('blk1',$sqlconnect, "SELECT name from people ");
Run Code Online (Sandbox Code Playgroud)
并在HTML文件中
<ul>
<li class="odd">[blk.name;block=ul]</li>
<li class="even">[blk.name;block=ul]</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
就是这样.请注意,HTML完全兼容Dreamweaver.此外,如果我想制作三种线型的备用,我需要做的就是添加额外的线,可能有不同的类,所以
<ul>
<li class="linestyle1">[blk.name;block=ul]</li>
<li class="linestyle2">[blk.name;block=ul]</li>
<li class="linestyle3">[blk.name;block=ul]</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
关于循环的一个小帮助:
<? $b=false; foreach($MyList as $name) { ?>
<li class="row<?= $b=!$b ?>"><?= htmlspecialchars($name); ?></li>
<? } ?>
Run Code Online (Sandbox Code Playgroud)
通过说$b=!$b
,它会自动在真与假之间交替.由于假打印为"",和真正的打印为"1",然后通过定义CSS类row
和row1
,你可以得到你改变行没有任何麻烦.
考虑使用:first-child
css以不同方式设置第一个样式.
它不是纯PHP(然后是模板语法),但它确实很好用; Smarty.
对于循环,你可以做:
<ul>
{foreach from=$var name=loop item=test}
{if $smarty.foreach.loop.first}<li>This is the first item</li>{/if}
<li class="{cycle values="odd,even"}">{$var.name}</li>
{if $smarty.foreach.loop.last}<li>This was the last item</li>{/if}
{/foreach}
</ul>
Run Code Online (Sandbox Code Playgroud)