_options) { $this->_options = Qs_Array::exclude($this->getElement()->getAttribs(), 'helper', 'options'); } return $this->_options; } public function setOptions(array $options) { if (isset($options['options'])) { unset($options['options']); } foreach ($options as $key => $value) { $method = 'set' . ucfirst($key); if (method_exists($this, $method)) { $this->$method($value); } else { $this->_options[$key] = $value; } } return $this; } public function initRender() { $doc = Zend_Registry::get('doc'); $doc->addScript('js/lib/form-element-multitext.js') ->addInitFunction( 'Qs_Form_Element_MultiText.init', [$this->getElement()->getId(), $this->_getScriptOptions()] ); return $this; } public function render($content) { // init options $this->getOptions(); $tag = $this->getTag(); $element = $this->getElement(); $id = $element->getId(); $view = $element->getView(); $placement = $this->getPlacement(); $noAttribs = $this->getOption('noAttribs'); $this->removeOption('noAttribs'); $this->removeOption('openOnly'); $this->removeOption('closeOnly'); $attribs = null; if (!$noAttribs) { $attribs = $this->getOptions(); } if (!isset($attribs['id'])) { $attribs['id'] = $element->getId(); } if (!isset($attribs['class'])) { $attribs['class'] = $element->getClass(); } $elementAttribs = [ 'class' => 'text', 'id' => $element->getId() . '-0', ]; $elementContent = $this->_getOpenTag('table', $attribs); $elementContent .= $this->_getOpenTag('tfoot'); $elementContent .= $this->_getOpenTag('tr'); $elementContent .= $this->_getOpenTag('td', ['colspan' => ($element->isNumering()) ? 3 : 2]); $elementContent .= $this->_renderAddLink(); $elementContent .= $this->_getCloseTag('td'); $elementContent .= $this->_getCloseTag('tr'); $elementContent .= $this->_getCloseTag('tfoot'); $elementContent .= $this->_getOpenTag('tbody'); $values = $element->getValue(); if (empty($values)) { $values = ['']; } $index = 1; foreach ($values as $value) { $elementContent .= $this->_getOpenTag('tr'); if ($element->isNumering()) { $elementContent .= $this->_getOpenTag('td', ['class' => 'no']); $elementContent .= str_replace( '%number%', '' . ($index++) . '', $element->getNumeringFormat() ); $elementContent .= $this->_getCloseTag('td'); } $elementContent .= $this->_getOpenTag('td', ['class' => 'element']); $elementAttribs['id'] = $element->getId() . '-' . $index; $elementContent .= $view->formText($element->getFullyQualifiedName(), $value, $elementAttribs); $elementContent .= $this->_getCloseTag('td'); $elementContent .= $this->_getOpenTag('td', ['class' => 'options']); $elementContent .= $this->_renderOptions(); $elementContent .= $this->_getCloseTag('td'); $elementContent .= $this->_getCloseTag('tr'); } $elementContent .= $this->_getCloseTag('tbody'); $elementContent .= $this->_getCloseTag('table'); switch ($placement) { case self::APPEND: return $content . $elementContent; case self::PREPEND: return $elementContent . $content; } } protected function _renderScriptOptions() { $options = $this->_getScriptOptions(); return json_encode($options); } protected function _getScriptOptions() { $options = [ 'name' => $this->getElement()->getFullyQualifiedName(), 'isNumering' => $this->getElement()->isNumering(), 'isSortable' => $this->getElement()->isSortable(), 'numeringFormat' => $this->getElement()->getNumeringFormat(), ]; if (!($itemName = $this->getElement()->getItemName())) { $itemName = 'row'; } $options['itemName'] = $this->_getText($itemName); return $options; } protected function _getText($text) { if ($translator = $this->getElement()->getTranslator()) { return $translator->translate($text); } return $text; } protected function _renderLink($text, $attribs, $separator = '') { $content = $this->_getOpenTag('a', $attribs) . $this->_getText($text) . $this->_getCloseTag('a') . '' . $separator . ''; return $content; } protected function _renderOptions() { $id = $this->getElement()->getId(); $content = ''; if ($this->getElement()->isSortable()) { $content .= $this->_renderLink( 'up', [ 'class' => 'up', 'href' => '#', 'onclick' => 'return Qs_Form_Element_MultiText.up(this, \'' . $id . '\');', ], ' | ' ); $content .= $this->_renderLink( 'down', [ 'class' => 'down', 'href' => '#', 'onclick' => 'return Qs_Form_Element_MultiText.down(this, \'' . $id . '\');', ], ' | ' ); } $content .= $this->_renderLink( $this->getElement()->getDeleteText(), [ 'class' => 'del', 'href' => '#', 'onclick' => 'return Qs_Form_Element_MultiText.del(this, \'' . $id . '\');', ] ); return $content; } protected function _renderAddLink() { $id = $this->getElement()->getId(); $content = $this->_getOpenTag( 'a', [ 'id' => $id . '-add', 'onclick' => "return Qs_Form_Element_MultiText.add('{$id}')", 'href' => '#', ] ); $content .= $this->_getText($this->getElement()->getAddText()); $content .= $this->_getCloseTag('a'); return $content; } }