Silverstripe - 是否可以在include语句中使用变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Silverstripe - 是否可以在include语句中使用变量?相关的知识,希望对你有一定的参考价值。
我正在使用silverstripe模板,我想循环遍历当前页面的子页面,并根据该子页面的类型动态输入“include”控件中的模板名称。
这是我到目前为止的代码:
<div id="tertiary-content">
<% if $Children %>
<% loop $Children %>
<% include $ClassName %>
<% end_loop %>
<% end_if %>
</div>
(我的模板中有ss文件/包含与$ ClassName变量相关的目录)
这是我得到的错误:
错误是:遇到未知的打开块“循环”。也许你错过了结束标签或错误拼写了?
我在silverstripe论坛上发现了这篇文章,这让我觉得它应该有用:http://www.silverstripe.org/archive/show/1023
实际上是否可以在include控件中包含变量?
答案
做了一些测试,无法让<% include $ClassName %>
工作。但你可以通过以下方式解决这个问题:
<% if $ClassName = 'SomeClass' %>
<% include SomeClass %>
<% else_if $ClassName = 'SomeOtherClass' %>
<% include SomeOtherClass %>
<% else %>
<% include DefaultClass %>
<% end_if %>
不是那么漂亮,但做的工作。
另一答案
您可以在Page类中编写一个函数,该函数根据当前的类名加载ss模板。在您的Page.php文件中。
class Page extends SiteTree {
/**
* Returns a template based on the current ClassName
* @return {mixed} template to be rendered
**/
public function getIncludeTemplate(){
return $this->renderWith($this->ClassName);
}
}
然后在你的模板中
<div id="tertiary-content">
<% if $Children %>
<% loop $Children %>
$IncludeTemplate
<% end_loop %>
<% end_if %>
</div>
另一答案
你可以直接从模板中调用renderWith
,例如:
<div id="tertiary-content">
<% if $Children %>
<% loop $Children %>
$renderWith($ClassName)
<% end_loop %>
<% end_if %>
</div>
以上是关于Silverstripe - 是否可以在include语句中使用变量?的主要内容,如果未能解决你的问题,请参考以下文章
SilverStripe 功能测试是不是在发出 post 请求后将数据保存在会话中
如何在 SilverStripe 4 CMS 中添加自定义样式
Silverstripe Fluent 基于域名的语言环境选择