Commit 16280df6d10404895ffe285bc8a7e2c57fbd6fe2
1 parent
098b35d6
Линк услуги не должен ссылатся сам на себя
Showing
2 changed files
with
77 additions
and
0 deletions
Show diff stats
frontend/views/layouts/main.php
... | ... | @@ -211,6 +211,8 @@ |
211 | 211 | { |
212 | 212 | $test[$key]['label']=$item['label']; |
213 | 213 | $test[$key]['options'] = [ 'class' => 'active' ]; |
214 | + $test[$key]['url']= false; | |
215 | + | |
214 | 216 | |
215 | 217 | } |
216 | 218 | elseif( \Yii::$app->request->url=='/' && $item['label']==\Yii::t('app', 'Prices')) |
... | ... | @@ -230,6 +232,7 @@ |
230 | 232 | |
231 | 233 | |
232 | 234 | ?> |
235 | + | |
233 | 236 | <?php echo Nav::widget( |
234 | 237 | [ |
235 | 238 | 'items' => $test, | ... | ... |
frontend/widgets/Nav.php
... | ... | @@ -9,20 +9,94 @@ |
9 | 9 | namespace frontend\widgets; |
10 | 10 | |
11 | 11 | use yii\helpers\Html; |
12 | + use yii\helpers\ArrayHelper; | |
13 | + | |
12 | 14 | |
13 | 15 | class Nav extends \yii\bootstrap\Nav |
14 | 16 | { |
17 | + | |
18 | + # метод почти полностью повторяет родительский, | |
19 | + # различия работы см.в return | |
20 | + public function renderItem($item) | |
21 | + { | |
22 | + if (is_string($item)) { | |
23 | + return $item; | |
24 | + } | |
25 | + if (!isset($item['label'])) { | |
26 | + throw new InvalidConfigException("The 'label' option is required."); | |
27 | + } | |
28 | + $encodeLabel = isset($item['encode']) ? $item['encode'] : $this->encodeLabels; | |
29 | + $label = $encodeLabel ? Html::encode($item['label']) : $item['label']; | |
30 | + $options = ArrayHelper::getValue($item, 'options', []); | |
31 | + $items = ArrayHelper::getValue($item, 'items'); | |
32 | + $url = ArrayHelper::getValue($item, 'url', '#'); | |
33 | + | |
34 | + $linkOptions = ArrayHelper::getValue($item, 'linkOptions', []); | |
35 | + | |
36 | + if (isset($item['active'])) { | |
37 | + $active = ArrayHelper::remove($item, 'active', false); | |
38 | + } else { | |
39 | + $active = $this->isItemActive($item); | |
40 | + } | |
41 | + | |
42 | + if (empty($items)) { | |
43 | + $items = ''; | |
44 | + } else { | |
45 | + $linkOptions['data-toggle'] = 'dropdown'; | |
46 | + Html::addCssClass($options, ['widget' => 'dropdown']); | |
47 | + Html::addCssClass($linkOptions, ['widget' => 'dropdown-toggle']); | |
48 | + if ($this->dropDownCaret !== '') { | |
49 | + $label .= ' ' . $this->dropDownCaret; | |
50 | + } | |
51 | + if (is_array($items)) { | |
52 | + $items = $this->isChildActive($items, $active); | |
53 | + $items = $this->renderDropdown($items, $item); | |
54 | + } | |
55 | + } | |
56 | + | |
57 | + if ($active) { | |
58 | + Html::addCssClass($options, 'active'); | |
59 | + } | |
60 | + | |
61 | + return ($url!=='')? | |
62 | + Html::tag('li', Html::a($label, $url, $linkOptions) . $items, $options) | |
63 | + : Html::tag('li', Html::a($label, null, $linkOptions) . $items, $options) | |
64 | + ; | |
65 | + } | |
66 | + | |
67 | + | |
68 | + | |
69 | + | |
70 | + | |
71 | + | |
72 | + | |
15 | 73 | public function init() |
16 | 74 | { |
75 | + | |
76 | + foreach ($this->items as &$item) | |
77 | + { | |
78 | + if($item['url']===false)$item['url']=''; | |
79 | + } | |
80 | + | |
81 | + | |
17 | 82 | if ($this->route === null && \Yii::$app->controller !== null) { |
18 | 83 | $this->route = \Yii::$app->controller->getRoute(); |
84 | + | |
19 | 85 | } |
86 | + | |
20 | 87 | if ($this->params === null) { |
21 | 88 | $this->params = \Yii::$app->request->getQueryParams(); |
89 | + | |
22 | 90 | } |
91 | + | |
23 | 92 | if ($this->dropDownCaret === null) { |
24 | 93 | $this->dropDownCaret = '<span class="caret"></span>'; |
94 | + | |
25 | 95 | } |
96 | + | |
97 | + | |
98 | + | |
26 | 99 | Html::addCssClass($this->options, []); |
100 | + | |
27 | 101 | } |
28 | 102 | } |
29 | 103 | \ No newline at end of file | ... | ... |