Danneo CMS v.1.5.4. Постраничный вывод последних статей в модуле Article.

»»»

Danneo CMS v.1.5.4. Постраничный вывод последних статей в модуле Article.

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

Разработчики предусмотрели постраничный просмотр статей без категории на главной странице, но чем они при этом руководствовались не совсем понятно.

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

За вывод статей отвечает штатный модуль 'article', файлы модуля находятся в директории '/mod/article/'. Открываем файл '/mod/article/index.php' и находим следующий фрагмент кода:

/**
 * Метка index
 * -------------- */
if ($to == 'index')

и далее по коду находим:

        /**
         * Статьи без категории
         */
        $total = $db->fetchassoc
        (
                $db->query
                                (
                                        "SELECT COUNT(id) AS total FROM ".$basepref."_".WORKMOD." WHERE catid = 0 AND act = 'yes'
                                         AND (stpublic = 0 OR stpublic < '".NEWTIME."')
                                         AND (unpublic = 0 OR unpublic > '".NEWTIME."')"
                                )
        );

        /**
         * Ошибка листинга
         */
        $nums = ceil($total['total'] / $conf['pagcol']);
        if ($p > $nums AND $p != 1)
        {
              $tm->noexistprint();
        }

Можно удалить или закоментировать весь фрагмент, а можно закоментировать только строку:

$tm->noexistprint();

Далее по коду находим:

         /**
         * Новые статьи
         */
        if ($db->numrows($inq) > 0)
        {
                $posts = TRUE;

и перед строкой

        if ($db->numrows($inq) > 0)

вставляем код:

        // Количество всех новых публикаций
        $total_last = $db->fetchassoc(
          $db->query("SELECT COUNT(id) AS total FROM ".$basepref."_".WORKMOD." WHERE act = 'yes' AND catid <> '0'
          AND (stpublic = 0 OR stpublic < '".NEWTIME."')
          AND (unpublic = 0 OR unpublic > '".NEWTIME."')")
        );

        // Построение пагинации страниц последних публикаций
        $ins['pages'] = null;
        if ($total_last['total'] > $conf['pagcol']) {
          $ins['pagesview'] = $api->pages(
            WORKMOD." WHERE act = 'yes' AND catid <> '0'
            AND (stpublic = 0 OR stpublic < '".NEWTIME."')
            AND (unpublic = 0 OR unpublic > '".NEWTIME."')",
            'id', 'index', WORKMOD.'&to=index', $conf['pagcol'], $p, $total_last['total']
          );
          $ins['pages'] = $tm->parse(array(
            'text' => $lang['all_pages'],
            'pages' => $ins['pagesview']
          ),
          $tm->manuale['pagesout']);
        }

Для того, чтобы строка пагинации появилась на странице, необходимо перенести шаблон оформления 'pagesout', который очищается выше по коду. В этих целях меняем фрагмент:

         /**
         * Вложенные шаблоны
         */
        $tm->manuale = array
                (
                        'cat'    => null,
                        'icon'   => null,
                        'tags'   => null,
                        'thumb'  => null,
                        'author' => null
                );

на

         /**
         * Вложенные шаблоны
         */
        $pagesout = $tm->manuale['pagesout'];
        $tm->manuale = array
                (
                        'cat'    => null,
                        'icon'   => null,
                        'tags'   => null,
                        'thumb'  => null,
                        'author' => null,
                        'pagesout' => $pagesout
                );

На последок сделаем так, что список категорий будет отображаться только на первой странице модуля, на последующих страницах будет выводится только список последних статей. Для этого изменим строку во фрагменте кода:

        /**
         * Категории
         */
        $inq = $db->query("SELECT * FROM ".$basepref."_".WORKMOD."_cat ORDER BY posit ASC", $config['cachetime'], WORKMOD);
        $ins['cats'] = $db->numrows($inq, $config['cache']);
        while ($c = $db->fetchassoc($inq, $config['cache']))
        {
                $area[$c['parentid']][$c['catid']] = $obj[$c['catid']] = $c;
        }
        if ($conf['catmain'] == 'yes')

на следующую

        if (($conf['catmain'] == 'yes') and ($p == 1))
Рейтинг

В этом разделе