<?php
/********************************
Название: Articles
Цель: Вывод статей на главной странице
Проект: Демосайт MODx
Автор: Игорь Сухинин
********************************/
// Проверяет, что переданное значение - неотрицательное целое число
// Возвращает TRUE/FALSE
function numeric($str) {
return (!ereg("^[0-9]+$", $str)) ? false : true;
}
// Проверяем, что $_GET["p"] содержит только цифры от 0 до 9
// Иначе присваиваем переменной $p = 0
if (numeric($_GET["p"])) {
$p = $_GET["p"];
}
else {
$p = 0;
}
$num = 5; // Количество статей на одну страницу
$sql = "
SELECT COUNT( * ) AS cnt
FROM `modx_site_content`
WHERE `parent` =1
AND `published` =1
AND `deleted` =0
";
$res = $modx->db->query($sql); // Выполняем запрос в БД с помощью функции API db->query
$row = $modx->db->getRow($res); // Формируем массив из возвращенного результата запроса с помощью функции API db->getRow
$totalArticles = $row["cnt"]; // Получаем количество всех статей
// Получаем общее количество страниц, округляем их в большую сторону и вычитаем 1 (единицу),
// чтобы наши расчеты полностью совпадали с логикой базы данных (помните, что отсчет в БД начинается с нуля?)
$totalPages = ceil ($totalArticles / $num) - 1;
// Проверяем, что переданное в URL значение текущей страницы не больше, чем общее количество всех страниц
// Иначе принудительно устанавливаем максимально возможное значение страницы, равное $totalPages
if ($p > $totalPages) {
$p = $totalPages;
}
$start = $p * $num; // Номер документа в выборке, с которого будет вестись отсчет
$results = $modx->getDocumentChildren(
$id = 49, // ID родительского документа, а именно документа "Блог"
$active = 1, // Выбираем только опубликованные документы
$deleted = 0, // Выбираем только неудаленные документы
’id, pagetitle, published, introtext, content, menuindex, createdby, createdon, deleted, menutitle’, // Выбираем поля из БД
$where = ’’, // Дополнительные условия не требуются
$sort=’createdon’, // Сортируем документы по полю createdon, т.е. по дате создания
$dir=’DESC’, // Сортируем документы по убыванию
$limit = $start.",".$num // Вывод $num документов, начиная с $start
);
// Проходим в цикле весь массив результатов
foreach($results as $key => $value) {
// Если поле menutitle было заполнено, то берем его в качестве заголовка статьи
// Иначе - берем в качестве заголовка поле pagetitle
if ($value["menutitle"] != "") {
$title = $value["menutitle"];
}
else {
$title = $value["pagetitle"];
}
$author = $modx->getUserInfo($value["createdby"]); // Получаем имя пользователя, создавшего статью
$items .= "
<!-- Article -->
<div class=\"article\">
<h2><span><a href=\"[~".$value["id"]."~]\">".$title."</a></span></h2>
<p class=\"info noprint\">
<span class=\"date\">".date("d/m/Y в H:i", $value["createdon"])."</span><span class=\"noscreen\">,</span>
<span class=\"cat\"><a href=\"#\">Категория</a></span><span class=\"noscreen\">,</span>
<span class=\"user\"><a href=\"#\">".$author["fullname"]."</a></span><span class=\"noscreen\">,</span>
<span class=\"comments\"><a href=\"[~".$value["id"]."~]#comments\">Комментарии</a></span>
</p>
".$value["introtext"]."
<p class=\"btn-more box noprint\"><strong><a href=\"[~".$value["id"]."~]\">Читать далее</a></strong></p>
</div> <!-- /article -->
<hr class=\"noscreen\" />
"; // Собираем блоки статей
}
// Добавляем динамически формируемую навигацию
$output = " <div id=\"pagination\">";
// Если $p = 0, значит мы находимся на первой странице и ссылку "Вперед" не нужно показывать
if ($p == 0) {
$output .= "
<a href=\"?p=".($p+1)."\">< Назад</a>
";
}
// Если $p = $totalPages, значит мы находимся на последней странице и ссылку "Назад" не нужно показывать
else if ($p == $totalPages) {
$output .= "
<a href=\"?p=".($p-1)."\">Вперед ></a>
";
}
// Если оба варианта не подошли, значит мы где-то посередине между первой и последней страницей
// Следовательно, показываем обе ссылки в навигации
else {
$output .= "
<a href=\"[~[*id*]~]?p=".($p+1)."\">< Назад</a>
<a href=\"[~[*id*]~]?p=".($p-1)."\">Вперед ></a>
";
}
// Просто закрываем блок навигации
$output .= "
</div>
";
return $items.$output;
?>
if(empty($_GET[page]) || !is_numeric($_GET[page])) $_GET[page]=0; //а потом к запросу дописать в конце $sql="...... LIMIT ".$_GET[page]",".$_GETpage]+$num;