EliteConf
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Pages
test
protected
components
Freshy2Menu.php
Go to the documentation of this file.
1
<?php
2
/*/////////////////////////////////////////////////////////////////////////
3
// This file is part of the
4
// _______ _ ______
5
// (_______) | | (_____ \
6
// _____ ____ _____ ___ | |__ _ _ ____) )
7
// | ___)/ ___)| ___ | /___)| _ \ | | | | / ____/
8
// | | | | | ____||___ || | | || |_| | | (_____
9
// |_| |_| |_____)(___/ |_| |_| \__ | |_______)
10
// (____/
11
// Yii theme
12
//
13
// Ported from the original Wordpress Freshy 2 theme:
14
// http://www.jide.fr/english/downloads/freshy2
15
//
16
// Licensed under the GPL, like the original theme
17
// Copyleft 2011 - Jacob 'jacmoe' Moen @ http://www.jacmoe.dk/
19
?>
20
<?php
59
class Freshy2Menu extends CWidget
60
{
83
public $items=array();
91
public $itemTemplate;
95
public $encodeLabel=true;
100
public $activeCssClass='active';
106
public $activateItems=true;
112
public $activateParents=false;
117
public $hideEmptyItems=true;
121
public $htmlOptions=array();
125
public $submenuHtmlOptions=array();
134
public $linkLabelWrapper;
140
public $firstItemCssClass;
146
public $lastItemCssClass;
147
153
public function init()
154
{
155
$this->htmlOptions['id']=$this->getId();
156
$route=$this->getController()->getRoute();
157
$this->items=$this->normalizeItems($this->items,$route,$hasActiveChild);
158
}
159
163
public function run()
164
{
165
$this->renderMenu($this->items);
166
}
167
173
protected function renderMenu($items)
174
{
175
if(count($items))
176
{
177
echo CHtml::openTag('ul');
178
$this->renderMenuRecursive($items);
179
echo CHtml::closeTag('ul');
180
}
181
}
182
187
protected function renderMenuRecursive($items)
188
{
189
$count=0;
190
$n=count($items);
191
foreach($items as $item)
192
{
193
$count++;
194
$options=isset($item['itemOptions']) ? $item['itemOptions'] : array();
195
$class=array();
196
if($item['active'] && $this->activeCssClass!=''){
197
$class[]='current_page_item';
198
} else {
199
$class[]='page_item page-item-'.$count;
200
}
201
if($count===1 && $this->firstItemCssClass!='')
202
$class[]=$this->firstItemCssClass;
203
if($count===$n && $this->lastItemCssClass!='')
204
$class[]=$this->lastItemCssClass;
205
if($class!==array())
206
{
207
if(empty($options['class']))
208
$options['class']=implode(' ',$class);
209
else
210
$options['class'].=' '.implode(' ',$class);
211
}
212
echo CHtml::openTag('li', $options);
213
214
if(isset($item['url']))
215
{
216
$label=$this->linkLabelWrapper===null ? $item['label'] : '<'.$this->linkLabelWrapper.'>'.$item['label'].'</'.$this->linkLabelWrapper.'>';
217
$menu=CHtml::link($label,$item['url'],isset($item['linkOptions']) ? $item['linkOptions'] : array());
218
}
219
else
220
$menu=CHtml::tag('span',isset($item['linkOptions']) ? $item['linkOptions'] : array(), $item['label']);
221
if(isset($this->itemTemplate) || isset($item['template']))
222
{
223
$template=isset($item['template']) ? $item['template'] : $this->itemTemplate;
224
echo strtr($template,array('{menu}'=>$menu));
225
}
226
else
227
echo $menu;
228
if(isset($item['items']) && count($item['items']))
229
{
230
echo "\n".CHtml::openTag('ul',$this->submenuHtmlOptions)."\n";
231
$this->renderMenuRecursive($item['items']);
232
echo CHtml::closeTag('ul')."\n";
233
}
234
echo CHtml::closeTag('li')."\n";
235
}
236
}
237
245
protected function normalizeItems($items,$route,&$active)
246
{
247
foreach($items as $i=>$item)
248
{
249
if(isset($item['visible']) && !$item['visible'])
250
{
251
unset($items[$i]);
252
continue;
253
}
254
if($this->encodeLabel)
255
$items[$i]['label']=CHtml::encode($item['label']);
256
$hasActiveChild=false;
257
if(isset($item['items']))
258
{
259
$items[$i]['items']=$this->normalizeItems($item['items'],$route,$hasActiveChild);
260
if(empty($items[$i]['items']) && $this->hideEmptyItems)
261
unset($items[$i]['items']);
262
}
263
if(!isset($item['active']))
264
{
265
if($this->activateParents && $hasActiveChild || $this->activateItems && $this->isItemActive($item,$route))
266
$active=$items[$i]['active']=true;
267
else
268
$items[$i]['active']=false;
269
}
270
else if($item['active'])
271
$active=true;
272
}
273
return array_values($items);
274
}
275
284
protected function isItemActive($item,$route)
285
{
286
if(isset($item['url']) && is_array($item['url']) && !strcasecmp(trim($item['url'][0],'/'),$route))
287
{
288
if(count($item['url'])>1)
289
{
290
foreach(array_splice($item['url'],1) as $name=>$value)
291
{
292
if(!isset($_GET[$name]) || $_GET[$name]!=$value)
293
return false;
294
}
295
}
296
return true;
297
}
298
return false;
299
}
300
}
Generated on Sun Jun 2 2013 05:35:37 for EliteConf by
1.8.4