你好,
我正在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…