Php Silverstripe 3.2可重用块
我创建了一个新的页面类型,需要一些东西来分解内容。我已经创建了一个strapline块,我想在页面上的3个位置使用它,但是我只想创建strapline块的1个版本,并通过动态数据驱动该内容 我在Straplines.php中有以下内容Php Silverstripe 3.2可重用块,php,silverstripe,Php,Silverstripe,我创建了一个新的页面类型,需要一些东西来分解内容。我已经创建了一个strapline块,我想在页面上的3个位置使用它,但是我只想创建strapline块的1个版本,并通过动态数据驱动该内容 我在Straplines.php中有以下内容 class Straplines extends DataObject{ private static $db = array( 'Title'=>'Text', 'Content'=>'HTMLText',
class Straplines extends DataObject{
private static $db = array(
'Title'=>'Text',
'Content'=>'HTMLText',
'SortOrder'=>'Int'
);
private static $has_one = array(
'Parent'=>'Page'
);
private static $default_sort = 'SortOrder';
public function getCMSFields(){
$fields = parent::getCMSFields();
$fields->addFieldToTab("Root.Main", new HtmlEditorField('Content','Content'));
$fields->addFieldToTab("Root.Main", new TextField('Title','Title'));
return $fields;
}
}
然后我将cms字段添加到HomePage.php。我可以在那里添加束带,没有问题,它们都会出现。
然后在HomePage.ss中,我有以下内容
<% include PricesBlock %>
<% include TourStraplineBlock %>
<% include QuickFacts %>
<% include TourStraplineBlock %>
但是,我无法在TourStraplineBlock中找到每一个单独的内容。当然,参数化include还是不必创建多个模板都是有必要的。我对Silverstripe开发非常陌生,我发现创建可重用内容是一个艰难的过程
编辑:这是strapline.ss模板,用于处理显示
<div class="strapline">
<% loop Straplines %>
$Content
<% end_loop%>
</div>
$Content
正如你可能猜到的,如果我把这个放两次,它只会显示所有的带子。我想做一些像
<% include Strapline?id=1 %>
然后在Strapline.ss中解码并从那里开始
编辑抱歉是3.2而不是3.0。我假设它们非常相似。您可以在page中创建一个函数,该函数将参数作为文本,并返回所需的strapline。e、 g
<% $currentStrapline(1) %>
就像前面提到的Firesphere一样,您可以创建一个可以在模板中调用的函数,并将对象ID传递给它 将此函数放入您的Page_Controller类中,或者如果您希望仅从主页访问此函数,请将其放入您的homepage_Controller类中
public function StraplineByID($id) {
$strapline = Straplines::get()->byID($id);
if($strapline) {
return $strapline;
}
}
在模板中,您现在可以使用:
<% if $StraplineByID(1) %>
<% with $StraplineByID(1) %>
$Title, $Content, $WhatEver or an include
<% else %>
Can't find a strapline with this ID
<% end_with %>
<% end_if %>
在你的模板中
<% if $StraplineByName(prices) %>
<% with $StraplineByName(prices) %>
$Title, $Content, $WhatEver or an Include
<% else %>
Can't find a strapline with this Name
<% end_with %>
<% end_if %>
$Title、$Content、$WhatEver或Include
找不到具有此名称的束带
代码未经测试,但应该可以工作;) 是的,有一种方法可以将include参数化,而您几乎做到了:
<% include Strapline MyVar=$someVar, MyVar2=$someVar2 %>
private static$db
听起来绝对不像Silverstripe 3.0,更像是3.1或3.2。你使用的是什么版本的SS?你能展示更多的HomePage.php代码和你想要修改的include模板吗?根据@wmkThanks的要求做了一些编辑以获得你的答案。我选择了另一个,因为我可以更准确地了解正在发生的事情,而且我对silverstripe非常陌生。
<% if $StraplineByName(prices) %>
<% with $StraplineByName(prices) %>
$Title, $Content, $WhatEver or an Include
<% else %>
Can't find a strapline with this Name
<% end_with %>
<% end_if %>
<% include Strapline MyVar=$someVar, MyVar2=$someVar2 %>
<% if $MyVar == 1 %>
Say One
<% else_if $MyVar2 == 2 %>
Say Two
<% end_if %>