<?php namespace Nextend\Framework\Form\Element; use Nextend\Framework\Asset\Js\Js; use Nextend\Framework\Form\AbstractField; use Nextend\Framework\Form\ContainerInterface; use Nextend\Framework\Form\TraitFieldset; class MixedField extends AbstractFieldHidden implements ContainerInterface { use TraitFieldset; private $separator = '|*|'; protected $style = ''; protected $rowClass = 'n2_field_mixed '; protected function fetchElement() { $default = explode($this->separator, $this->defaultValue); $value = explode($this->separator, $this->getValue()); $value = $value + $default; $html = ''; $subElements = array(); $i = 0; $element = $this->first; while ($element) { $element->setExposeName(false); if (isset($value[$i])) { $element->setDefaultValue($value[$i]); } $html .= $this->decorateElement($element); $subElements[$i] = $element->getID(); $i++; $element = $element->getNext(); } $html .= parent::fetchElement(); Js::addInline('new _N2.FormElementMixed("' . $this->fieldID . '", ' . json_encode($subElements) . ', "' . $this->separator . '");'); return $this->decorate($html); } /** * @param string $style */ public function setStyle($style) { $this->style = $style; } public function getControlName() { return $this->name . $this->controlName; } /** * @param AbstractField $element * * @return string */ public function decorateElement($element) { return $this->parent->decorateElement($element); } protected function decorate($html) { return '<div class="n2_field_mixed__container" style="' . $this->style . '">' . $html . '</div>'; } }