2016-08-10 74 views
3

我有PHP代码:SelectionGroup不增加额外的属性

SelectionGroup::create(
//... 
SelectionGroup_Item::create(/*...*/), 
SelectionGroup_Item::create(/*...*/), 
//... 
) 
->addExtraClass("some-extra-class") 
->setAttribute('ng-change','log(myModel)') 
->setAttribute('ng-model','myModel') 

和渲染HTML如下:

被添加
... 
<ul class="SelectionGroup field CompositeField selectiongroup some-extra-class nolabel"> 
    ... 
</ul> 
... 

我额外的类,为什么不是我的附加属性是添加?


SelectionGroupFieldList的一部分,其他Field小号允许属性被设置,并且SelectionGroup_ItemField S可具有它们的属性设置例如:

FieldList::create([ 
    HiddenField::create(...)->setAttribute("does","this work"), 
    SelectionGroup::create(
    //... 
    SelectionGroup_Item::create('name', 
     FieldGroup::create(null,[ 
     HiddenField::create(...)->setAttribute("maybe","it does") 
     ]) 
    ), 
    SelectionGroup_Item::create(...), 
    //... 
) 
    ->addExtraClass("some-extra-class") 
    ->setAttribute('ng-change','log(myModel)') 
    ->setAttribute('ng-model','myModel') 
]) 

呈现下面的HTML:

... 
<input type="hidden" ... does="this work" /> 
<ul class="SelectionGroup field CompositeField selectiongroup some-extra-class nolabel"> 
    ... 
    <input type="hidden" ... maybe="it does" /> 
    ... 
</ul> 
... 
+0

你在哪个版本的SS上? –

+0

@RobbieAverill 3.4(stable) – Isaac

回答

4

在SilverStripe 3.4中$AttributesHTML变量不是c采用SelectionGroup_Item使用的默认模板。

SelectionGroup_Item使用CompositeField模板(因为它extends CompositeField,它没有自己的框架模板集)。

在框架目前CompositeField模板不包括$AttributesHTML在开放标签:

<$Tag class="CompositeField $extraClass <% if ColumnCount %>multicolumn<% end_if %>"> 
    <% if $Tag == 'fieldset' && $Legend %> 
     <legend>$Legend</legend> 
    <% end_if %> 

    <% loop $FieldList %> 
     <% if $ColumnCount %> 
      <div class="column-{$ColumnCount} $FirstLast"> 
       $Field 
      </div> 
     <% else %> 
      $Field 
     <% end_if %> 
    <% end_loop %> 
</$Tag> 

我们可以创建自己的SelectionGroup_Item模板或CompositeField添加$AttributesHTML变量

要做到这一点,我们在我们的mysite/templates/includes目录中创建一个SelectionGroup_Item.ss文件。

的mysite /模板/包括/ SelectionGroup_Item.ss

<$Tag $AttributesHTML class="CompositeField $extraClass <% if ColumnCount %>multicolumn<% end_if %>"> 
    <% if $Tag == 'fieldset' && $Legend %> 
     <legend>$Legend</legend> 
    <% end_if %> 

    <% loop $FieldList %> 
     <% if $ColumnCount %> 
      <div class="column-{$ColumnCount} $FirstLast"> 
       $Field 
      </div> 
     <% else %> 
      $Field 
     <% end_if %> 
    <% end_loop %> 
</$Tag> 

创建这个模板,我们需要调用?flush=all在页面URL为系统来清除它的缓存,发现这个新的模板后。

+0

这真是一个耻辱,我认为这会默认实现......我想很难在任何地方实现一切 – Isaac