TheStik
(Stik 90)
July 5, 2013, 9:58am
1
Модель
public static function menu()
{
$categories = self::model()->findAll();
$array = array();
foreach ($categories as $category)
{
$count = Film::model()->count('category_id = :category_id',array(':category_id'=>$category->id));
$array[] = array('label'=>$category->name.' ['.$count.']', 'url'=>array('film/genre/id/'.$category->id));
}
return $array;
}
Ну и в сайдбаре выводится
<?php
$this->beginWidget('zii.widgets.CPortlet', array(
'title'=>'Категории',
));
$this->widget('zii.widgets.CMenu', array(
'items'=>Category::menu(),
'htmlOptions'=>array(
'class'=>'operations'
),
));
$this->endWidget();
?>
Никак не соображу как вывести количество ссылок в виде текста, а не ссылки. Еще тут вроде запрос кривой, в цикле, думаю есть более продуктивный способ
TheStik:
Еще 2 мелких вопрос:
Для чего в контроллере сгенерированном через груд метод performAjaxValidation?
Как убрать * с обязательных полей
Этот метод над раскомментировать если используется Ajax проверка
У нужной модели в функции rules для нужных полей убери проверку на required
по поводу первого вопроса
label - это внутренняя часть ссылки <a>label тут</a> если задан параметр url zii.widgets.CMenu
если не задавать параметр url то там формируются в виде span-ов
то есть в принципе через label можно передать хтмл то есть вывести пункт меню так как тебе нужно либо нужно создавать новый виджет на основе zii.widgets.CMenu и с изменённой функцией renderMenuItem так как тебе нужно!
TheStik:
Как убрать * с обязательных полей
Если вы хотите оставить проверку на обязательность заполнения поля, но убрать "*", то нужно вместо $form->labelEx использовать $form->label
TheStik:
Никак не соображу как вывести количество ссылок в виде текста, а не ссылки. Еще тут вроде запрос кривой, в цикле, думаю есть более продуктивный способ
Как то так:
...
$this->widget('zii.widgets.CMenu',array(
'encodeLabel'=>false,
...
),
и
$array[] = array('label'=>'<a href="...">'.$category->name.'</a>'.' ['.$count.']', 'url'=>array('film/genre/id/'.$category->id));
TheStik
(Stik 90)
July 5, 2013, 1:34pm
6
Ага, только что сделал $array[] = array('label'=>CHtml::link($category->name,'film/genre/id/'.$category->id).' ['.$count.']');