php - 如何在 Silverstripe 中循环模板

标签 php content-management-system silverstripe

你好

我正在 silverstripe 中创建一个单页网站,并且我创建了一些模板来代表我的不同网站部分。

我首先尝试使用“include”进行循环,所以:

<% if SlugItems %>
    <% loop SlugItems %>
        <% include $slug %>
    <% end_loop %>
<% end_if %>

但是从我在论坛上发现的内容来看,这不是这样做的方法,并且我收到了循环标记丢失的错误......所以我尝试创建一个函数

public function IncludeTemplate($template) {
    return $this->renderWith($template);
}

还有

<% if SlugItems %>
    <% loop SlugItems %>
        <% IncludeTemplate($Slug) %>
    <% end_loop %>
<% end_if %>

大惊喜...这是一样的,因为我读到 include 和 renderWith 都做同样的工作。 好吧,我真的不知道一个好的解决方案,如果我的模板名称像 X,例如,我想实现比包含某些模板更复杂的东西。

<% if $ClassName = 'SomeClass' %>
    <% include SomeClass %> 
<% else_if $ClassName = 'SomeOtherClass' %>
    <% include SomeOtherClass %>
<% else %>
    <% include DefaultClass %>
<% end_if %>

如果您知道好的解决方案,请写在这里!那会让我很高兴:D。

谢谢, 托马斯

最佳答案

听起来您想要做的事情类似于一个名为 Content Blocks 的模块.

在该模块中,它们具有相同的情况,即循环 block 并为该 block 插入正确的模板。

模块的Page.ss :

<% loop $ActiveBlocks %>$Me<% end_loop %>

$ActiveBlocks 指的是 function on a DataExtension by the same name .

这些都是您已经熟悉的内容。您可能不太了解的部分是模板中的 $Me 值。 It can be used to refer to the current object context the template is rendered with ,在你的情况下,这将是一个 Slug

这只是魔法的一部分,另一部分是 Block DataObject 上的一个函数,称为 forTemplate 。当使用 $Me 计算出如何呈现 DataObject 时,会调用此函数。

在这里,您可以执行经典的 renderWith 调用,如下所示:

return $this->renderWith(array($this->Template, 'Slug'));

有了这些知识,您就可以通过使 Slug DataObject 看起来像这样来实现您所追求的目标:

class Slug extends DataObject
{
    static $db = array();

    function getTemplate()
    {
        $template = 'yourTemplate';

        //Do your template logic checks in here to work out what you want to display

        return $template;
    }

    function forTemplate()
    {
        return $this->renderWith(array($this->Template, 'Slug'));
    }
}

你的模板看起来像这样:

<% if $Slugs %>
    <% loop $Slugs %>
        $Me
    <% end_loop %>
<% end_if %>

关于php - 如何在 Silverstripe 中循环模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26982308/

相关文章:

javascript - 使用 crontab 在服务器上运行 Javascript 文件

php - 此 MySQL 查询的语法可能有误

CakePHP Croogo CMS 如何从 URL 中删除 "page"和 "blog"?

php - WordPress 搜索框 + CMS 查询

ruby-on-rails - 使用 Ruby On Rails 制作 CMS

date - 银条 3.1.x : How can I show the calendar picker in a DatetimeField?

php - 如何在 silverstripe 3 模板中按日期对外部 API json 数据进行分组?

php - WHERE OR 子句中出现 mysql_error %s

javascript - Bootstrap Accordion 和 Silverstripe 的按钮类切换问题

php - 从源代码安装 php 时出错