HCE Project DC service web UI  0.2
Hierarchical Cluster Engine DC service web UI
 All Classes Namespaces Files Functions Variables Pages
TbBaseMenu.php
Go to the documentation of this file.
1 <?php
10 Yii::import('zii.widgets.CMenu');
11 
17 abstract class TbBaseMenu extends CMenu {
24  abstract public function getDividerCssClass();
25 
32  abstract public function getDropdownCssClass();
33 
40  abstract public function isVertical();
41 
50  protected function renderMenu($items) {
51 
52  $n = count($items);
53 
54  if ($n > 0) {
55  echo CHtml::openTag('ul', $this->htmlOptions) . "\n";
56 
57  $count = 0;
58  foreach ($items as $item) {
59  $count++;
60 
61  if (isset($item['divider'])) {
62  echo "<li class=\"{$this->getDividerCssClass()}\"></li>\n";
63  } else {
64  $options = isset($item['itemOptions']) ? $item['itemOptions'] : array();
65  $classes = array();
66 
67  if ($item['active'] && $this->activeCssClass != '') {
68  $classes[] = $this->activeCssClass;
69  }
70 
71  if ($count === 1 && $this->firstItemCssClass !== null) {
72  $classes[] = $this->firstItemCssClass;
73  }
74 
75  if ($count === $n && $this->lastItemCssClass !== null) {
76  $classes[] = $this->lastItemCssClass;
77  }
78 
79  if ($this->itemCssClass !== null) {
80  $classes[] = $this->itemCssClass;
81  }
82 
83  if (isset($item['items'])) {
84  $classes[] = $this->getDropdownCssClass();
85  }
86 
87  if (isset($item['disabled'])) {
88  $classes[] = 'disabled';
89  }
90 
91  if (!empty($classes)) {
92  $classes = implode(' ', $classes);
93  if (!empty($options['class'])) {
94  $options['class'] .= ' ' . $classes;
95  } else {
96  $options['class'] = $classes;
97  }
98  }
99 
100  echo CHtml::openTag('li', $options) . "\n";
101 
102  $menu = $this->renderMenuItem($item);
103 
104  if (isset($this->itemTemplate) || isset($item['template'])) {
105  $template = isset($item['template']) ? $item['template'] : $this->itemTemplate;
106  echo strtr($template, array('{menu}' => $menu));
107  } else {
108  echo $menu;
109  }
110 
111  if (isset($item['items']) && !empty($item['items'])) {
112  $dropdownOptions = array(
113  'encodeLabel' => $this->encodeLabel,
114  'htmlOptions' => isset($item['submenuOptions']) ? $item['submenuOptions']
115  : $this->submenuHtmlOptions,
116  'items' => $item['items'],
117  );
118  $dropdownOptions['id'] = isset($dropdownOptions['htmlOptions']['id']) ?
119  $dropdownOptions['htmlOptions']['id'] : null;
120  $this->controller->widget('booster.widgets.TbDropdown', $dropdownOptions);
121  }
122 
123  echo "</li>\n";
124  }
125  }
126 
127  echo "</ul>\n";
128  }
129  }
130 
141  protected function renderMenuItem($item) {
142 
143  if (isset($item['icon'])) {
144  if (strpos($item['icon'], 'icon') === false && strpos($item['icon'], 'fa') === false) {
145  $item['icon'] = 'glyphicon glyphicon-' . implode(' glyphicon-', explode(' ', $item['icon']));
146  $item['label'] = "<span class='" . $item['icon'] . "'></span>\r\n" . $item['label'];
147  } else {
148  $item['label'] = "<i class='" . $item['icon'] . "'></i>\r\n" . $item['label'];
149  }
150  }
151 
152  if (!isset($item['linkOptions'])) {
153  $item['linkOptions'] = array();
154  }
155 
156  if (isset($item['items']) && !empty($item['items'])) {
157  if (empty($item['url'])) {
158  $item['url'] = '#';
159  }
160 
161  if (isset($item['linkOptions']['class'])) {
162  $item['linkOptions']['class'] .= ' dropdown-toggle';
163  } else {
164  $item['linkOptions']['class'] = 'dropdown-toggle';
165  }
166 
167  $item['linkOptions']['data-toggle'] = 'dropdown';
168  $item['label'] .= ' <span class="caret"></span>';
169  }
170 
171  if (isset($item['url'])) {
172  return CHtml::link($item['label'], $item['url'], $item['linkOptions']);
173  } else {
174  return $item['label'];
175  }
176  }
177 
189  protected function normalizeItems($items, $route, &$active)
190  {
191  foreach ($items as $i => $item) {
192  if (!is_array($item)) {
193  $item = array('divider' => true);
194  } else {
195  if (!isset($item['itemOptions'])) {
196  $item['itemOptions'] = array();
197  }
198 
199  $classes = array();
200 
201  if (!isset($item['url']) && !isset($item['items']) && $this->isVertical()) {
202  $item['header'] = true;
203  $classes[] = 'nav-header';
204  }
205 
206  if (!empty($classes)) {
207  $classes = implode($classes, ' ');
208  if (isset($item['itemOptions']['class'])) {
209  $item['itemOptions']['class'] .= ' ' . $classes;
210  } else {
211  $item['itemOptions']['class'] = $classes;
212  }
213  }
214  }
215 
216  $items[$i] = $item;
217  }
218 
219  return parent::normalizeItems($items, $route, $active);
220  }
221 }