РЕШЕНО. Как вывести по алфавиту?
РЕШЕНО. Как вывести по алфавиту?
Доброго времени суток.
Встал вопрос о сортировке списка, пример http://www.automobile.ru/catalog/?sector=all. Как сделать это на Yii ума не дам.
Может кто поможет. Может кто уже писал такое?
Заранее благодарю.
Встал вопрос о сортировке списка, пример http://www.automobile.ru/catalog/?sector=all. Как сделать это на Yii ума не дам.
Может кто поможет. Может кто уже писал такое?
Заранее благодарю.
Последний раз редактировалось kvs 2011.07.16, 11:27, всего редактировалось 2 раза.
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Как отсортировать по названию?
А причем здесь сортировка ? Слету не отвечу. Но там нужен один sql запрос для вывода доступных букв. + Критерий в CActiveDataProvider при выводе. И все. Форма поиска стандартна.
Re: Как отсортировать по названию?
гы, я сам пытался долго найти где и как там что-то можно отсортировать, только потом понял, что речь о алфавите
Re: Как отсортировать по названию?
может конечно я и не правильно сформулировал заголовок, но а вывести по алфавиту как?
Re: Как вывести по алфавиту?
написал, вроде работает. Может кому пригодиться
Код: Выделить всё
<?php
class alphabetListWidget extends CWidget {
public $moduleName = 'cars';
public $modelName;
protected $model;
private $arModels = array();
public function init() {
parent::init();
$this->model = new $this->modelName;
$this->model = $this->model->alphabetASC()->findAll();
$this->arModels = CHtml::listData($this->model, 'alias', 'title');
$this->arModels = self::alphabet_keys_sorting($this->arModels);
}
public function run() {
echo '<ul>';
foreach ($this->arModels as $letter => $value) {
echo "<li><strong>{$letter}</strong>";
echo "<ul>";
foreach($this->arModels[$letter] as $brand => $title) {
echo "<li>".CHtml::link($title, $this->controller->createUrl("/{$this->moduleName}/{$this->modelName}/view", array('brand'=>$brand)))."</li>";
}
echo "</ul>";
echo "</li>";
}
echo '</ul>';
}
private static function alphabet_keys_sorting(array $input, $ru_symbol='#') {
$range = range('A', 'Z');
reset($input);
$output = array();
foreach ($range as $letter) {
foreach ($input as $key => $val) {
if ($val[0] == $letter) {
$output[$letter][$key] = $val;
}
elseif (preg_match('/^[А-Я]+/i', $val)) {
$output[$ru_symbol][$key] = $val;
}
}
}
$ru = $output[$ru_symbol];
unset($output[$ru_symbol]);
$output[$ru_symbol] = $ru;
return $output;
}
}
Re: РЕШЕНО. Как вывести по алфавиту?
А можно узнать, чем отличается обычная сортировка от по алфавиту???
Re: РЕШЕНО. Как вывести по алфавиту?
Вы ссылку смотрели? http://www.automobile.ru/catalog/?sector=allTM123 писал(а):А можно узнать, чем отличается обычная сортировка от по алфавиту???
Re: РЕШЕНО. Как вывести по алфавиту?
Да и почему нельзя было использовать order
Re: РЕШЕНО. Как вывести по алфавиту?
Типа не просто сортировка, а наверное по группам разбито.
Re: РЕШЕНО. Как вывести по алфавиту?
то что написано на viewtopic.php?f=4&t=3651&p=22310#p22238 работает, группирует по буквам уже работает на http://yii.cerato.ru/zapdd/brands/
Re: РЕШЕНО. Как вывести по алфавиту?
Ну если речь идет о группировке по буквам, то надо сказать что в приведенном примере работает только на латинице.
И все таки хочется понять, вопрос стоял о группировке по буквам или все таки сортировки по алфавиту и если второе, чем не устроил простой order by.
И все таки хочется понять, вопрос стоял о группировке по буквам или все таки сортировки по алфавиту и если второе, чем не устроил простой order by.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: РЕШЕНО. Как вывести по алфавиту?
вставлю и я свои две копейки
во-первых не правильно делать
правильно
во-вторых, все можно сделать одним запросом и одним циклом (если задача мне ясна правильно)
во-первых не правильно делать
Код: Выделить всё
$this->model = new $this->modelName;
$this->model = $this->model->findAll();
Код: Выделить всё
$this->model = CActiveRecord::model($this->modelName)->findAll();
Код: Выделить всё
// получаем все модели сортируя по заголовку
$models=MyModel::model()->findAll(array('order'=>'title ASC'));
//выводим список
$letter=null;
foreach($models as $model){
if($letter===null||$letter!=$model->title[0]){
$letter=$model->title[0];
echo CHtml::tag('li',array(),$letter);
}
echo CHtml::tag('li',array(),$model->title);
}
Жду Yii 3!
Re: РЕШЕНО. Как вывести по алфавиту?
2 mc-bear
делалось на скорую руку, чтобы просто понять как, а потом уже причесывать. А суда выложит код в таком виде для обсуждения не более.
делалось на скорую руку, чтобы просто понять как, а потом уже причесывать. А суда выложит код в таком виде для обсуждения не более.
Re: РЕШЕНО. Как вывести по алфавиту?
)) главное, что работает.
Может есть более изящное решение. Может кто знает?
Может есть более изящное решение. Может кто знает?
Re: РЕШЕНО. Как вывести по алфавиту?
Код: Выделить всё
if($letter===null||$letter!=$model->title[0])
#
ВАЗ
ВИС
ГАЗ
ЗАЗ
ЗИЛ
ИЖ
КАМАЗ
ЛУАЗ
Москвич
СеАЗ
СМЗ
ТагАЗ
УАЗ