We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 1843
    • 35 Posts
    Народ, хочу сделать следующую штуку

    - Необходимо вывести новости за весь текущий год
    - Вывести архив новостей за все предыдущие года ( 2005, 2004, 2003, ...)
      • 1843
      • 35 Posts
      Держим сниппет

      Вызов сниппета

      [[NewsPro? &startID=`11`]]

      Код сниппета "NewsPro"

      <?php
      if ($_GET[’years’]==true){
      // Сниппет вывода новостей за текущий год
      $return="";

      // SQL Запрос к базе
      $q="SELECT * FROM `modx_site_content` WHERE `published`=’1’ AND `parent`=’$startID’ ORDER BY pub_date DESC, deletedon ASC";

      $q=mysql_query($q);

      // Перебор значенй цикла, выбираем "заполненные даты"
      // Приорите у даты бубликации "pub_date"
      // Если данная дата не указана бирем дату создания "createdon"
      while($r=mysql_fetch_array($q))
      {
      if ($r["pub_date"] == false)
      {
      if (date(’Y’,$r["createdon"]) == $_GET[’years’])
      {
      $da = $r["createdon"]; $pagetitle = $r["pagetitle"]; $introtext = $r["introtext"]; $id = $r["id"]; $content = $r["content"];
      $in_news[] = array("date" => $da, "id" => $id, "pagetitle" => $pagetitle, "introtext" => $introtext, "content" => $content);
      }
      }

      else
      {
      if (date(’Y’,$r["pub_date"]) == $_GET[’years’])
      {
      $da = $r["pub_date"]; $pagetitle = $r["pagetitle"]; $introtext = $r["introtext"]; $id = $r["id"]; $content = $r["content"];
      $in_news[] = array("date" => $da, "id" => $id, "pagetitle" => $pagetitle, "introtext" => $introtext, "content" => $content);
      }
      }

      }


      function mysort($a,$b){
      return strcmp($a[’date’], $b[’date’]);
      }

      // Сортируем массив по дате
      usort($in_news, ’mysort’);

      // Cортировка массива в обратном порядке
      $in_news = array_reverse($in_news);


      // Вывод результата
      for ($i = 0; $i < sizeof($in_news); $i++) {
      $return.= "<p><span class=dates>[".date(’d.m.Y’,$in_news[$i][’date’])."]</span> ";
      if ($in_news[$i][’content’] == true)
      {$return.= "<A href=index.php?id=".$in_news[$i][’id’]." class=news_heade>".$in_news[$i][’pagetitle’]."</A></p>";}
      else
      {$return.= "<span class=news_heade>".$in_news[$i][’pagetitle’]."</span></p>";}
      $return.= "<p>".$in_news[$i][’introtext’];
      if ($in_news[$i][’content’] == true) {$return.= " <a href=index.php?id=".$in_news[$i][’id’]." class=read_more>Подробней...</a></p>";}
      }

      echo $return;

      // Генерация архива

      $return="";
      $return.="Архив новостей: ";

      // SQL Запрос
      $zapros="SELECT * FROM `modx_site_content` WHERE `published`=’1’ AND `parent`=’$startID’ ORDER BY pub_date DESC, deletedon ASC";
      $otvet=mysql_query($zapros);


      while($vv=mysql_fetch_array($otvet))
      {
      if ($vv["pub_date"] == false)
      {$mmm[] = date(’Y’,$vv["createdon"]);}
      else {$mmm[] = date(’Y’,$vv["pub_date"]);}
      }

      // Удаление повторных записей из массива
      $mmm = array_unique($mmm);

      // Вывод результата
      foreach ($mmm as $value) {
      $return.= "<A href=index?id=".$startID."&years=".$value.">".$value."</A> ";
      }
      echo $return;
      }
      else {

      // Сниппет вывода новостей за текущий год
      $return="";

      // SQL Запрос к базе
      $q="SELECT * FROM `modx_site_content` WHERE `published`=’1’ AND `parent`=’$startID’ ORDER BY pub_date DESC, deletedon ASC";

      // Перебор значенй цикла, выбираем "заполненные даты"
      // Приорите у даты бубликации "pub_date"
      // Если данная дата не указана бирем дату создания "createdon"
      $q=mysql_query($q);
      while($r=mysql_fetch_array($q))
      {
      if ($r["pub_date"] == false)
      {
      if (date(’Y’,$r["createdon"]) == date("Y"))
      {
      $da = $r["createdon"]; $pagetitle = $r["pagetitle"]; $introtext = $r["introtext"]; $id = $r["id"]; $content = $r["content"];
      $in_news[] = array("date" => $da, "id" => $id, "pagetitle" => $pagetitle, "introtext" => $introtext, "content" => $content);
      }
      }

      else
      {
      if (date(’Y’,$r["pub_date"]) == date("Y"))
      {
      $da = $r["pub_date"]; $pagetitle = $r["pagetitle"]; $introtext = $r["introtext"]; $id = $r["id"]; $content = $r["content"];
      $in_news[] = array("date" => $da, "id" => $id, "pagetitle" => $pagetitle, "introtext" => $introtext, "content" => $content);
      }
      }

      }

      function mysort($a,$b){
      return strcmp($a[’date’], $b[’date’]);
      }

      usort($in_news, ’mysort’);
      $in_news = array_reverse($in_news);


      for ($i = 0; $i < sizeof($in_news); $i++) {
      $return.= "<p><span class=dates>[".date(’d.m.Y’,$in_news[$i][’date’])."]</span> ";
      if ($in_news[$i][’content’] == true)
      {$return.= "<A href=index.php?id=".$in_news[$i][’id’]." class=news_heade>".$in_news[$i][’pagetitle’]."</A></p>";}
      else
      {$return.= "<span class=news_heade>".$in_news[$i][’pagetitle’]."</span></p>";}
      $return.= "<p>".$in_news[$i][’introtext’];
      if ($in_news[$i][’content’] == true) {$return.= " <a href=index.php?id=".$in_news[$i][’id’]." class=read_more>Подробней...</a></p>";}
      }

      echo $return;

      // Вывод архива

      $return="";
      $return.="Архив новостей: ";
      $zapros="SELECT * FROM `modx_site_content` WHERE `published`=’1’ AND `parent`=’$startID’ ORDER BY pub_date DESC, deletedon ASC";
      $otvet=mysql_query($zapros);


      while($vv=mysql_fetch_array($otvet))
      {
      if ($vv["pub_date"] == false)
      {
      $mmm[] = date(’Y’,$vv["createdon"]);
      }
      else {
      $mmm[] = date(’Y’,$vv["pub_date"]);
      }
      }

      // Удаление повторных записей из массива
      $mmm = array_unique($mmm);

      foreach ($mmm as $value) {
      $return.= "<A href=index?id=".$startID."&years=".$value.">".$value."</A> ";
      }
      echo $return;

      }
      ?>
        • 30354
        • 227 Posts
        Хм... а не проще ли будет как-нибудь составить коллективное ТЗ на разработку модуля новостей, с отдельной базой и всеми необходимыми причендалами?

        Сделать модуль внутри админки, с интерфейсом добавления/удаления/редактиорвания новостей. тогда решатся проблемы с "ужасом в дереве документов"; в целом, это будет выглядеть логичнее, ведь новость — это НЕ_документ. Это просто новость, кусок текста.
        сделать сниппет, который будет выводить новости с архивом со всеми причендалами. Что за, кто против?
          http://www.avizion.ru/ — строим стартап!
          http://tonatos.ru/ — Заходите в гости...
          • 12550
          • 107 Posts
          Я думаю все однозначно за, просто всем лень писать. )
          Хотя конечно было бы здорово. Новости есть на любом сайте и это конечно будет требовать всем и всегда.
            • 24498
            • 7 Posts
            Quote from: iamask at Dec 29, 2006, 04:18 AM

            Я думаю все однозначно за, просто всем лень писать. )
            Хотя конечно было бы здорово. Новости есть на любом сайте и это конечно будет требовать всем и всегда.


            ну почему лень, я вот просто пока не разбирался как это сделать, а вот попробовать написать с удовольствием,
            просто результат гарнтировать на 100% не могу wink так что предлагаю коллективно подумать....и потом сделать выдержку с форума
            в виде тз
              • 33694
              • 742 Posts
              Тут у нас один товарищ уже написал, кажется. Обещал выложить, но пропал куда-то внезапно.