1: <?php
2:
3: namespace ZCL\BT;
4:
5: use \Zippy\Interfaces\AjaxRender;
6: use \Zippy\WebApplication;
7:
8: /**
9: * Компонент списка тегов основанный на
10: * https://github.com/maxwells/bootstrap-tags
11: */
12: class Tags extends \Zippy\Html\Form\HtmlFormDataElement
13: {
14:
15: private $_sug = array();
16: private $_options = array();
17:
18: /**
19: *
20: *
21: * @param mixed $id
22: * @param mixed $options Массив опций элемента в виде ключ-значение
23: */
24: public function __construct($id, $options = null) {
25: parent::__construct($id);
26: $this->setValue(array());
27: if (is_array($options)) {
28: $this->_options = $options;
29: }
30: }
31:
32: public function RenderImpl() {
33: $url = $this->owner->getURLNode() . "::" . $this->id . "&ajax=true";
34:
35: $data = json_encode($this->value);
36: $sug = json_encode($this->_sug);
37: $val = implode(';', $this->value);
38:
39: $js = "
40: var tags = $('#{$this->id}').tags({
41: tagData:{$data},
42: suggestions:{$sug} , ";
43: foreach ($this->_options as $key => $value) {
44: $js .= "{$key}:'{$value}',";
45: }
46: $js .= " afterAddingTag:function(tag){
47: var t = tags.getTags();
48: $('#{$this->id}_tags').val(t.join(\";\"));
49: },
50: afterDeletingTag:function(tag){
51: var t = tags.getTags();
52: $('#{$this->id}_tags').val(t.join(\";\"));
53:
54: }
55:
56:
57: });
58: $('#{$this->id}').after('<input type=\"hidden\" id=\"{$this->id}_tags\" name=\"{$this->id}_tags\" value=\"{$val}\" />');
59:
60: ";
61:
62: WebApplication::$app->getResponse()->addJavaScript($js, true);
63: }
64:
65: /**
66: * список подсказок
67: *
68: * @param mixed $sug
69: */
70: public function setSuggestions($sug) {
71: $this->_sug = $sug;
72: }
73:
74: public function setTags($tags) {
75: $this->setValue($tags);
76: }
77:
78: public function getTags() {
79: return $this->getValue();
80: }
81:
82: public function getRequestData() {
83:
84: $tags = $_REQUEST[$this->id . '_tags'];
85: $this->setValue(explode(';', $tags));
86: }
87:
88: public function clean() {
89: $this->setTags(array());
90: $this->setSuggestions(array());
91: }
92:
93: }
94: