getAttribute('formatResult'); $formatCondition = ''; if (!empty($formatResult)) { $formatCondition = ', templateResult : '.$formatResult.', templateSelection : '.$formatResult; } $width = 'element'; $givenWidth = '100%'; if (!empty($givenWidth)) { $width = $givenWidth; } //Get the minimumInputLength for select2 $minimumInputLength = $this->getAttribute('minimumInputLength') > 3 ? $this->getAttribute('minimumInputLength') : 3 ; $plHolder = $this->getAttribute('placeholder'); if (empty($plHolder)) { $plHolder = get_lang('SelectAnOption'); } $id = $this->getAttribute('id'); if (empty($id)) { $id = $this->getAttribute('name'); $this->setAttribute('id', $id); } // URL must return ajax json_encode arrady [items => [['id'=>1, 'text'='content']] $url = $this->getAttribute('url'); if (!$url) { $url = $this->getAttribute('url_function'); } else { $url = "'$url'"; } $tagsAttr = $this->getAttribute('tags'); $multipleAttr = $this->getAttribute('multiple'); $tags = !empty($tagsAttr) ? (bool) $tagsAttr : false; $tags = $tags ? 'true' : 'false'; $multiple = !empty($multipleAttr) ? (bool) $multipleAttr : false; $multiple = $multiple ? 'true' : 'false'; $max = $this->getAttribute('maximumSelectionLength'); $max = !empty($max) ? "maximumSelectionLength: $max, " : ''; $html = << $(function(){ $('#{$this->getAttribute('id')}').select2({ language: '$iso', placeholder: '$plHolder', allowClear: true, width: '$width', minimumInputLength: '$minimumInputLength', tags: $tags, ajax: { url: $url, dataType: 'json', data: function(params) { return { q: params.term, // search term page_limit: 10, }; }, processResults: function (data, page) { // Parse the results into the format expected by Select2 if (data.items) { return { results: data.items }; } return { results: '' }; } $formatCondition } }); }); JS; $this->removeAttribute('formatResult'); $this->removeAttribute('minimumInputLength'); $this->removeAttribute('maximumSelectionLength'); $this->removeAttribute('tags'); $this->removeAttribute('placeholder'); $this->removeAttribute('class'); $this->removeAttribute('url'); $this->removeAttribute('url_function'); $this->setAttribute('style', 'width: 100%;'); return parent::toHtml().$html; } /** * We check the options and return only the values that _could_ have been * selected. We also return a scalar value if select is not "multiple". */ public function exportValue(&$submitValues, $assoc = false) { $value = $this->_findValue($submitValues); if (!$value) { $value = ''; } return $this->_prepareValue($value, $assoc); } }