Доброго дня! У меня вполне такой ламерский вопрос. Как сделать сортировку новостей по дате в обратном порядке. Выводятся новости в порядке их создания, т.е. сначала самые ранние даты, потом более поздние. Вот тут результат: http://www.asepro.ru/novosti А надо наоборот, как у людей - сначала последние новости (с бОльшей датой), потом ранние. Вот сам скрипт: PHP: <?php $this->renderPartial('application.views.p arts.slider', array()) ?> <div class="site-content2"> <?php// $this->renderPartial('application.views.p arts.l-col', array()) ?> <?php// $this->renderPartial('application.views.p arts.r-col', array('news' => true)) ?> <div> <h1>Сейсмика - испытания, расчеты и сертификаты сейсмостойкости: http://www.asepro.ru</h1] <h2 class="content-title"><?=$sectionData->name;?></h2> <div class="news-list"> <? if (!isset($newsData)): ?> <? if ($allNews): ?> <? foreach ($allNews as $k=>$v):?> <div class="news-item news-item-archive"> <div class="news-item-date"><?=date('d.m.Y',strtotime($v->date));?></div> <div class="news-item-content"> <?=$v->name;?> </div> <a href="/<?=$sectionData->alias;?>/<?=$v->id;?>" class="news-item-more">Читать целиком</a> </div> <? endforeach; ?> <? if ( $pages->pageCount > 1 ): ?> <?=HTML:ager($pages, '/'.$sectionData->alias.'/?page={page}')?> <? endif; ?> <? else: ?> <div><p>Новостей нет.</p></div> <?endif;?> <? else:?> <div class="news-item news-item-archive"> <div class="news-item-date"><?=date('d.m.Y',strtotime($ne wsData->date));?></div> <div class="news-item-content"> <h3><?=$newsData->name;?></h3> <p><?=$newsData->text;?></p> </div> </div> <? endif;?> </div> </div> </div> Заранее спасибо!
Спасибо, но прочитав ничего не понял )) как я этот array вставлю в foreach? Или надо заменить? Неужели нельзя в моем коде где-то вставить пару знаков или поменять их, чтобы просто сортировка поменялась?
относительно недавно задавал такой вопрос, вот глянь тему https://php.ru/forum/threads/vyborka-iz-bd-v-obratnom-porjadke.59549/
Это же на фреймворке сделано? Сортировку писем надо задавать в моделе или сервисном слое, а не в виде. При подготовке запроса к БД
короче. кто сделает дам 100р сразу )) через КИВИ )) --- Добавлено --- да это фреймворк какогото кустарного изготвления
На сайте даты у новостей это даты чего? Создания, редактирования? А то там какой-то бардак с ними. (соблюден оригинальный порядок) 03.08.2014 02.04.2014 18.06.2014 23.07.2014 26.05.2014
На сто рублей можно 17 мороженок купить @Андрей Рейган 15 строка, это PHP: <? foreach ($allNews as $k=>$v):?> замени на PHP: <? foreach ( array_reverse($allNews) as $k=>$v):?> может заработает
дата вписывается при создании новости, какую хочешь такую и вписываешь. да, вы правы, я и не заметил, действительно сортировка кривая. --- Добавлено --- заработало ) немного кривовато: http://www.asepro.ru/novosti но это потому что сортирует как выяснилось не по дате, а по ID. в ЛС скиньте куда вам 100р перевести ) если сделаете чтобы именно по дате сортировало, а не по ИД. еще 100р добавлю )) будет 34 мороженки ))) недавно в магазине ДА! видел стаканчики по 6р )) так что и правда почти 17 )) 16 и 6 в периоде )))
Магазин ДА! если чо в Москве )) вообще практика показывает, в крупных супермаркетах москвы, цены меньше чем в самой жопе россии. Я сам в Мытищах работаю - тут цены в задрипанных продуктовых дороже чем у меня возле дома в ЦАО в супермаркете. Типа Биллы и Пятерочки
В любом случае, ко вьюхе всё должно быть уже отсортировано. Найдите место в коде, где это всё из базы вытаскивается. Поскольку иначе у вас не будут вообще последние новости показываться
Можно правильно сделать как советует @mkramer, или по простому, может будет нормально работать. Надо отладку делать, там после 14 строки можно вставить PHP: <?php echo "<pre>"; var_export($allNews); echo "</pre>"; а мы посмотрим структуру массива echo $allNews
Насколько я понимаю. Это здесь. Пробовал заменить array() на array_reverse() в 8 строчке. не помогло. таки может проще оставить как denis предложил? Пробовал DESC убрать - тоже не помогло. PHP: <?php class CommonController extends Controller { public function actionIndex() { $allNews = array(); $this->newPage = 1; $this->layout = 'main1'; $allNews = News::model()->findAll(array("condition" => "t.vis = '1'", "order" => "t.date DESC", "limit" => 7)); if ($this->title == '') $this->title = ''; $reviews = Responses::Model()->findAll( array("condition" => " t.vis = '1' ", "order" => "t.posled") ); $certs = Certs::Model()->findAll( array("condition" => " t.vis = '1' ", "order" => "t.posled") ); $this->render('index', array ( 'allNews' => $allNews, 'reviews' => $reviews, 'certs' => $certs )); } public function actionFirst( $slug="" ) { $this->layout = 'main1'; $URI = $this->reqUri(); $PRQ = explode('/', $slug); $slug = ""; $slug2 = ""; $slug3 = ""; $slug4 = ""; if ( isset($PRQ[0]) ) $slug = $PRQ[0]; if ( isset($PRQ[1]) ) $slug2 = $PRQ[1]; if ( isset($PRQ[2]) ) $slug3 = $PRQ[2]; if ( isset($PRQ[3]) ) $slug4 = $PRQ[3]; $sectionData = Sections::model()->find( array("condition" => "t.alias = ".Yii::app()->db->quoteValue($slug)."") ); if ($sectionData) { $this->cSection = $sectionData; if( $sectionData->id == 36 ) { if ( $slug2 == '' ) { $crumbs = $this->bcForm($sectionData); $this->add2NaviArr($crumbs); if ( $this->title == '' ) $this->title = $sectionData->name; $criteria = new CDbCriteria(); $criteria->condition= "t.vis = '1'"; $criteria->order = "t.posled"; $count= News::model()->count($criteria); $pages=new CPagination($count); $pages->pageSize=12; $pages->applyLimit($criteria); $allNews = News::model()->findAll($criteria); $this->render('news', array ( 'allNews' => $allNews, 'pages' => $pages, 'sectionData' => $sectionData )); } else { $newsData = News::model()->find( array("condition" => "t.id = '".(int) $slug2."'") ); if (!$newsData) throw new CHttpException(404); if ( $this->title == '' ) $this->title = $newsData->name; $this->add2Navi( $sectionData->alias, $sectionData->name ); $this->add2Navi( '', $newsData->name ); $other = News::model()->findAll( array("condition" => "t.vis = '1' AND t.id <> '".$newsData->id."'", "order" => "t.posled", "limit" => 3) ); $this->render('news', array ( 'newsData' => $newsData, 'sectionData' => $sectionData, 'other' => $other )); } } elseif( $sectionData->id == 32 ) { if ( $slug2 == '' ) { $crumbs = $this->bcForm($sectionData); $this->add2NaviArr($crumbs); if ( $this->title == '' ) $this->title = $sectionData->name; $criteria = new CDbCriteria(); $criteria->condition= "t.vis = '1'"; $criteria->order = "t.posled"; $count= Work::model()->count($criteria); $pages=new CPagination($count); $pages->pageSize=12; $pages->applyLimit($criteria); $allWorks = Work::model()->findAll($criteria); $this->render('works', array ( 'allWorks' => $allWorks, 'pages' => $pages, 'sectionData' => $sectionData )); } else { $worksData = Work::model()->find( array("condition" => "t.id = '".(int) $slug2."'") ); if (!$worksData) throw new CHttpException(404); if ( $this->title == '' ) $this->title = $worksData->name; $this->add2Navi( $sectionData->alias, $sectionData->name ); $this->add2Navi( '', $worksData->name ); $other = Work::model()->findAll( array("condition" => "t.vis = '1' AND t.id <> '".$worksData->id."'", "order" => "t.posled", "limit" => 3) ); $this->render('news', array ( 'worksData' => $worksData, 'sectionData' => $sectionData, 'other' => $other )); } } elseif( $sectionData->id == 35 ) { $this->render('form', array ( 'sectionData' => $sectionData, )); } else { $crumbs = $this->bcForm($sectionData); $this->add2NaviArr($crumbs); if ( $this->title == '' ) $this->title = $sectionData->name; $lnews = array(); if ( $sectionData->id == 1 ) { $lnews = News::model()->findAll( array("condition" => "t.vis = '1'", "order" => "t.date DESC", "limit" => 2) ); } if ( $sectionData->id == 3 ) { $this->render('contacts', array ( 'sectionData' => $sectionData, )); } else { $this->render('sections', array ( 'sectionData' => $sectionData, 'lnews' => $lnews )); } } } else { throw new CHttpException(404); } } public function actionMap() { $this->add2Navi('/karta-sayta', 'Карта сайта' ); $this->title = "Карта сайта"; $rArr = array(); $sections = Sections::model()->findAll( array("order" => "t.posled") ); foreach ($sections as $k => $v) { $rArr[] = array('link' => '/'.$v->alias, 'name' => $v->name); } $sections = News::model()->findAll(); foreach ($sections as $k => $v) { $rArr[] = array('link' => '/novosti/'.$v->id, 'name' => $v->name); } $criteria = new CdbCriteria(); $criteria->condition = "t.vis = '1'"; $criteria->order = "t.posled"; $sections = Items::model()->findAll($criteria); foreach ($sections as $k => $v) { $rArr[] = array('link' => 'katalog/'.$v->alias, 'name' => $v->name); } $xmlMap = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <url> <loc>http://asepro.ru</loc> </url>'; foreach ($rArr as $k=>$v) { $xmlMap .= " <url> <loc>http://asepro.ru".$v['link']."</loc> </url> "; } $xmlMap .= '</urlset>'; file_put_contents($_SERVER['DOCUMENT_ROOT'].'/sitemap.xml', $xmlMap); $this->render('map', array ( 'rArr' => $rArr )); } public function actionError() { if($error = Yii::app()->errorHandler->error) { $this->title = 'Ошибка '.$error['code'].', страница не найдена'; $this->render('error', $error); } } }
так ну с названием разобрались ) а по существу вопроса? )) что в контроллере поменять, чтобы выводило грамотно, причем не просто REVERSE, а именно по дате чтобы сортировало, а не по ID ? (ID - это порядоковый номер новости, т.е. тот порядок, в котором они создавались. Скажем, если я делаю новость с датой раньше последней, то она будет выше нее, просто потому что я ее последней добавил. А надо чтобы именно по ДАТЕ сортировало) Denis. 200р на кону уже будет ))
Можно попробовать на 95 строке PHP: "order"=>"t.date" на PHP: "order"=>"t.date DESC" или строка адская строка 66 PHP: $criteria->order = "t.date DESC"; Ставки растут, скоро обеспечу себя мореном на месяца два
ну тут вроде уже сортировка по убыванию даты задана. Но всё равно не понятно почему такой бардак с датами тогда.