Очень неновая, но не теряющая актуальности статья от beliyadm.
Зачастую нам требуется вывод простейший новостей, но стандартный модуль mod_latestnews версии движка 1.5 умеет показывать лишь заголовок. Начинаются поиски мега модулей для решения элементарной задачи. В этом примере расскажу как с помощью легкой модификации стандартного модуля вывести следующие данные: заголовок материала, дата создания, вступительный текст, ссылку "читать далее"
Итак мы будем работать с двумя файлами:
modules\mod_latestnews\helper.php - подготовка данных (дальше хелпер)
modules\mod_latestnews\tmpl\default.php (дальше шаблон)
Открываем хелпер, находим строку
Code:
$lists[$i]->text = htmlspecialchars ( $row->title );
под ней сразу добавляем
Code:
$lists[$i]->created = JHTML::_('date', $row->created, JText::_('DATE_FORMAT_LC2'));
$lists[$i]->introtext = strip_tags ( $row->introtext );
Комментарии:
- конструкция DATE_FORMAT_LC2 используется чтобы привести выводимую дату к приличному виду, смотрим файл language\ru-RU\ru-RU.ini самое начало (можем изменить формат) и читаем справку по функции date
- функция strip_tags используется, чтобы избавить вступительный текст от всего HTML мусора, что хорош в режиме блога, но очень мешает в обычном модуле
Дальше переходим к шаблону, сразу приведу общий текст, сравнивайте с оригинальным и делайте выводы
Code:
<ul class="latestnews<?php echo $params->get ('moduleclass_sfx'); ?>">
<?php foreach ($list as $item) : ?>
<li class="latestnews<?php echo $params->get ('moduleclass_sfx'); ?>">
<span class="date"><?php echo $item->created; ?></span>
<a href="<?php echo $item->link; ?>" class="latestnews<?php echo $params->get ('moduleclass_sfx'); ?>">
<?php echo $item->text; ?></a>
<br />
<?php echo $item->introtext; ?>
<a href="<?php echo $item->link; ?>" title="read more">read more</a>
</li>
<?php endforeach; ?>
</ul>
Комментарии:
- если мы не используем на сайте многоязычность, то фразу "read more" можно написать по русски но не забыть сохранить файл в кодироке UTF-8
- справка по используемым элементам массива
Code:
<?php echo $params->get ('moduleclass_sfx'); ?>- CSS суффикс, заданный в настройках модуля
<?php echo $item->text; ?> - заголовок материала
<?php echo $item->introtext; ?> - текст вступительный материала
<?php echo $item->created; ?> - дата создания материала
<?php echo $item->link; ?> - ссылка на полный текст материала
Примеры модификаций
Интро текст у нас в 500 слов а мы хотим выводить первые 200 символов, но аккуратно обрезать последнее слово а не посередине, потому функция примитивная, первый параметр - вхождение собственно текста ($row->introtext в цикле нашего хелпера), второй - количество символов, по которому будем обрезать)
Code:
function NewsCrop ($text, $str_len ) {
$textCrop = strip_tags (mb_substr ($text, '0', $str_len) );
return $textCrop;
}
Пример применения примерно такой
Code:
$str_len = '200';
$lists[$i]->introtext = NewsCrop ($row->introtext , $str_len);