Если например поставить сортировку по чему-нибудь подобному(если нет возможности по кол-ву запросов).
$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;
Лично я создал дополнительную таблицу в базе, в которой для каждой страницы накапливается количество посещений.
При выводе каждой страницы вызывается простой сниппет, считающий количество посещений:
$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;
Кстати, на основе полученной информации также выводится список статей в виде облака тегов.
Спасибо большое:) Только если не трудно распиши поточнее, какую таблицу ты создал в базе.
Создал два сниппета, первый поставил на страничках новостей, второй на страничке вывода самых популярных, в мускуле ничего не делал.
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 ;
INSERT INTO `modx_viscount` (`id`, `count`) VALUES (2, 0), (6, 0), (7, 0), (9, 0), - - - - (199, 0), (200, 0);
Реально, но нужно делать. Надо написать плагин, в котором проверять, не новость ли добавляется. Проверить это можно, узнав содержимое поля parent. Если там номер документа, относительно которого новости являются дочерними, значит, добавляется новость. В этом случае нужно добавить запись в таблицу счетчика.
И еще, последний вопрос. Реально сделать добавление айдишника документа в мускул автоматически при создании новости?