1
|
|
|
<?php
|
2
|
|
|
/**
|
3
|
|
|
* @author Alexey Tatarinov <[email protected]>
|
4
|
|
|
* @link https://github.com/shogodev/argilla/
|
5
|
|
|
* @copyright Copyright © 2003-2014 Shogo
|
6
|
|
|
* @license http://argilla.ru/LICENSE
|
7
|
|
|
* @package
|
8
|
|
|
*/
|
9
|
|
|
class ParametersWidget extends CWidget
|
10
|
|
|
{
|
11
|
|
|
/**
|
12
|
|
|
* @var BProduct
|
13
|
|
|
*/
|
14
|
|
|
public $model;
|
15
|
|
|
|
16
|
|
|
public $form;
|
17
|
|
|
|
18
|
|
|
/**
|
19
|
|
|
* @var array $hideParameters - масив id параметров которые нужно скрыть
|
20
|
|
|
*/
|
21
|
|
|
public $hideParameters = array();
|
22
|
|
|
|
23
|
|
|
public function init()
|
24
|
|
|
{
|
25
|
|
|
if( is_null($this->model) )
|
26
|
|
|
throw new CHttpException(500, 'Укажите свойство model для виджета '.__CLASS__);
|
27
|
|
|
|
28
|
|
|
if( is_null($this->form) )
|
29
|
|
|
throw new CHttpException(500, 'Укажите свойство form для виджета '.__CLASS__);
|
30
|
|
|
|
31
|
|
|
if( $this->model->asa('modificationBehavior') && $this->model->isModification())
|
32
|
|
|
{
|
33
|
|
|
$parent = $this->model->getParentModel();
|
34
|
|
|
$this->model->section_id = $parent->section_id;
|
35
|
|
|
}
|
36
|
|
|
}
|
37
|
|
|
|
38
|
|
|
public function run()
|
39
|
|
|
{
|
40
|
|
|
if( !$this->isAvailable() )
|
41
|
|
|
return;
|
42
|
|
|
|
43
|
|
|
echo CHtml::openTag('div', array('class' => 'group-view', 'id' => 'product-parameters'));
|
44
|
|
|
$this->renderTable();
|
45
|
|
|
echo CHtml::closeTag('div');
|
46
|
|
|
}
|
47
|
|
|
|
48
|
|
|
private function renderTable()
|
49
|
|
|
{
|
50
|
|
|
echo '<table class="items table table-striped table-bordered param-table">';
|
51
|
|
|
echo '<thead><tr><th>Параметры</th><th>Значения</th></tr></thead>';
|
52
|
|
|
echo '<tbody>';
|
53
|
|
|
$this->renderBody();
|
54
|
|
|
echo '</tbody>';
|
55
|
|
|
echo '</table>';
|
56
|
|
|
}
|
57
|
|
|
|
58
|
|
|
private function renderBody()
|
59
|
|
|
{
|
60
|
|
|
foreach(BProductParam::model()->getParameters($this->model) as $parameter)
|
61
|
|
|
{
|
62
|
|
|
if( $parameter->isGroup() )
|
63
|
|
|
{
|
64
|
|
|
echo '<tr class="group"><td colspan="2">'.$parameter->name.'</td></tr>';
|
65
|
|
|
}
|
66
|
|
|
else
|
67
|
|
|
{
|
68
|
|
|
if( in_array($parameter->id, $this->hideParameters) )
|
69
|
|
|
echo '<tr style="display: none">';
|
70
|
|
|
else
|
71
|
|
|
echo '<tr>';
|
72
|
|
|
echo '<th>';
|
73
|
|
|
echo CHtml::label($parameter->name, null);
|
74
|
|
|
echo '</th>';
|
75
|
|
|
echo '<td>';
|
76
|
|
|
$this->renderParameter($parameter);
|
77
|
|
|
echo '</td></tr>';
|
78
|
|
|
}
|
79
|
|
|
}
|
80
|
|
|
}
|
81
|
|
|
|
82
|
|
|
/**
|
83
|
|
|
* @param BProductParam $param
|
84
|
|
|
*/
|
85
|
|
|
private function renderParameter($param)
|
86
|
|
|
{
|
87
|
|
|
if( $this->model->asa('productColorBehavior') && $this->model->getColorParameterId() == $param->id )
|
88
|
|
|
{
|
89
|
|
|
$this->renderColorParameter($param, true);
|
90
|
|
|
return;
|
91
|
|
|
}
|
92
|
|
|
|
93
|
|
|
if( $this->model->asa('updateParameterColorGroupBehavior') && $this->model->colorGroupParameterId == $param->id )
|
94
|
|
|
{
|
95
|
|
|
$this->renderColorParameter($param, false);
|
96
|
|
|
return;
|
97
|
|
|
}
|
98
|
|
|
|
99
|
|
|
switch($param->type)
|
100
|
|
|
{
|
101
|
|
|
case 'text':
|
102
|
|
|
case 'slider':
|
103
|
|
|
echo CHtml::activeTextField($param, "[$param->id]value");
|
104
|
|
|
break;
|
105
|
|
|
|
106
|
|
View Code Duplication |
case 'checkbox':
|
|
|
|
|
107
|
|
|
echo CHtml::tag('div', array('style' => 'float: left'), false, false);
|
108
|
|
|
echo $this->form->checkBoxList($param, "[$param->id]value", CHtml::listData($param->variants, 'id', 'name'), array('template' => '<span class="{labelCssClass}">{input}{label}</span>'));
|
109
|
|
|
echo CHtml::closeTag('div');
|
110
|
|
|
break;
|
111
|
|
|
|
112
|
|
|
case 'select':
|
113
|
|
|
echo $this->form->dropDownList($param, "[$param->id]value", array('' => 'Не задано') + CHtml::listData($param->variants, 'id', 'name'));
|
114
|
|
|
break;
|
115
|
|
|
|
116
|
|
View Code Duplication |
case 'radio':
|
|
|
|
|
117
|
|
|
echo CHtml::tag('div', array('style' => 'float: left'), false, false);
|
118
|
|
|
echo $this->form->radioButtonList($param, "[$param->id]value", CHtml::listData($param->variants, 'id', 'name'));
|
119
|
|
|
echo CHtml::closeTag('div');
|
120
|
|
|
break;
|
121
|
|
|
}
|
122
|
|
|
}
|
123
|
|
|
|
124
|
|
|
/**
|
125
|
|
|
* @param BProductParam $param
|
126
|
|
|
* @param boolean $image
|
127
|
|
|
*/
|
128
|
|
|
private function renderColorParameter($param, $image)
|
129
|
|
|
{
|
130
|
|
|
$variants = array();
|
131
|
|
|
|
132
|
|
|
foreach($param->variants as $i => $variant)
|
133
|
|
|
{
|
134
|
|
|
if($image )
|
135
|
|
|
$variants[$variant->id] = CHtml::image($variant->getImage(), $variant->alt, array('style' => 'height: 25px; background: '.$variant->notice , 'title' => $variant->name, ));
|
136
|
|
|
else
|
137
|
|
|
$variants[$variant->id] = CHtml::tag('span', array('style' => 'display: block; height: 25px; width: 25px; background-color: '.$variant->notice , 'title' => $variant->name, ));
|
138
|
|
|
|
139
|
|
|
if( is_array($param->value) && in_array($variant->id, $param->value) )
|
140
|
|
|
{
|
141
|
|
|
echo CHtml::tag('span', array('class' => 'checkbox'),
|
142
|
|
|
CHtml::label($variants[$variant->id], null).
|
143
|
|
|
CHtml::hiddenField("BProductParamName[$param->id][value][]", $variant->id)
|
144
|
|
|
);
|
145
|
|
|
}
|
146
|
|
|
}
|
147
|
|
|
}
|
148
|
|
|
|
149
|
|
|
private function isAvailable()
|
150
|
|
|
{
|
151
|
|
|
return !$this->controller->popup && $this->controller->isUpdate();
|
152
|
|
|
}
|
153
|
|
|
}
|
154
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.