PHP模板-使用PHP
您见过的最优雅的模板(最好是纯PHP)解决方案是什么 具体而言,我感兴趣的是处理:PHP模板-使用PHP,php,templates,Php,Templates,您见过的最优雅的模板(最好是纯PHP)解决方案是什么 具体而言,我感兴趣的是处理: 在重复块中检测它是第一个还是最后一个元素 易于处理奇数/偶数情况,如斑马条纹桌子或类似物品 其他的模逻辑,你每次都会做一些事情 我正在寻找一种能减轻痛苦的方法: <?php $persons = array('John', 'Jack', 'Jill', 'Jason'); ?> <?php $i = 0; ?> <?php if (isset($persons)): ?>
<?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 ?>
我一直使用模,就像你在例子中所做的那样。很小但很强
它不会犯在页面中嵌入另一种宏语言的聪明错误,但它允许您处理我曾经抛出的每一个实际的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>
- [blk.name;block=ul]
- [blk.name;block=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>
- [blk.name;block=ul]
- [blk.name;block=ul]
- [blk.name;block=ul]
如果让您感到不安的是开始和结束标记,请编写一个函数来创建html字符串,然后让它返回。至少它会为您节省一些标记。它不是纯PHP(当时的模板语法),但它确实很好用
对于循环,您可以执行以下操作:
<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>
{foreach from=$var name=loop item=test}
{if$smarty.foreach.loop.first}- 这是第一项
{/if}
- {$var.name}
{if$smarty.foreach.loop.last}- 这是最后一项
{/if}
{/foreach}
我过去用过。它很结实。正如你可能从网站上看到的;它有相当大的用户群,并定期更新
它也是用纯PHP编写的。您考虑过吗?。它(或类似的东西)的一个主要好处是,您可以获得可以通过验证的模板。大多数php模板引擎似乎忽略了这一点。您不需要多次打开标记。如果您多次执行相同的操作,也可以从中生成函数:
<?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);
?>
是一个轻量级的纯PHP模板引擎。版本2有一个类似于前面提到的Smarty的插件。我在版本3中找不到对同一插件的引用,但我相信您可以相当轻松地编写它。我使用模板,因为它是用100%实际HTML编写的,带有占位符数据,因此它甚至可以在网页设计师的所见即所得编辑器中工作。这很容易理解
这是我想要的。请原谅标记,我是新来的,四个空格块对我来说不合适(列表是一个列表,而不是标记)
PHP代码:
$tal=新PHPTAL;
$tal->setTemplate('people.htm')
->集合('people',数组('John','Jack','Jill','Jason');
echo$tal->execute();
模板:
约翰·多伊
输出:
约翰杰克吉尔杰森
很明显,我不会为这一点创建模板,但我可以使用宏来创建模板,或者构建整个页面并包含该变量。但你明白了。由于简单(没有像smarty那样需要学习的新语法),使用HAML使我在模板和编程方面的速度提高了三倍。我已经是HAML的粉丝很长一段时间了,现在看来PHP爱好者已经有了HAML:请参阅关于循环的小帮助:
<? $b=false; foreach($MyList as $name) { ?>
<li class="row<?= $b=!$b ?>"><?= htmlspecialchars($name); ?></li>
<? } ?>
你的做法正好相反。您的第一项现在称为偶数,而不是奇数。使用+++$i
我也有同样的问题。但我认为你最初的解决方案是最整洁的。那我就这么说。怎么样?唯一有标准机构支持的模板系统。在编程语言中也是如此。学一次,到处用 我刚才用PHP创建了一个简单的模板系统来解决这个问题:
它需要一个多维数组,并且需要向HMTL添加一些额外的标记来创建组合模板
它并没有Smarty和其他一些解决方案那个么复杂(尽管功能强大),但在很多时候都以简单取胜。菜单创建的演示:
<p>Main Menu</p>
<ul>
{block:menu_items}
<li><a href="{var:link}">{var:name}</a></li>
{/block:menu_items}
</ul>
将创建菜单
<p>Main Menu</p>
<ul>
<li><a href="home.htm">Home</a></li>
<li><a href="about.htm">About Us</a></li>
<li><a href="portfolio.htm">Portfolio</a></li>
<li><a href="contact.htm">Contact Us</a></li>
</ul>
主菜单
Symfony组件:模板化
(来源:)
Symfony打算转移到一个基于轻量级PHP模板系统的新模板系统上
首席开发商Fabien Povertier在这里解释了这一决定:
Symfony通常可以得到回复,以便就此类问题做出非常明智的决定,因此此框架应该是需要研究的东西
组件在这里:如果只是应用CSS样式,为什么不使用:nth of type(奇数)选择器呢
例如:
李:第n种类型(奇数){
背景#f2f6f8;
背景:线性梯度(顶部,#f2f6f8 0%,#e0eff9 100%);
}
在此处输入代码
<?php
define ('CRLF', "\r\n");
$persons = array('John', 'Jack', 'Jill', 'Jason');
$color = 'white'; // Init $color for striped list
$ho = '<UL>' . CRLF; // Start HTML Output variable
foreach ($persons as $name)
{
$ho .= ' <li class="' . $color . '">' . $name . '</li>' . CRLF;
$color = ($color == 'white') ? 'grey' : 'white'; // if white, make it grey else white
}
$ho .= '</ul>' . CRLF;
echo $ho;
?>
我想这一条已经被打死了。是的,这有点超出了对任何峡湾的渴望:)这条代码没有公认答案中的代码复杂;)我知道它很受欢迎,但我认为Smarty是有史以来最差的公共图书馆之一。为什么它是最差的公共图书馆之一?我在这些评论中没有足够的空间来写一个真正的答案,但基本上是因为它是一种完全不同的语言,而且有很多东西
<? $b=false; foreach($MyList as $name) { ?>
<li class="row<?= $b=!$b ?>"><?= htmlspecialchars($name); ?></li>
<? } ?>
<?= ($i++ % 2 === 0) ? 'odd' : 'even' ?>
<p>Main Menu</p>
<ul>
{block:menu_items}
<li><a href="{var:link}">{var:name}</a></li>
{/block:menu_items}
</ul>
array (
'menu_items' => array (
array (
'link' => 'home.htm',
'name' => 'Home'
),
array (
'link' => 'about.htm',
'name' => 'About Us'
),
array (
'link' => 'portfolio.htm',
'name' => 'Portfolio'
),
array (
'link' => 'contact.htm',
'name' => 'Contact Us'
)
)
);
<p>Main Menu</p>
<ul>
<li><a href="home.htm">Home</a></li>
<li><a href="about.htm">About Us</a></li>
<li><a href="portfolio.htm">Portfolio</a></li>
<li><a href="contact.htm">Contact Us</a></li>
</ul>
<?php
define ('CRLF', "\r\n");
$persons = array('John', 'Jack', 'Jill', 'Jason');
$color = 'white'; // Init $color for striped list
$ho = '<UL>' . CRLF; // Start HTML Output variable
foreach ($persons as $name)
{
$ho .= ' <li class="' . $color . '">' . $name . '</li>' . CRLF;
$color = ($color == 'white') ? 'grey' : 'white'; // if white, make it grey else white
}
$ho .= '</ul>' . CRLF;
echo $ho;
?>