123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <?php
- /**
- *
- * PHP Pro Bid $Id$ l8oVv278p6rDL94MGFVxLSixqAd9Yo+uZ6DUcXTiXQg=
- *
- * @link http://www.phpprobid.com
- * @copyright Copyright (c) 2014 Online Ventures Software LTD & CodeCube SRL
- * @license http://www.phpprobid.com/license Commercial License
- *
- * @version 7.1
- */
- /**
- * multi key value form element
- *
- * creates an element containing an unlimited (jquery powered) list of key => value rows
- * the row will contain one text field for "key" and the other for "value"
- */
- namespace Ppb\Form\Element;
- use Cube\Form\Element;
- class MultiKeyValue extends Element
- {
- const FIELD_KEY = 'key';
- const FIELD_VALUE = 'value';
- /**
- *
- * type of element - override the variable from the parent class
- *
- * @var string
- */
- protected $_element = 'multiKeyValue';
- /**
- *
- * class constructor
- *
- * @param string $name
- */
- public function __construct($name)
- {
- parent::__construct($this->_element, $name);
- $translate = $this->getTranslate();
- $this->setBodyCode(
- "<script type=\"text/javascript\">" . "\n"
- . " function moveUp(item) { " . "\n"
- . " var before = item.prev(); " . "\n"
- . " item.insertBefore(before); " . "\n"
- . " } " . "\n"
- . " function moveDown(item) { " . "\n"
- . " var after = item.next(); " . "\n"
- . " item.insertAfter(after); " . "\n"
- . " } " . "\n"
- . " $(document).on('click', '.delete-field-row', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " $(this).closest('.field-row').remove(); " . "\n"
- . " }); " . "\n"
- . " $(document).on('click', '.add-field-row', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " var parent = $(this).closest('.form-group').find('.multi-key-value-rows'); " . "\n"
- . " var row = $(this).closest('.field-row'); " . "\n"
- . " var cloned = row.clone(true, true); " . "\n"
- . " row.find('input[type=text]').val(''); " . "\n"
- . " cloned.find('.add-field-row').remove(); " . "\n"
- . " $('<a>').attr('href', '#').attr('class', 'btn-fld-move-up').html(' <i class=\"fa fa-angle-up\"></i>').appendTo(cloned); " . "\n"
- . " $('<a>').attr('href', '#').attr('class', 'btn-fld-move-down').html('<i class=\"fa fa-angle-down\"></i> ').appendTo(cloned); " . "\n"
- . " $('<button>').attr('class', 'delete-field-row btn btn-default').html('" . $translate->_('Delete') . "').appendTo(cloned); " . "\n"
- . " parent.append(cloned); " . "\n"
- . " }); " . "\n"
- . " $(document).on('click', '.btn-fld-move-up', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " var row = $(this).closest('.field-row'); " . "\n"
- . " moveUp(row); " . "\n"
- . " }); " . "\n"
- . " $(document).on('click', '.btn-fld-move-down', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " var row = $(this).closest('.field-row'); " . "\n"
- . " moveDown(row); " . "\n"
- . " }); " . "\n"
- . "</script>");
- }
- /**
- *
- * render the form element
- *
- * @return string
- */
- public function render()
- {
- $output = null;
- $values = $this->getValue();
- $output .= '<div class="multi-key-value-rows">';
- foreach ((array)$values[self::FIELD_KEY] as $id => $key) {
- if (!empty($key)) {
- $output .= $this->_renderRow(false, $key, $values[self::FIELD_VALUE][$id]);
- }
- }
- $output .= '</div>';
- $output .= $this->_renderRow();
- return $output;
- }
- /**
- *
- * render a single row of the element
- *
- * @param bool $new
- * @param string $key
- * @param string $value
- *
- * @return string
- */
- protected function _renderRow($new = true, $key = null, $value = null)
- {
- $translate = $this->getTranslate();
- $placeholder = $this->getAttribute('placeholder');
- if (!empty($placeholder)) {
- $placeholder .= ' ';
- }
- $this->removeAttribute('placeholder')->addAttribute('placeholder', $translate->_('Key'));
- $output = '<div class="field-row">'
- . ' <input type="text" name="' . $this->_name . '[' . self::FIELD_KEY . '][]" '
- . $this->renderAttributes()
- . 'value="' . $key . '" '
- . $this->_endTag;
- $this->removeAttribute('placeholder')->addAttribute('placeholder', $translate->_('Value'));
- $output .= ' <input type="text" name="' . $this->_name . '[' . self::FIELD_VALUE . '][]" '
- . $this->renderAttributes()
- . 'value="' . $value . '" '
- . $this->_endTag
- . (($new === true) ?
- ' <button class="add-field-row btn btn-default">' . $translate->_('Add') . '</button>' :
- ' <a class="btn-fld-move-up" href="#"><i class="fa fa-angle-up"></i></a><a class="btn-fld-move-down" href="#"><i class="fa fa-angle-down"></i></a>
- <button class="delete-field-row btn btn-default">' . $translate->_('Delete') . '</button>')
- . '</div>';
- return $output;
- }
- }
|