0 Пользователей и 1 Гость просматривают эту тему.
  • 1 Ответов
  • 35778 Просмотров
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Часто возникает вопрос - каким образом на главной странице оформить вывод новостей тем или иным образом.
Рассмотрим часто возникающие моменты:
1 - надо вывести последние материалы какой либо одной категории
2 - надо вывести последние материалы на главную страницу из двух разных категорий (друг под другом либо в две колонки)

При этом необходимо (либо в индвидуальном порядке для каждого типа новостей либо для всех в едином стиле) задать параметры вывода - заголовок, дату создания, автора, вступительный текст, подробнее и так далее.
Для начала самый простой пример - пункт 1 - последние добавленные материалы из одной категории. При этом оговорка - в данном примере я буду использовать стандартный модуль последний материалов modules/mod_latestnews.php

1 - надо вывести последние материалы какой либо одной категории в таком формате - заголовок, дата создания, автора, вступительный текст (introtext), кнопку "подробнее". При этом мы установили в параметрах модуля "Module Mode" = "Content Items only"

Открываем файл mod_latestnews.php и действуем по порядку

Добавим в выборку нужные нам параметры, строка 102, заменим первые 6 строк на следующие:
Код
$query = "SELECT a.id, a.title, a.sectionid, a.catid, a.introtext, a.created, u.name" //добавили интротекст, дату и автора создания
. "\n FROM #__content AS a"
. "\n LEFT JOIN #__content_frontpage AS f ON f.content_id = a.id"
. "\n INNER JOIN #__categories AS cc ON cc.id = a.catid"
. "\n INNER JOIN #__sections AS s ON s.id = a.sectionid"
. "\n INNER JOIN #__users AS u ON u.id = a.created_by" //добавили таблицу пользователей и связали по идентификатору с контентом
Далее все без изменений.
Теперь нам надо вывести на экран все это в удобной нам форме. Не мудрствуя лукаво использую табличную верстку, так нагляднее.
Строка 134 (<ul class="latestnews<?php echo $moduleclass_sfx; ?>">) и 185 (</ul>) убираются напрочь.
Находим блок:
Код
<li class="latestnews<?php echo $moduleclass_sfx; ?>">
<a href="<?php echo $link; ?>" class="latestnews<?php echo $moduleclass_sfx; ?>">
<?php echo $row->title; ?></a>
</li>
и вместо него вставим:
Код
<table align="center" width="100%" cellpadding="10" cellspacing="2" style="border: solid 1px #E4E4E4;">
             <tr>
                <td class="news"><a href="<?php echo $link; ?>" class="latestnews<?php echo $moduleclass_sfx; ?>">
                <?php echo $row->title; ?></a>
                <?php
                echo "&nbsp;&nbsp; дата создания: ";
                echo $row->created;
                echo "&nbsp;&nbsp; автор: ";
                echo $row->name;
                //echo date($format, mktime($chas, $min, $sec, $mes, $den, $god));
                ?>
                </td>
             </tr>
             <tr>
                <td style="padding-left: 10px;"><?php echo $row->introtext; ?></td>
             </tr>
             <tr >
                <td width="100%" align="center"><a href="<?php echo $link; ?>">Подробнее</a></td>
             </tr>
</table>
Таким образом получили следующую картинку. При этом у нас и заголовок материала и "подробней" являются ссылками на полный текст материала.




2 - надо вывести последние материалы на главную страницу из двух разных категорий.
Чуть усложним задачу - надо вывести в две колонки последние материалы из двух разных категорий, при чем в одной случае нам нужны дополнительные параметры (дата, автор), в другом же нет. Использовать придется все тот же многострадальный mod_latestnews.php, нами уже раз модифицированный.

Идем в админку сайта и копируем наш модуль (кнопкой COPY).
Далее воспользуемся PHPMyAdmin - зайдем в содержимое таблицы _modules и найдем строку нового модуля (Copy of Latest News). Отредактируем следующие строки - title (название) - по желанию, module сделаем равным mod_latestnews2, сохраним и выйдем из этого страшного окна.
Далее зайдем в каталог modules, скопируем файлы mod_latestnews.php и mod_latestnews.xml и переименуем их в mod_latestnews2.php и mod_latestnews2.xml. Содержание файлов должно остаться точно таким же (на данный момент).

Открываем файл mod_latestnews2.php и убираем выборку ненужных нам вещей, то есть вместо
Код
$query = "SELECT a.id, a.title, a.sectionid, a.catid, a.introtext, a.created, u.name" //добавили интротекст, дату и автора создания
оставляем
Код
$query = "SELECT a.id, a.title, a.sectionid, a.catid, a.introtext" //можно и не убирать, но зачем лишняя нагрузка на базу данных
и убираем строку
Код
. "\n INNER JOIN #__users AS u ON u.id = a.created_by" //выводить автора нам уже не требуется
Далее убираем строки вывода:
Код
<?php
echo "&nbsp;&nbsp; дата создания: ";
echo $row->created;
echo "&nbsp;&nbsp; автор: ";
echo $row->name;
?>
В параметрах модуля Copy of Latest News устанавливаем идентификатор другого раздела (категории) и публикуем на другой позиции.
Имеем следующую картинку (два модуля последних материалов из разных разделов с различиными параметрами вывода):




Аналогичным образом можно вывести количество просмотров материала (если добавим a.hits в выборку и выведем на экран <?php echo $row->hits; ?>) и многих других параметров (добавить таблицу категорий\разделов - можно будет вывести название категории в которой находится материал).

В данном материале не рассматривается вопрос параметров публикации модулей в шаблоне, предполагается что позиции для каждого модуля находятся друг под другом (как в приведенных скриншотах).

Можно еще добавить ограничение по количеству выводимых символов вступительного текста (чтобы единообразить форматирование на странице):
Код
$max = 100; //добавим ограничение на количество выводимых символов до 100 штук
$introtext_max = substr ($row1->introtext, 0, $max); //обрежем лишние
и соответственно ссылаться на переменную $introtext_max

Есть еще один момент, не рассмотренный в данной статье - работа бота mosimage (и его аналогов), по умолчанию будут работать лишь картинки, вставленные полной ссылкой. Думаю что посветим этому моменту дополнение к этому материалу через пару дней.

Ссылки по теме:
Модуль новостей от разных авторов (почему я ими не пользуюсь - потому что проще и быстрей настроить собственные параметры отображения материала нежели копать чужой код)
И поиском по форуму тоже можно найти много интересного
extensions.joomla.org - news

Параметры публикации модулей и их позиции:

И многое другое в Суть данной статьи - не отговорить всех использовать сторонние расширения, но дать понять, что и стандартными средствами движка можно достичь практически любых целей. Для этого следует чуть чуть знать HTML и CSS, очень немного PHP и желательно язык запросов SQL (с некоторой адаптацией к MySQL)  ;D
« Последнее редактирование: 21.09.2007, 19:22:51 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
В качестве некоего примера выкладываю немного модифицированный для себя любимого стандартный модуль. Добавлены некоторые параметры (скрин).
Архив распаковать и заменить файлы.

P.S. использовать только в качестве ознакомления ) работоспособность не гаратнируется  ;D

[вложение удалено Администратором]
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как запретить редактирование материалов с фронтенда?

Автор obormot

Ответов: 1
Просмотров: 15835
Последний ответ 19.06.2008, 02:10:01
от smart
Невозможно удалить установленные шаблоны сайта

Автор bogivand

Ответов: 1
Просмотров: 11084
Последний ответ 19.05.2008, 21:13:04
от smart
Как починить некорректный вывод параметров модулей/компонентов

Автор titanjz

Ответов: 2
Просмотров: 39215
Последний ответ 12.02.2008, 20:58:33
от titanjz
Основы создания материалов и меню простого сайта

Автор beliyadm

Ответов: 0
Просмотров: 56167
Последний ответ 02.08.2007, 18:23:14
от beliyadm
Как задать порядок материалов на главной странице?

Автор smart

Ответов: 0
Просмотров: 13426
Последний ответ 01.02.2007, 20:27:29
от smart