РЕШЕНО. Как вывести по алфавиту?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
kvs
Сообщения: 9
Зарегистрирован: 2010.06.14, 21:18
Откуда: Воронеж

РЕШЕНО. Как вывести по алфавиту?

Сообщение kvs »

Доброго времени суток.

Встал вопрос о сортировке списка, пример http://www.automobile.ru/catalog/?sector=all. Как сделать это на Yii ума не дам.

Может кто поможет. Может кто уже писал такое?

Заранее благодарю.
Последний раз редактировалось kvs 2011.07.16, 11:27, всего редактировалось 2 раза.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Как отсортировать по названию?

Сообщение Ekstazi »

А причем здесь сортировка ? Слету не отвечу. Но там нужен один sql запрос для вывода доступных букв. + Критерий в CActiveDataProvider при выводе. И все. Форма поиска стандартна.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Как отсортировать по названию?

Сообщение rak »

гы, я сам пытался долго найти где и как там что-то можно отсортировать, только потом понял, что речь о алфавите :)
Аватара пользователя
kvs
Сообщения: 9
Зарегистрирован: 2010.06.14, 21:18
Откуда: Воронеж

Re: Как отсортировать по названию?

Сообщение kvs »

может конечно я и не правильно сформулировал заголовок, но а вывести по алфавиту как?
Аватара пользователя
kvs
Сообщения: 9
Зарегистрирован: 2010.06.14, 21:18
Откуда: Воронеж

Re: Как вывести по алфавиту?

Сообщение kvs »

написал, вроде работает. Может кому пригодиться

Код: Выделить всё

<?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;
  }

}
 
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение TM123 »

А можно узнать, чем отличается обычная сортировка от по алфавиту???
Аватара пользователя
kvs
Сообщения: 9
Зарегистрирован: 2010.06.14, 21:18
Откуда: Воронеж

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение kvs »

TM123 писал(а):А можно узнать, чем отличается обычная сортировка от по алфавиту???
Вы ссылку смотрели? http://www.automobile.ru/catalog/?sector=all
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение TM123 »

Да и почему нельзя было использовать order
systemiv
Сообщения: 360
Зарегистрирован: 2011.06.26, 22:55
Откуда: Липецк
Контактная информация:

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение systemiv »

Типа не просто сортировка, а наверное по группам разбито.
Аватара пользователя
kvs
Сообщения: 9
Зарегистрирован: 2010.06.14, 21:18
Откуда: Воронеж

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение kvs »

то что написано на viewtopic.php?f=4&t=3651&p=22310#p22238 работает, группирует по буквам уже работает на http://yii.cerato.ru/zapdd/brands/
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение TM123 »

Ну если речь идет о группировке по буквам, то надо сказать что в приведенном примере работает только на латинице.

И все таки хочется понять, вопрос стоял о группировке по буквам или все таки сортировки по алфавиту и если второе, чем не устроил простой order by.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение samdark »

По буквам, очевидно.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение slavcodev »

вставлю и я свои две копейки
во-первых не правильно делать

Код: Выделить всё

$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!
Аватара пользователя
kvs
Сообщения: 9
Зарегистрирован: 2010.06.14, 21:18
Откуда: Воронеж

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение kvs »

2 mc-bear
делалось на скорую руку, чтобы просто понять как, а потом уже причесывать. А суда выложит код в таком виде для обсуждения не более.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение slavcodev »

вот я и обсуждаю :)
Жду Yii 3!
Аватара пользователя
kvs
Сообщения: 9
Зарегистрирован: 2010.06.14, 21:18
Откуда: Воронеж

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение kvs »

)) главное, что работает.

Может есть более изящное решение. Может кто знает?
Аватара пользователя
kvs
Сообщения: 9
Зарегистрирован: 2010.06.14, 21:18
Откуда: Воронеж

Re: РЕШЕНО. Как вывести по алфавиту?

Сообщение kvs »

Код: Выделить всё

if($letter===null||$letter!=$model->title[0]) 
проверка по лучше будет, только есть одно но вместо русских букв должен быть знак # для всех, пример:
#
ВАЗ
ВИС
ГАЗ
ЗАЗ
ЗИЛ
ИЖ
КАМАЗ
ЛУАЗ
Москвич
СеАЗ
СМЗ
ТагАЗ
УАЗ
Ответить