如何在Silverstripe中遍历模板 - php

你好,

我正在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的模块。

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

模块的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:检查谁看过发送的电子邮件? - php

我正在向某些用户发送电子邮件,并且想知道是谁阅读的,这意味着如果有人阅读了该电子邮件,则将维护一个日志文件,其中包含该用户的电子邮件地址以及日期/时间/ IP。为此,我发送一个带有电子邮件(html模板)的javascript函数,当用户打开该电子邮件时,它仅会警告用户的电子邮件地址,例如:for($n=0; $n<sizeof($checkBox);…

使用jquery计算<id>中的总图像 - php

我有一个div,里面有一些图像,例如<img src= etc我想计算该div中的图像总数。我也想使用PHP将这些图像ID保存到mysql中...谢谢 参考方案 要计算它们,您可以执行以下操作:alert($('#myDiv img').length); 要将所有id捕获到数组中,可以执行以下操作:var ids = []; $(&…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

AngularJS和PHP数组数据 - php

我最近开始学习AngularJS。当我从数据库中的数组中获取数据时,我使用了foreach函数,所以我的代码是<ul> <?php foreach($Items as $Item):?> <li><?php echo $Item['name'];?></li> <?php …

使用XPath在PHP中提取XML - php

我有以下XML:<root> <level name="level1"> <!-- More children <level> --> </level> <level name="level2"> <!-- Some more childre…