Контакты

Поиск по сайту

Категория: Joomla Опубликовано: 14 Январь 2017

Разработчики Joomla, очевидно, вняли просьбам желающих и, начиная с версии Joomla 2.5, «избавили» шаблон списка статей категории (com_content –> category –> default), от нумерации. Не все веб-мастера обрадовались этому нововведению. Эта статья для тех, кто хочет корректно вернуть нумерацию, не изобретая «велосипедов».

К счастью, код, отвечающий за расстановку порядковых номеров в списке статей, никуда не делся в версиях Joomla 2.5+. Этим мы и воспользуемся.

Начнем «издалека» и посмотрим, как Joomla 1.5 получала эти самые номера и выводила их правильно вне зависимости от того, кто и как (веб-мастер в админке, или пользователь на самой странице со списком) устанавливал количество выводимых на странице сайта статей. Кому не интересно, эту часть статьи можно пропустить и приступить сразу к «действию».

На сайте с Joomla 1.5 откроем файл www/components/com_content/views/category/tmpl/default_items.php. За вывод порядкового номера статьи в первом столбце таблицы отвечает код:

    <?php echo this->pagination->getRowOffset( $item->count ); ?>

Методы класса Jpagination, конечно же, здесь не описаны, поэтому ищем дальше и открываем файл www/libraries/joomla/html/pagination.php. Здесь описаны все методы класса и, в том числе, интересующая нас функция:

    function getRowOffset($index)
        {
            return $index +1 + $this->limitstart;
        }

Эта функция возвращает номер строки в таблице как сумму собственного порядкового номера этой строки, увеличенного на единицу (в массиве элементы нумеруются с нуля), и, динамически изменяющегося значения переменной limitstart (начало отсчета строк на текущей странице списка). В свою очередь, для расчета limitstart используется два значения: количество статей на страницу (берется из админки, если не указано пользователем на сайте) и номер текущей страницы.

Если посмотреть эти же файлы на сайтах с Joomla 2.5–3.5 (на 3.5 этот файл находится здесь www/libraries/cms/pagination/pagination.php), то увидим, что все это никуда не делось, и даже название функции от версии к версии не поменялось. Остается только «вытащить» нумерацию для отображения на страницах сайта. Для этого нужно, в данном случае совсем немного, поработать.

Добавляем нумерацию в список статей категории

Здесь рассматриваем шаблон списка статей для Joomla 2.5. Для версии 3.5, в большинстве случаев, все аналогично. Нужно только внимательно проверить нужные переменные.

Joomla 2.5–3.5 позволяет нам использовать альтернативные шаблоны вывода информации, практически, для любого штатного расширения. Поэтому воспользуемся этой возможностью и создадим альтернативный шаблон для вывода списка статей категории.

Разместим копии 3-х файлов default.php, default.xml и default_articles.php (файлы берутся отсюда www/components/com_content/views/category/tmpl/) в соответствующей папке нашего текущего шаблона сайта (www/templates/текущий_шаблон/html/com_content/category/).

Изменим имена этих файлов, например, на «numbering» и «numbering_articles» соответственно.

В файле numbering.xml все «DEFAULT» меняем на «NUMBERING». Проверяем наличие нового типа в списке типов пунктов меню (раздел «Материалы»):

Появившийся в списке пункт «COM_CONTENT_CATEGORY_VIEW_NUMBERING_TITLE» — и есть наш новый тип меню. О том, как его название красиво перевести на любой язык, есть множество статей в интернете, поэтому здесь останавливаться на этом не будем. Выбираем этот тип при создании нового пункта меню. Сохраняем. Открываем страницу списка на сайте. Здесь мы и будем отслеживать изменения.

В файле numbering.php ничего менять не будем. Нас интересует файл numbering_articles.php.

Для начала, добавляем в таблицу шаблона столбец для наших номеров: элемент заголовка «th» в первую строку и элемент «td» для вывода номера — во вторую.

Код элемента заголовка «th» следующий:

    <th class="list-num" id="tableNum">
        №
    </th>

Элемент «td» добавляем после строки:

    <?php if (in_array($article->access, $this->user->getAuthorisedViewLevels())) : ?>

Его код такой:

    <td class="list-number" align="right">
        <?php echo $this->pagination->getRowOffset($i); ?>
    </td>

Здесь, в отличие от файла версии 1.5, в качестве параметра «$index», используем не «$item–>count», а «$i» (смотрим, что обрабатывается в «foreach» в коде файла нашего альтернативного шаблона).

Сохраняем файл, обновляем страницу на сайте. Номера строк в таблице должны появиться и отображаться правильно на каждой из страниц списка.

Далее, переводим название, стилизуем и выполняем прочие действия над нашим альтернативным шаблоном.

Итак, проблему с нумерацией в списке статей категории Joomla 2.5+ можно считать успешно решенной.

Добавить сообщение

Форма входа

Индекс цитирования Яндекс.Метрика