首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP模板-使用PHP

PHP模板-使用PHP
EN

Stack Overflow用户
提问于 2008-10-02 18:28:10
回答 15查看 17.4K关注 0票数 20

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

具体来说,我感兴趣的是如何处理:

  1. 检测重复块中的第一个或最后一个元素
  2. 轻松处理奇数/偶数情况,如斑马条纹表,或类似的
  3. 其他模数逻辑,在这种情况下,您将在第n次执行某些操作。

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

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

创建下面这样的东西真的需要上面的混乱吗?

<ul>
    <li class="odd">John</li>
    <li class="even">Jack</li>
    <li class="odd">Jill</li>
    <li class="even">Jason</li>
</ul>

是不是只有我一个人觉得上面的这些近乎可怕?

所有那些php-tag的开头和结尾都让我感到畏缩。

EN

回答 15

Stack Overflow用户

发布于 2008-10-02 19:40:01

您不需要多次打开标记。如果你多次做同样的事情,你也可以用它做一个函数:

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

另外,如果你不介意使用Javascript,Jquery让mod 2的事情变得非常简单(例如,斑马在桌子上做条纹):

$("tr:odd").addClass("odd");
$("tr:even").addClass("even");
票数 12
EN

Stack Overflow用户

发布于 2008-10-02 18:32:12

微小但强大

www.tinybutstrong.com

它不会犯在页面中嵌入另一种宏语言的聪明错误,但它确实允许您处理我所遇到的每一个实际的web显示问题。特别是,上面的奇/偶结构是轻而易举的。对于您的代码从数据库表中选择之类的内容,

在PHP文件中

$TBS->MergeBlock('blk1',$sqlconnect, "SELECT name from people ");

在HTML文件中

<ul>
    <li class="odd">[blk.name;block=ul]</li>
    <li class="even">[blk.name;block=ul]</li>
</ul>

就是这样。请注意,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>
票数 8
EN

Stack Overflow用户

发布于 2009-06-17 00:31:56

关于循环的一个小帮助:

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

通过说$b=!$b,它会自动在true和false之间切换。由于false打印为"",而true打印为"1",因此通过定义css类rowrow1,您可以毫不费力地获得更改的行。

考虑使用:first-child css以不同的方式设置第一个样式。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/163834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档