Joomla 1.5. Модуль «Последние новости».
- заголовок новости;
- краткое содержание новости;
- ссылку "Подробнее…";
Вариантов решения проблемы два:
- использовать стороннее расширение;
- переделать то, что есть;
Будем использовать решение №2, потому что нам не нужен какой-то сильный функционал в данном случае, мы не хотим нагружать систему дополнительным расширением (модулем) и тратить время на его поиски, оригинальный модуль предоставляет хорошие возможности для переделки.
Для работы потребуются небольшие знания программирования, если же таковые отсутствуют, просто скопируйте и замените код в указанных файлах. Мы будем работать с \modules\mod_latestnews, а именно с modules\mod_latestnews\helper.php и modules\mod_latestnews\tmpl\default.php.
modules\mod_latestnews\helper.php. Создадим функцию, которая будет отрезать нужный нам кусок текста, для использования его в кратком описании:
находим следующее название класса:
class modLatestNewsHelper
выше него вставляем нашу функцию:
function getMyNews ($text, $str_len ) //в нее передаем текст и длину, после которой текст не будет использован. Далее следует простой цикл.
{
$txt = split(" ", $text );
for($i = 0; $i < $str_len; $i++)
{
$textCrop .= $txt[$i]." ";
}
$textCrop = strip_tags ( $textCrop ) . "...";
return $textCrop;
}
Находим в классе modLatestNewsHelper функцию getList(&$params), в самой функции ищем строку:
$lists[$i]->text = htmlspecialchars( $row->title );
, ниже ее и выше
i++;
вставляем код:
$lists[$i]->created = JHTML::_('date', $row->created, JText::_('DATE_FORMAT_LC2')); //Подключаем вывод даты.
$str_len = '10'; //Кол-во слов, которые будут участвовать в кратком описании.
$lists[$i]->introtext = getMyNews ($row->introtext , $str_len); //Собственно, сам вызов нашей описанной выше функции.
С этим файлом все. Переходим к следующему.
modules\mod_latestnews\tmpl\default.php.
В нем заключена логика вывода наших кратких новостей на экран. Меняем код, на:
<?php // no direct access
defined('_JEXEC') or die('Restricted access'); ?>
<ul class="latestnews<?php echo $params->get('moduleclass_sfx'); ?>">
<?php foreach ($list as $item) : ?>
<li class="latestnews<?php echo $params->get('moduleclass_sfx'); ?>">
<?php echo $item->text; ?>
<br />
<?php echo $item->introtext; ?>
<span class="nws"><a href="<?php echo $item->link; ?>">Подробнее...</a></span>
</li>
<?php endforeach; ?>
</ul>
Думаю, комментариев не потребуется, все понятно и так. Подключайте, проверяйте. Вариантов с выводом даты, краткого описания и ссылки очень много, здесь приведен пример наиболее популярного «внешнего вида» модуля «последних новостей». Сделав однажды, вы сможете без проблем использовать его на страницах других сайтов.



Спасибо! Все работает, только одно небольшое замечание вы забыли в файле default.php вывести дату
. И еще к вам вопрос как к специалисту джумла (а то я с ней по сути второй день работаю) куда как теперь этот модуль скопировать, что бы при дальнейшем обновлении ничего не перетерлось?
Хм, ну как вариант дату можно указать непосредственно в самой новости
, ну или вот так:
< ?php echo JHTML::_('date', $this->item->created, JText::_(‘формат даты’)); ?>
По поводу обновления — просто необходимо удостоверится, что в пакете обновления отсутствуют обновки именно для «модуля последних новостей», если да, то можно не беспокоиться, в противном случае после обновления Джомлы накатить модуль «последние новости» заново.
@admin
Не вариант
Модуль будет на всех новостях показывать текущую дату с хоста.
Нужно просто в default.php добавить created; ?>
Т.к. created уже объявлена в helper.php
Если ограничение в 10 слов лишнее, то строку:
$lists[$i]->introtext = getMyNews ($row->introtext , $str_len);
меняем на:
$lists[$i]->introtext = $row->introtext;
Модуль выведет всё краткое описание новости. Форматирование текста активно.
Не пропечаталось что-то…
в default.php добавить
—
created; ?>
—
потрите лишнее… код режется.
‘знак открывающей скобки’ ‘знак вопроса’ php echo $item->created; ‘знак вопроса’ ‘знак закрывающей скобки’
Спасибо за поправления, но проверять сейчас вовсе нет времени.
Zolinger, спасибо за поправки.
Насчёт getMyNews хочу добавить, что split лучше не использовать, т.к. оно нынчк deprecated, лучше использовать explode. И перед for($i = 0; $i < $str_len; $i++) { … нужно поставить $textCrop = ""; что бы не было notice из-за того, что переменная не объявлена.
Подскажите пожалуйста, а как ниже списка новостей добавить ссылку на все новости? Спасибо.
Так «с лету» не скажу, но можно сделать страницу категорий, куда будут выводиться все новости, а ниже блока новостей вставить ссылку на эту страницу. ЦСС-стилями придать ей вид, будто она находится в блоке кратких новостей.
Спасибо за статью, то что надо. Ничего лишнего.
Но вот вопрос, а как сделать так чтобы выводить картинку из материала или миниатюру? Готовые модули не хочется использовать, а хочется сделать ручками, но вот куда копать непонятно.
Добрый день!
у меня вопрос: а как убрать «квадратики»? у меня вместо русских букв отображаются квадраты.
ище… как мне отобразить на сайте этот модуль. я использую modules_Anywhere. но он не отображает в статье модуль mod_latestnews если он отключен ? как бороться со вем этим? спасибо!
Привет! а у меня вместо русских букв «Полностью…» одни квадратики.
как это убрать?
Посмотрите в в теме про All News.
Квадратики лечатся установкой нужной кодировки. Про картинки можно посмотреть, как это сделано в модуле главной страницы.
Установить правильную кодировку.
Квадратики — это признак неработающей кодировки. С modules_Anywhere я не работал, но по идее, модуль «All News» не должен зависеть от каких-либо других модулей, да и mod_latestnews здесь абсолютно ни при чем.
спасибо, очень нужная информация.
хотел спросить, в статье есть заголовок который title, он выводиться как заголовок в этом модули. так же есть заголовок который идет именно в статье, т е в тексте.
просто в модули получается выводиться два заголовка. можно как нибудь заголовок из статьи убрать?
В общих настройках материалов вроде был пункт насчет показа заголовков статьи, во всяком случае, если эта возможность существует, то находится она именно там, в противном случае придется ковырять код. Сейчас временно от Джомлы отошел, поэтому точно не скажу.
Спасибо большое тебе добрый человек!!!Еще наподобие нашел ссылку может кому пригодится http://buro3v.ru/component/option,com_b3v_offers/task,showOffer/id,29/ — но требуют контактные данные
Спасибо большое! Очень помогла статья!
Правда вывод немного приспособить под себя пришлось.
<div class="latestnewsget(‘moduleclass_sfx’); ?>» border=»1″>
<ul class="latestnewsget(‘moduleclass_sfx’); ?>»>
<li class="latestnews_1get(‘moduleclass_sfx’); ?>»>
text; ?>
<li class="latestnews_2get(‘moduleclass_sfx’); ?>»>
introtext; ?>
<li class="latestnews_3get(‘moduleclass_sfx’); ?>»>
<a href="link; ?>»>подробнее
Спасибо большое! Очень помогла статья!
Правда вывод немного приспособить под себя пришлось.
» border=»1″>
»>
»>
text; ?>
»>
introtext; ?>
»>
»>подробнее и т.д.
а зачем нужен флекси контент?
Не знаю, не пробовал.
Подскажите пожалуйста стоит latestnews все работало нормально, а сейчас проблема:
есть новости «Нормативные документы» и «Все документы»(была ссылкой) , так вот а теперь ссылка «Все документы» не активна.
че делать, где искать? что править или настраивать?
С уважением,
Юрий
Not reproduced
.
Не нужно пихать ссылки на свои ресурсы подобным образом, все комментарии я модерирую.
Там у тебя обе ссылки «Нормативные документы» и «Все документы» неактивны, если раньше были активны, значит ты что-то отключил в настройках.
Спасибо за элегантное решение!
Все бы хорошо, да только на новостях с мудреным форматированием нифига ничего не выводится. Решено небольшой правкой функции getmynews. Первой строкой в функции должно идти:
[code]$text=strip_tags($text);[/code]
А какой сторонний модуль посоветуете? А то не у всех опыта хватает код переделывать…
Сабж и советую.
А что делать с Joomla 1.7? Там того, что вы здесь описали вообще нет.
С Джомлой закончил работать на версии 1.5, поэтому за темой не слежу.
Охиренно! Спасибо большое! Помогло!
Здравствуйте, все работает , за исключением вывода даты. Ни как не могу разобраться в чем проблема. Дела все по инструкции выше, а в default.php для даты вставил следующий код created ; ?>
Помогите разобратся.
Код почему то вырезает, в пхп конструкции такой код (echo $item->created;)
Формат даты выводится корректно, код выше указан правильно, формат даты (‘%d %B %Y’):
item->created, JText::_(‘%d %B %Y’)); ?>
admin — Спасибо за статью, для меня оказалась очень полезной…