PHP模板 - 使用PHP

Dav*_*vid 20 php templates

您见过的最优雅的模板(最好是纯PHP!)解决方案是什么?

具体来说我对处理感兴趣:

  1. 在重复块中检测它是第一个还是最后一个元素
  2. 轻松处理奇数/偶数情况,如斑马条纹表或类似情况
  3. 其他模数逻辑,你每隔一段时间做一些事情.

我正在寻找一些让这不那么痛苦的东西:

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


Cru*_*han 8

微小但强壮

www.tinybutstrong.com

它没有在页面中嵌入另一种宏语言的巧妙错误,但它确实允许您处理我曾经抛出的每个实际的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)

  • +1肯定.令人难以置信的轻量级! (2认同)

gah*_*ooa 6

关于循环的一个小帮助:

<? $b=false; foreach($MyList as $name) { ?>
   <li class="row<?= $b=!$b ?>"><?= htmlspecialchars($name); ?></li>
<? } ?>
Run Code Online (Sandbox Code Playgroud)

通过说$b=!$b,它会自动在真与假之间交替.由于假打印为"",和真正的打印为"1",然后通过定义CSS类rowrow1,你可以得到你改变行没有任何麻烦.

考虑使用:first-childcss以不同方式设置第一个样式.


fij*_*ter 5

它不是纯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)

  • 我知道它很受欢迎,但我认为Smarty是有史以来最糟糕的公共图书馆之一. (10认同)
  • 我在这些评论中没有足够的空间来写一个真正的答案,但主要是因为它是一个完整的其他语言,并且有很多问题.可维护性,性能,可转移性等.这不是我同意的开发方法. (7认同)
  • 为什么它是最糟糕的公共图书馆之一? (3认同)
  • 那个例子看起来非常可怕!我会接受:"<?php ul($ users);?>"任何一天. (2认同)
  • -1同意了.Smarty是邪恶的.它只是强迫你在同一页面*中使用*two*scrippting languages*.有更好的方法 (2认同)

Pat*_*ins 0

我一直使用 Modulo,就像您在示例中所做的那样。