我正在开发DropdownField的子类,我正在尝试将它与相应的DrodownFieldData.ss模板耦合而没有成功。
/simple/templates
,/simple/templates/forms
,/simple/templates/Includes
我称之为:
return $this->customise($properties)->renderWith('DropdownFieldData');
你还有其他想法可以尝试吗?
这是代码。它基本上是DropdownField的副本,撇去了Field方法。
<?php
class DropdownFieldData extends DropdownField {
public function Field($properties = array()) {
$source = $this->getSource();
$options = array();
if($source) {
// SQLMap needs this to add an empty value to the options
if(is_object($source) && $this->emptyString) {
$options[] = new ArrayData(array(
'Value' => '',
'Title' => $this->emptyString,
));
}
foreach($source as $value => $title) {
$selected = false;
if($value === '' && ($this->value === '' || $this->value === null)) {
$selected = true;
} else {
// check against value, fallback to a type check comparison when !value
if($value) {
$selected = ($value == $this->value);
} else {
$selected = ($value === $this->value) || (((string) $value) === ((string) $this->value));
}
$this->isSelected = $selected;
}
$disabled = false;
if(in_array($value, $this->disabledItems) && $title != $this->emptyString ){
$disabled = 'disabled';
}
$options[] = new ArrayData(array(
'Title' => $title,
'Value' => $value,
'Selected' => $selected,
'Disabled' => $disabled,
));
}
}
$properties = array_merge($properties, array('Options' => new ArrayList($options)));
return $this->customise($properties)->renderWith('DropdownFieldData');
// return parent::Field($properties);
}
}
答案 0 :(得分:0)
您可以尝试以下方法:
您还会发现这些字段是使用两个模板呈现的,其中一个模板以&#39; _holder&#39;为后缀,它充当包装器,而另一个模板呈现字段本身,所以根据您想要自定义字段的方式,您可能需要创建两者。
查看FormField类以更好地理解字段的呈现方式,因为它们使用的机制与页面类型略有不同
答案 1 :(得分:0)
我有一个类似的问题,这是计时的结果(后来加载的模板取代了我自己的自定义,但只有在使用默认表单模板时)。修复程序确保子类表单字段具有自己的FormField Holder方法版本。 EG:
public function FieldHolder($properties = array()) {
$obj = $properties ? $this->customise($properties) : $this;
return $obj->renderWith($this->getTemplates());
}
模板应位于templates / forms / CustomField.ss中。如果它位于您的主题文件夹,mysite或模块文件夹中,我认为这不重要。
答案 2 :(得分:0)
关键是要将模板保留在[yourmodule]/templates
中,而不是放在任何主题的位置。