We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 17736
    • 7 Posts
    Привет всем. Ковырялся с Ditto , не могу придумать. Помогите плз
    Цель:  Реализовать вывод популярных новостей. Есть вывод последних новостей(всех категорий) на основной страничке и по категориям на страницах-папках(они-же категории), вот хотел сделать внизу список популярных новостей в 2 колонки.
    Кто знает помогите, уж очень надо
      • 897
      • 1,620 Posts
      как вы хотите определять популярность статей?
        "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

        Не используйте Revo для "просто сайтов". Используйте Evo

        Who can defeat the Russian bear?
        • 17736
        • 7 Posts
        Ну к примеру по кол-ву запросов к конкретной новости. Я просто сам не знаю как это реализовать, поэтому и обратился за помошью к вам huh Если например поставить сортировку по чему-нибудь подобному(если нет возможности по кол-ву запросов).
          • 785
          • 2,113 Posts
          Лично я создал дополнительную таблицу в базе, в которой для каждой страницы накапливается количество посещений.

          При выводе каждой страницы вызывается простой сниппет, считающий количество посещений:

          $table = $modx->getFullTableName("viscount");
          $id=$modx->documentObject['id'];
          $result = $modx->db->update("count=count+1", $table, "id=$id");


          Для вывода наиболее популярных страниц используется другой сниппет:

          $table= $modx->getFullTableName("viscount");
          $tblsc= $modx->getFullTableName("site_content");
          $query = "SELECT $tblsc.id, pagetitle FROM $tblsc LEFT JOIN $table ON ($tblsc.id=$table.id)";
          $query .= " ORDER BY Count DESC LIMIT 3";
          $result= $modx->db->query($query);
          $output= "<ul class='LIn_shortMode'>\n";
          while ($numb = $modx->db->getRow($result)) {
          $id=$numb['id'];
          $output.= "<li><a href='"."[~$id~]"."' title='".$numb['pagetitle']."'>".$numb['pagetitle']."</a> </li>\n";
          }
          $output.= "</ul>";
          return $output;


          Кстати, на основе полученной информации также выводится список статей в виде облака тегов.
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 17736
            • 7 Posts
            Quote from: AKots at Jan 15, 2008, 09:38 PM

            Лично я создал дополнительную таблицу в базе, в которой для каждой страницы накапливается количество посещений.

            При выводе каждой страницы вызывается простой сниппет, считающий количество посещений:

            $table = $modx->getFullTableName("viscount");
            $id=$modx->documentObject['id'];
            $result = $modx->db->update("count=count+1", $table, "id=$id");


            Для вывода наиболее популярных страниц используется другой сниппет:

            $table= $modx->getFullTableName("viscount");
            $tblsc= $modx->getFullTableName("site_content");
            $query = "SELECT $tblsc.id, pagetitle FROM $tblsc LEFT JOIN $table ON ($tblsc.id=$table.id)";
            $query .= " ORDER BY Count DESC LIMIT 3";
            $result= $modx->db->query($query);
            $output= "<ul class='LIn_shortMode'>\n";
            while ($numb = $modx->db->getRow($result)) {
            $id=$numb['id'];
            $output.= "<li><a href='"."[~$id~]"."' title='".$numb['pagetitle']."'>".$numb['pagetitle']."</a> </li>\n";
            }
            $output.= "</ul>";
            return $output;


            Кстати, на основе полученной информации также выводится список статей в виде облака тегов.


            Спасибо большое:) Только если не трудно распиши поточнее, какую таблицу ты создал в базе.
            Создал два сниппета, первый поставил на страничках новостей, второй на страничке вывода самых популярных, в мускуле ничего не делал. Выдает :
            « MODx Parse Error »MODx encountered the following error while attempting to parse the requested resource:
            « Execution of a query to the database failed - Table ’******.modx_viscount’ doesn’t exist »
                  SQL: SELECT `*****`.`modx_site_content`.id, pagetitle FROM `******`.`modx_site_content` LEFT JOIN `********`.`modx_viscount` ON (`******`.`modx_site_content`.id=`******`.`modx_viscount`.id) ORDER BY Count DESC LIMIT 3
                  [Copy SQL to ClipBoard]

            Parser timing
              MySQL: 0.0063 s (3 Requests)
              PHP: 0.0265 s
              Total: 0.0328 s
              • 785
              • 2,113 Posts
              Quote from: Lyn at Jan 16, 2008, 04:06 AM

              Спасибо большое:) Только если не трудно распиши поточнее, какую таблицу ты создал в базе.
              Создал два сниппета, первый поставил на страничках новостей, второй на страничке вывода самых популярных, в мускуле ничего не делал.

              Ну, я же для себя это делал – чтобы применять кому-то другому, нужно разобраться в том, что и как делается. Это достаточно просто, но PHP и основы SQL все же нужно знать.

              Для начала нужно создать примерно такую таблицу:

              CREATE TABLE `modx_viscount` (
                `id` smallint(4) NOT NULL auto_increment,
                `count` int(20) NOT NULL default '0',
                PRIMARY KEY  (`id`)
              ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=201 ;


              Потом добавить в таблицу записи с номерами страниц и количеством посещений (0 для начала). При этом если не хочется, чтобы страница учитывалась в рейтинге, ее номер не добавлять.

              INSERT INTO `modx_viscount` (`id`, `count`) VALUES 
              (2, 0),
              (6, 0),
              (7, 0),
              (9, 0),
              - - - -
              (199, 0),
              (200, 0);


              После этого должно работать. Хотя в данном случае будут показываться любые наиболее посещаемые страницы сайта, а не только страницы новостей или статей.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 17736
                • 7 Posts
                Спасибо, буду ковыряться smiley
                  • 17736
                  • 7 Posts
                  И еще, последний вопрос. Реально сделать добавление айдишника документа в мускул автоматически при создании новости? Я так понял, что дописать не много. Нужно просто найти в каком файлике хранится запрос mysql на создание дочернего документа в modx и добавить туда
                  INSERT INTO `modx_viscount` (`id`, `count`) VALUES
                  (айдидокумента, 0),
                  Если кто уже это делал, подскажите...
                    • 785
                    • 2,113 Posts
                    Quote from: Lyn at Jan 16, 2008, 05:47 AM

                    И еще, последний вопрос. Реально сделать добавление айдишника документа в мускул автоматически при создании новости?
                    Реально, но нужно делать. Надо написать плагин, в котором проверять, не новость ли добавляется. Проверить это можно, узнав содержимое поля parent. Если там номер документа, относительно которого новости являются дочерними, значит, добавляется новость. В этом случае нужно добавить запись в таблицу счетчика.
                    Далее нужно этот плагин привязать к событию OnDocFormSave.

                    Если вдруг сделаете такой плагин, выложите его тут, может еще кому-то полезен будет.
                      Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                      Статьи о MODx, регулярно новые публикации
                      • 23695
                      • 230 Posts