Add some handling to allow ID to be different from the value source by allowing the value attribute to point to the value.

This commit is contained in:
Nathan Gray 2014-10-01 17:29:22 +00:00
parent 0eb14c1dc1
commit b1e77ca062
2 changed files with 19 additions and 6 deletions

View File

@ -66,10 +66,10 @@ abstract class etemplate_widget_entry extends etemplate_widget_transformer
$attrs['id'] = $this->id; $attrs['id'] = $this->id;
$form_name = self::form_name($cname, $this->id); $form_name = self::form_name($cname, $this->id);
$data_id = $this->value ? self::form_name($cname, $this->value) : self::form_name($cname, self::ID_PREFIX . $this->id); $data_id = $attrs['value'] ? self::form_name($cname, $attrs['value']) : self::form_name($cname, self::ID_PREFIX . $this->id);
// No need to proceed // No need to proceed
if(!$this->id) return; if(!$data_id) return;
// Find out which record to load // Find out which record to load
$value = self::get_array(self::$request->content, $form_name, false, true); $value = self::get_array(self::$request->content, $form_name, false, true);
@ -89,7 +89,7 @@ abstract class etemplate_widget_entry extends etemplate_widget_transformer
// Check for conflict - more than one with same id/field and different type // Check for conflict - more than one with same id/field and different type
if($old_type && $old_type != $this->type) if($old_type && $old_type != $this->type)
{ {
self::set_validation_error($this->id, lang('%1, duplicate ID', $this)); //self::set_validation_error($this->id, lang('%1, duplicate ID', $this));
} }
} }

View File

@ -71,13 +71,20 @@ var et2_entry = et2_valueWidget.extend(
*/ */
init: function(parent, attrs) { init: function(parent, attrs) {
// Often the ID conflicts, so check prefix // Often the ID conflicts, so check prefix
if(attrs.id && attrs.id.indexOf(this.prefix) < 0 && typeof attrs.value == 'undefined') if(attrs.id && attrs.id.indexOf(this.prefix) < 0)
{ {
attrs.id = this.prefix + attrs.id; attrs.id = this.prefix + attrs.id;
} }
var value = attrs.value;
this._super.apply(this, arguments); this._super.apply(this, arguments);
// Save value from parsing, but only if set
if(value)
{
this.options.value = value;
}
this.widget = null; this.widget = null;
this.setDOMNode(document.createElement('span')); this.setDOMNode(document.createElement('span'));
}, },
@ -108,9 +115,15 @@ var et2_entry = et2_valueWidget.extend(
}; };
var widget = et2_createWidget(attrs.type, attrs, this); var widget = et2_createWidget(attrs.type, attrs, this);
// If value is not set, etemplate takes care of everything
// If value was set, find the record explicitly.
if(typeof this.options.value == 'string')
{
widget.options.value = this.getRoot().getArrayMgr('content').getEntry(this.prefix+this.options.value + '['+this.options.field+']');
}
if(this.options.compare) if(this.options.compare)
{ {
widget.options.value = this.getArrayMgr('content').getEntry(this.options.field) == this.options.compare ? 'X' : ''; widget.options.value = widget.options.value == this.options.compare ? 'X' : '';
} }
if(this.options.alternate_fields) if(this.options.alternate_fields)
{ {