-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTagsInput.php
85 lines (72 loc) · 1.9 KB
/
TagsInput.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
namespace iutbay\yii2bootstrap;
use yii\helpers\Html;
/**
* TagsInput widget
* @author Kevin LEVRON <[email protected]>
*/
class TagsInput extends \yii\widgets\InputWidget
{
/**
* @var array tags
*/
public $tags;
/**
* @var integer tags
*/
public $limit = 0;
/**
* @inheritdoc
*/
public function init()
{
parent::init();
}
/**
* @inheritdoc
*/
public function run()
{
TagsInputAsset::register($this->getView());
$this->registerClientScript();
$output = Html::activeDropDownList($this->model, $this->attribute, $this->tags, [
'class' => 'form-control',
'multiple' => $this->limit != 1,
]);
return $output;
}
/**
* Render tags buttons
*/
protected function renderTagsButtons()
{
$attribute = $this->model->{$this->attribute};
$buttons = [];
foreach ($this->tags as $key=>$val) {
$inputName = Html::getInputName($this->model, $this->attribute);
$inputName.= $this->limit != 1 ? '[]' : '';
$options = [
'type' => 'button',
'name' => $inputName,
'value' => $key,
'class' => 'btn btn-default',
];
if (($this->limit != 1 && in_array($key, $attribute))
|| ($this->limit == 1 && $key == $attribute)) {
Html::addCssClass ($options, 'active');
}
$buttons[] = Html::button($val, $options);
}
$output = implode(' ', $buttons);
$output = Html::tag('div', $output, ['class' => 'buttons']);
return $output;
}
/**
* Register js
*/
public function registerClientScript()
{
$id = $this->options['id'];
$this->getView()->registerJs("jQuery('#{$id}').tagsinput();");
}
}