首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Latte -具有相同名称的多个块

PHP Latte -具有相同名称的多个块
EN

Stack Overflow用户
提问于 2021-07-03 22:41:10
回答 1查看 102关注 0票数 1

我是新的拿铁模板引擎,并摆弄了一些日子以来。我发现了许多好的和有用的东西,让我的项目变得更容易和更干净。但有一件事我没有发现,也没有错过如何处理它的想法。

让我们假设我的网站有这样一个基本的布局模板:

代码语言:javascript
复制
<header><h1>{$title}</h1></header>
<nav n:inner-foreach="$navigation as $link">
<a href="{$link->url}" n:class="$link->active ? active" n:attr="data-icon: $link->icon">{$link->name}</a>
</nav>
<aside>{include aside}</aside>
<aside>{include aside}</aside>
<aside>{include aside}</aside>
<content>{include content}<content>
<footer>{include footer}</footer>

内容在每个站点的另一个模板中处理。每一个看起来都是这样的:

代码语言:javascript
复制
{layout 'layout.tpl'}
{$navigation[3]->active=true}
{$title="this page title"}

{block content}
    <p>here comes the content</p>
{/block}

{block aside}
    <p>here is f.e. a sidebar</p>
{/block}

{block aside}
    <p>this is some adverticement</p>
{/block}

现在我的问题是:如何在我的模板中使用一个或多个被定义为"block“的"aside”块。最好的解决方案应该是这样的:“阻塞aside[]”,然后我在主模板中以某种方式使用一个循环来处理它。有没有什么有用的方法呢?我不想在像导航这样的变量中使用它,因为内容是在模板中定义的。

想法和问候Makka的thx

EN

回答 1

Stack Overflow用户

发布于 2021-07-04 20:25:58

嗯,你可以这样做,滥用dynamic block names

代码语言:javascript
复制
{var $maxAside = 10}
{for $i = 0; $i < $maxAside; $i++}
  {ifset aside-$i}
    {include "aside-$i"}
  {else}
    {breakIf true}
  {/ifset}
{/for}

并定义像{block "aside-{++$i}"}…{/block}这样的块,但我不建议这样做,因为它只会增加毫无意义的复杂性。

或者,大多数aside都是相同的,然后您可以只对它们使用单个aside块:

代码语言:javascript
复制
{block aside}
  <section>
    <p>here is f.e. a sidebar</p>
  </section>

  <section>
    <p>this is some adverticement</p>
  </section>
{/block}

或者,您可能希望以某种方式区分它们(例如,以不同的方式设置它们的样式),然后为它们分配类,这样您就可以使用不同的块:

代码语言:javascript
复制
<aside class="sidebar" n:ifset="sidebar">{include sidebar}</aside>
<aside class="advertisement" n:ifset="advertisement">{include advertisement}</aside>

除非您使用:nth-child CSS选择器匹配它们。但这是脆弱的,因为您现在需要将顺序与CSS中定义的顺序相匹配。

只有当你有一个页面层次结构,其中页面继承自父层中的页面时,这个问题才开始变得有趣。但是,使用template inheritance仍然更好。

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

https://stackoverflow.com/questions/68237232

复制
相关文章

相似问题

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