За последние 24 часа нас посетил 21171 программист и 1621 робот. Сейчас ищут 1492 программиста ...

Сортировка новостей в обратном порядке - foreach

Тема в разделе "Сделайте за меня", создана пользователем Андрей Рейган, 26 авг 2016.

  1. Андрей Рейган

    Андрей Рейган Новичок

    С нами с:
    26 авг 2016
    Сообщения:
    10
    Симпатии:
    0
    Доброго дня! У меня вполне такой ламерский вопрос.

    Как сделать сортировку новостей по дате в обратном порядке.

    Выводятся новости в порядке их создания, т.е. сначала самые ранние даты, потом более поздние.

    Вот тут результат: http://www.asepro.ru/novosti

    А надо наоборот, как у людей - сначала последние новости (с бОльшей датой), потом ранние.

    Вот сам скрипт:

    PHP:
    1. <?php $this->renderPartial('application.views.p arts.slider', array()) ?>
    2.  
    3. <div class="site-content2">
    4. <?php// $this->renderPartial('application.views.p arts.l-col', array()) ?>
    5.  
    6. <?php// $this->renderPartial('application.views.p arts.r-col', array('news' => true)) ?>
    7.  
    8. <div>
    9. <h1>Сейсмика - испытания, расчеты и сертификаты сейсмостойкости: http://www.asepro.ru</h1]
    10. <h2 class="content-title"><?=$sectionData->name;?></h2>
    11.  
    12. <div class="news-list">
    13. <? if (!isset($newsData)): ?>
    14. <? if ($allNews): ?>
    15. <? foreach ($allNews as $k=>$v):?>
    16. <div class="news-item news-item-archive">
    17. <div class="news-item-date"><?=date('d.m.Y',strtotime($v->date));?></div>
    18.  
    19. <div class="news-item-content">
    20. <?=$v->name;?>
    21. </div>
    22.  
    23. <a href="/<?=$sectionData->alias;?>/<?=$v->id;?>" class="news-item-more">Читать целиком</a>
    24. </div>
    25. <? endforeach; ?>
    26. <? if ( $pages->pageCount > 1 ): ?>
    27. <?=HTML:ager($pages, '/'.$sectionData->alias.'/?page={page}')?>
    28. <? endif; ?>
    29. <? else: ?>
    30. <div><p>Новостей нет.</p></div>
    31. <?endif;?>
    32. <? else:?>
    33. <div class="news-item news-item-archive">
    34. <div class="news-item-date"><?=date('d.m.Y',strtotime($ne wsData->date));?></div>
    35.  
    36. <div class="news-item-content">
    37. <h3><?=$newsData->name;?></h3>
    38. <p><?=$newsData->text;?></p>
    39. </div>
    40. </div>
    41. <? endif;?>
    42. </div>
    43. </div>
    44. </div>
    Заранее спасибо!
     
    #1 Андрей Рейган, 26 авг 2016
    Последнее редактирование модератором: 26 авг 2016
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. Андрей Рейган

    Андрей Рейган Новичок

    С нами с:
    26 авг 2016
    Сообщения:
    10
    Симпатии:
    0
    Спасибо, но прочитав ничего не понял )) как я этот array вставлю в foreach? Или надо заменить?
    Неужели нельзя в моем коде где-то вставить пару знаков или поменять их, чтобы просто сортировка поменялась?
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  5. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Это же на фреймворке сделано? Сортировку писем надо задавать в моделе или сервисном слое, а не в виде. При подготовке запроса к БД
     
  7. Андрей Рейган

    Андрей Рейган Новичок

    С нами с:
    26 авг 2016
    Сообщения:
    10
    Симпатии:
    0
    короче. кто сделает дам 100р сразу )) через КИВИ ))
    --- Добавлено ---
    да это фреймворк какогото кустарного изготвления
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Ну за мороженное никто ничего за тебя делать не будет здесь
     
  9. bikerlex

    bikerlex Активный пользователь

    С нами с:
    2 дек 2014
    Сообщения:
    344
    Симпатии:
    40
    На сайте даты у новостей это даты чего? Создания, редактирования? А то там какой-то бардак с ними.
    (соблюден оригинальный порядок)
    03.08.2014
    02.04.2014
    18.06.2014
    23.07.2014
    26.05.2014
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    На сто рублей можно 17 мороженок купить :rolleyes:

    @Андрей Рейган
    15 строка, это
    PHP:
    1. <? foreach ($allNews as $k=>$v):?>
    замени на
    PHP:
    1. <? foreach ( array_reverse($allNews) as $k=>$v):?>
    может заработает
     
  11. Андрей Рейган

    Андрей Рейган Новичок

    С нами с:
    26 авг 2016
    Сообщения:
    10
    Симпатии:
    0
    дата вписывается при создании новости, какую хочешь такую и вписываешь. да, вы правы, я и не заметил, действительно сортировка кривая.
    --- Добавлено ---
    заработало ) немного кривовато: http://www.asepro.ru/novosti но это потому что сортирует как выяснилось не по дате, а по ID. в ЛС скиньте куда вам 100р перевести )
    если сделаете чтобы именно по дате сортировало, а не по ИД. еще 100р добавлю )) будет 34 мороженки )))

    недавно в магазине ДА! видел стаканчики по 6р )) так что и правда почти 17 )) 16 и 6 в периоде )))
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Может в Молдове. У нас в Питере от силы 3
     
  13. Андрей Рейган

    Андрей Рейган Новичок

    С нами с:
    26 авг 2016
    Сообщения:
    10
    Симпатии:
    0
    Магазин ДА! если чо в Москве )) вообще практика показывает, в крупных супермаркетах москвы, цены меньше чем в самой жопе россии. Я сам в Мытищах работаю - тут цены в задрипанных продуктовых дороже чем у меня возле дома в ЦАО в супермаркете. Типа Биллы и Пятерочки
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    В любом случае, ко вьюхе всё должно быть уже отсортировано. Найдите место в коде, где это всё из базы вытаскивается. Поскольку иначе у вас не будут вообще последние новости показываться
     
    denis01 нравится это.
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно правильно сделать как советует @mkramer, или по простому, может будет нормально работать.

    Надо отладку делать, там после 14 строки можно вставить
    PHP:
    1. <?php
    2. echo "<pre>";
    3. var_export($allNews);
    4. echo "</pre>";
    а мы посмотрим структуру массива echo $allNews
     
  16. Андрей Рейган

    Андрей Рейган Новичок

    С нами с:
    26 авг 2016
    Сообщения:
    10
    Симпатии:
    0
    Насколько я понимаю. Это здесь. Пробовал заменить array() на array_reverse() в 8 строчке. не помогло. таки может проще оставить как denis предложил? Пробовал DESC убрать - тоже не помогло.
    PHP:
    1. <?php
    2.  
    3. class CommonController extends Controller
    4. {
    5.     public function actionIndex()
    6.     {
    7.      
    8.         $allNews = array();
    9.  
    10.         $this->newPage = 1;
    11.         $this->layout = 'main1';
    12.         $allNews = News::model()->findAll(array("condition" => "t.vis = '1'", "order" => "t.date DESC", "limit" => 7));
    13.  
    14.      
    15.         if ($this->title == '') $this->title = '';
    16.  
    17.         $reviews = Responses::Model()->findAll( array("condition" => " t.vis = '1' ", "order" => "t.posled") );
    18.         $certs   = Certs::Model()->findAll( array("condition" => " t.vis = '1' ", "order" => "t.posled") );
    19.         $this->render('index', array
    20.         (
    21.             'allNews' => $allNews,
    22.             'reviews' => $reviews,
    23.             'certs'   => $certs
    24.         ));
    25.     }
    26.  
    27.  
    28.  
    29.     public function actionFirst( $slug="" )
    30.     {
    31.                     $this->layout = 'main1';
    32.         $URI  = $this->reqUri();
    33.  
    34.         $PRQ  = explode('/', $slug);
    35.  
    36.         $slug  = "";
    37.         $slug2 = "";
    38.         $slug3 = "";
    39.         $slug4 = "";
    40.  
    41.         if ( isset($PRQ[0]) ) $slug  = $PRQ[0];
    42.         if ( isset($PRQ[1]) ) $slug2 = $PRQ[1];
    43.         if ( isset($PRQ[2]) ) $slug3 = $PRQ[2];
    44.         if ( isset($PRQ[3]) ) $slug4 = $PRQ[3];
    45.  
    46.  
    47.         $sectionData = Sections::model()->find( array("condition" => "t.alias = ".Yii::app()->db->quoteValue($slug)."") );
    48.         if ($sectionData)
    49.         {
    50.  
    51.             $this->cSection = $sectionData;
    52.  
    53.             if( $sectionData->id == 36 )
    54.             {
    55.                 if ( $slug2 == '' )
    56.                 {
    57.                     $crumbs = $this->bcForm($sectionData);
    58.                     $this->add2NaviArr($crumbs);
    59.  
    60.                     if ( $this->title == '' ) $this->title = $sectionData->name;
    61.  
    62.  
    63.  
    64.                     $criteria = new CDbCriteria();
    65.                     $criteria->condition= "t.vis = '1'";
    66.                     $criteria->order = "t.posled";
    67.  
    68.  
    69.  
    70.                     $count= News::model()->count($criteria);
    71.  
    72.                     $pages=new CPagination($count);
    73.                     $pages->pageSize=12;
    74.                     $pages->applyLimit($criteria);
    75.  
    76.                     $allNews = News::model()->findAll($criteria);
    77.  
    78.                     $this->render('news', array
    79.                     (
    80.                         'allNews' => $allNews,
    81.                         'pages' => $pages,
    82.                         'sectionData' => $sectionData
    83.                     ));
    84.  
    85.                 }
    86.                 else
    87.                 {
    88.                     $newsData = News::model()->find( array("condition" => "t.id = '".(int) $slug2."'") );
    89.                     if (!$newsData) throw new CHttpException(404);
    90.  
    91.                     if ( $this->title == '' ) $this->title = $newsData->name;
    92.                     $this->add2Navi( $sectionData->alias, $sectionData->name );
    93.                     $this->add2Navi( '', $newsData->name );
    94.  
    95.                     $other = News::model()->findAll( array("condition" => "t.vis = '1' AND t.id <> '".$newsData->id."'", "order" => "t.posled", "limit" => 3) );
    96.  
    97.                     $this->render('news', array
    98.                     (
    99.                         'newsData'    => $newsData,
    100.                         'sectionData' => $sectionData,
    101.                         'other'         => $other
    102.                     ));
    103.                 }
    104.             }
    105.             elseif( $sectionData->id == 32 )
    106.             {
    107.                 if ( $slug2 == '' )
    108.                 {
    109.                     $crumbs = $this->bcForm($sectionData);
    110.                     $this->add2NaviArr($crumbs);
    111.  
    112.                     if ( $this->title == '' ) $this->title = $sectionData->name;
    113.  
    114.  
    115.  
    116.                     $criteria = new CDbCriteria();
    117.                     $criteria->condition= "t.vis = '1'";
    118.                     $criteria->order = "t.posled";
    119.  
    120.  
    121.  
    122.                     $count= Work::model()->count($criteria);
    123.  
    124.                     $pages=new CPagination($count);
    125.                     $pages->pageSize=12;
    126.                     $pages->applyLimit($criteria);
    127.  
    128.                     $allWorks = Work::model()->findAll($criteria);
    129.  
    130.                     $this->render('works', array
    131.                     (
    132.                         'allWorks' => $allWorks,
    133.                         'pages' => $pages,
    134.                         'sectionData' => $sectionData
    135.                     ));
    136.  
    137.                 }
    138.                 else
    139.                 {
    140.                     $worksData = Work::model()->find( array("condition" => "t.id = '".(int) $slug2."'") );
    141.                     if (!$worksData) throw new CHttpException(404);
    142.  
    143.                     if ( $this->title == '' ) $this->title = $worksData->name;
    144.                     $this->add2Navi( $sectionData->alias, $sectionData->name );
    145.                     $this->add2Navi( '', $worksData->name );
    146.  
    147.                     $other = Work::model()->findAll( array("condition" => "t.vis = '1' AND t.id <> '".$worksData->id."'", "order" => "t.posled", "limit" => 3) );
    148.  
    149.                     $this->render('news', array
    150.                     (
    151.                         'worksData'    => $worksData,
    152.                         'sectionData' => $sectionData,
    153.                         'other'         => $other
    154.                     ));
    155.                 }
    156.             }
    157.             elseif( $sectionData->id == 35 )
    158.             {
    159.  
    160.                 $this->render('form', array
    161.                 (
    162.                     'sectionData' => $sectionData,
    163.                 ));
    164.  
    165.             }
    166.             else
    167.             {
    168.  
    169.                 $crumbs = $this->bcForm($sectionData);
    170.                 $this->add2NaviArr($crumbs);
    171.  
    172.                 if ( $this->title == '' ) $this->title = $sectionData->name;
    173.  
    174.                 $lnews = array();
    175.                 if ( $sectionData->id == 1 )
    176.                 {
    177.                     $lnews = News::model()->findAll( array("condition" => "t.vis = '1'", "order" => "t.date DESC", "limit" => 2) );
    178.                 }
    179.  
    180.                 if ( $sectionData->id == 3 )
    181.                 {
    182.                     $this->render('contacts', array
    183.                     (
    184.                         'sectionData' => $sectionData,
    185.                     ));
    186.                 }
    187.                 else
    188.                 {
    189.                     $this->render('sections', array
    190.                     (
    191.                         'sectionData' => $sectionData,
    192.                         'lnews'         => $lnews
    193.                     ));
    194.                 }
    195.             }
    196.         }
    197.         else
    198.         {
    199.             throw new CHttpException(404);
    200.         }
    201.     }
    202.  
    203.     public function actionMap()
    204.     {
    205.         $this->add2Navi('/karta-sayta', 'Карта сайта' );
    206.  
    207.         $this->title = "Карта сайта";
    208.  
    209.         $rArr      = array();
    210.  
    211.         $sections = Sections::model()->findAll( array("order" => "t.posled") );
    212.  
    213.         foreach ($sections as $k => $v)
    214.         {
    215.             $rArr[] = array('link' => '/'.$v->alias, 'name' => $v->name);
    216.         }
    217.  
    218.         $sections = News::model()->findAll();
    219.  
    220.         foreach ($sections as $k => $v)
    221.         {
    222.             $rArr[] = array('link' => '/novosti/'.$v->id, 'name' => $v->name);
    223.         }
    224.  
    225.         $criteria = new CdbCriteria();
    226.         $criteria->condition = "t.vis = '1'";
    227.         $criteria->order    = "t.posled";
    228.  
    229.         $sections = Items::model()->findAll($criteria);
    230.         foreach ($sections as $k => $v)
    231.         {
    232.             $rArr[] = array('link' => 'katalog/'.$v->alias, 'name' => $v->name);
    233.         }
    234.  
    235.  
    236.  
    237.         $xmlMap = '<?xml version="1.0" encoding="UTF-8"?>
    238.                    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
    239.                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    240.                   xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
    241.                    http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    242.            <url>
    243.             <loc>http://asepro.ru</loc>
    244.            </url>';
    245.  
    246.         foreach ($rArr as $k=>$v)
    247.         {
    248.             $xmlMap .= "
    249.            <url>
    250.             <loc>http://asepro.ru".$v['link']."</loc>
    251.            </url>
    252.            ";
    253.         }
    254.  
    255.         $xmlMap .= '</urlset>';
    256.         file_put_contents($_SERVER['DOCUMENT_ROOT'].'/sitemap.xml', $xmlMap);
    257.  
    258.  
    259.         $this->render('map', array
    260.         (
    261.             'rArr' => $rArr
    262.         ));
    263.  
    264.     }
    265.  
    266.     public function actionError()
    267.     {
    268.         if($error = Yii::app()->errorHandler->error)
    269.         {
    270.             $this->title = 'Ошибка '.$error['code'].', страница не найдена';
    271.  
    272.             $this->render('error', $error);
    273.         }
    274.     }
    275. }
     
    #16 Андрей Рейган, 26 авг 2016
    Последнее редактирование модератором: 26 авг 2016
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    А что за framework? Это Yii2?
     
  18. bikerlex

    bikerlex Активный пользователь

    С нами с:
    2 дек 2014
    Сообщения:
    344
    Симпатии:
    40
    99% что он
     
    denis01 нравится это.
  19. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Там разве не CController или я путаю?
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    denis01 нравится это.
  21. Андрей Рейган

    Андрей Рейган Новичок

    С нами с:
    26 авг 2016
    Сообщения:
    10
    Симпатии:
    0
    вот скрин админки. вверху ЛОГО это от студии которая делала сайт. внизу написано DCS V1.4.
    upload_2016-8-26_14-53-10.png
     
  22. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @bikerlex точно Yii1, просто Controller видимо унаследован от CController
     
  23. Андрей Рейган

    Андрей Рейган Новичок

    С нами с:
    26 авг 2016
    Сообщения:
    10
    Симпатии:
    0
    так ну с названием разобрались ) а по существу вопроса? )) что в контроллере поменять, чтобы выводило грамотно, причем не просто REVERSE, а именно по дате чтобы сортировало, а не по ID ? (ID - это порядоковый номер новости, т.е. тот порядок, в котором они создавались. Скажем, если я делаю новость с датой раньше последней, то она будет выше нее, просто потому что я ее последней добавил. А надо чтобы именно по ДАТЕ сортировало) Denis. 200р на кону уже будет ))
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно попробовать на 95 строке

    PHP:
    1. "order"=>"t.date"
    на
    PHP:
    1. "order"=>"t.date DESC"
    или

    строка адская строка 66
    PHP:
    1.  $criteria->order = "t.date DESC";
    Ставки растут, скоро обеспечу себя мореном на месяца два :eek:
     
  25. bikerlex

    bikerlex Активный пользователь

    С нами с:
    2 дек 2014
    Сообщения:
    344
    Симпатии:
    40
    ну тут вроде уже сортировка по убыванию даты задана. Но всё равно не понятно почему такой бардак с датами тогда.