2016-08-10 75 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