We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 21544
    • 3 Posts
    Прочитал http://modx.ru/blog/modx-pagination/ но при переключении назад страница генерируется на главную страницу прибавляя ?p=1
    ID страницы 49 вот мой сниппета Articles
    <?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)."\">&lt; Назад</a>
    ";
    }
    // Если $p = $totalPages, значит мы находимся на последней странице и ссылку "Назад" не нужно показывать
    else if ($p == $totalPages) {
    $output .= "
    <a href=\"?p=".($p-1)."\">Вперед &gt;</a>
    ";
    }
    // Если оба варианта не подошли, значит мы где-то посередине между первой и последней страницей
    // Следовательно, показываем обе ссылки в навигации
    else {
    $output .= "
    <a href=\"[~[*id*]~]?p=".($p+1)."\">&lt; Назад</a>
    <a href=\"[~[*id*]~]?p=".($p-1)."\">Вперед &gt;</a>
    ";
    }

    // Просто закрываем блок навигации
    $output .= "
    </div>
    ";

    return $items.$output;
    ?>
      • 21498
      • 11 Posts
      В sql запросе использоваь:

      if(empty($_GET[page]) || !is_numeric($_GET[page])) $_GET[page]=0;
      //а потом к запросу дописать в конце
      $sql="...... LIMIT ".$_GET[page]",".$_GETpage]+$num;