Главная > Вебмастеру > Joomla 1.5. Модуль «Последние новости».

Joomla 1.5. Модуль «Последние новости».

Есть в Joomla 1.5 такой модуль "Последние новости". Все бы ничего, пока не попытаешься его использовать — становится ясно, что это вовсе не то программное решение, или во всяком случае не та логика, которую ожидаешь увидеть.

А увидеть-то всего хочется:

  • заголовок новости;
  • краткое содержание новости;
  • ссылку "Подробнее…";

Вариантов решения проблемы два:

  1. использовать стороннее расширение;
  2. переделать то, что есть;

Будем использовать решение №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>

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

  1. 18 Декабрь 2009 в 08:17 | #1

    Спасибо! Все работает, только одно небольшое замечание вы забыли в файле default.php вывести дату :) . И еще к вам вопрос как к специалисту джумла (а то я с ней по сути второй день работаю) куда как теперь этот модуль скопировать, что бы при дальнейшем обновлении ничего не перетерлось?

  2. admin
    18 Декабрь 2009 в 17:56 | #2

    Хм, ну как вариант дату можно указать непосредственно в самой новости :) , ну или вот так:

    < ?php echo JHTML::_('date', $this->item->created, JText::_(‘формат даты’)); ?>

    По поводу обновления — просто необходимо удостоверится, что в пакете обновления отсутствуют обновки именно для «модуля последних новостей», если да, то можно не беспокоиться, в противном случае после обновления Джомлы накатить модуль «последние новости» заново.

  3. Zolinger
    22 Апрель 2010 в 11:11 | #3

    @admin
    Не вариант

    admin :
    < ?php echo JHTML::_(‘date’, $this->item->created, JText::_(‘формат даты’)); ?>

    Модуль будет на всех новостях показывать текущую дату с хоста.
    Нужно просто в default.php добавить created; ?>
    Т.к. created уже объявлена в helper.php

    Если ограничение в 10 слов лишнее, то строку:
    $lists[$i]->introtext = getMyNews ($row->introtext , $str_len);
    меняем на:
    $lists[$i]->introtext = $row->introtext;
    Модуль выведет всё краткое описание новости. Форматирование текста активно.

  4. Zolinger
    22 Апрель 2010 в 11:13 | #4

    Не пропечаталось что-то…
    в default.php добавить

    created; ?>

  5. Zolinger
    22 Апрель 2010 в 11:15 | #5

    Zolinger :
    created; ?>

  6. Zolinger
    22 Апрель 2010 в 11:21 | #6

    потрите лишнее… код режется.

    ‘знак открывающей скобки’ ‘знак вопроса’ php echo $item->created; ‘знак вопроса’ ‘знак закрывающей скобки’

  7. 27 Апрель 2010 в 21:24 | #7

    Спасибо за поправления, но проверять сейчас вовсе нет времени.

  8. Константин
    27 Июль 2010 в 06:41 | #8

    Zolinger, спасибо за поправки.

    Насчёт getMyNews хочу добавить, что split лучше не использовать, т.к. оно нынчк deprecated, лучше использовать explode. И перед for($i = 0; $i < $str_len; $i++) { … нужно поставить $textCrop = ""; что бы не было notice из-за того, что переменная не объявлена.

  9. Иван
    10 Сентябрь 2010 в 05:35 | #9

    Подскажите пожалуйста, а как ниже списка новостей добавить ссылку на все новости? Спасибо.

  10. 13 Сентябрь 2010 в 20:10 | #10

    Так «с лету» не скажу, но можно сделать страницу категорий, куда будут выводиться все новости, а ниже блока новостей вставить ссылку на эту страницу. ЦСС-стилями придать ей вид, будто она находится в блоке кратких новостей.

  11. Стас
    14 Сентябрь 2010 в 13:37 | #11

    Спасибо за статью, то что надо. Ничего лишнего.
    Но вот вопрос, а как сделать так чтобы выводить картинку из материала или миниатюру? Готовые модули не хочется использовать, а хочется сделать ручками, но вот куда копать непонятно.

  12. Alex
    14 Сентябрь 2010 в 20:51 | #12

    Добрый день!
    у меня вопрос: а как убрать «квадратики»? у меня вместо русских букв отображаются квадраты.

    ище… как мне отобразить на сайте этот модуль. я использую modules_Anywhere. но он не отображает в статье модуль mod_latestnews если он отключен ? как бороться со вем этим? спасибо!

  13. alex
    15 Сентябрь 2010 в 08:01 | #13

    Привет! а у меня вместо русских букв «Полностью…» одни квадратики.
    как это убрать?

  14. 17 Сентябрь 2010 в 17:21 | #14

    Посмотрите в в теме про All News.

  15. 17 Сентябрь 2010 в 17:25 | #15

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

  16. 17 Сентябрь 2010 в 17:25 | #16

    Установить правильную кодировку.

  17. 4 Октябрь 2010 в 20:25 | #17

    Квадратики — это признак неработающей кодировки. С modules_Anywhere я не работал, но по идее, модуль «All News» не должен зависеть от каких-либо других модулей, да и mod_latestnews здесь абсолютно ни при чем.

  18. fisher
    30 Октябрь 2010 в 19:59 | #18

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

  19. 9 Ноябрь 2010 в 21:58 | #19

    В общих настройках материалов вроде был пункт насчет показа заголовков статьи, во всяком случае, если эта возможность существует, то находится она именно там, в противном случае придется ковырять код. Сейчас временно от Джомлы отошел, поэтому точно не скажу.

  20. Андрей
    27 Ноябрь 2010 в 19:58 | #20

    Спасибо большое тебе добрый человек!!!Еще наподобие нашел ссылку может кому пригодится http://buro3v.ru/component/option,com_b3v_offers/task,showOffer/id,29/ — но требуют контактные данные :)

  21. kirpich6900
    20 Декабрь 2010 в 02:49 | #21

    Спасибо большое! Очень помогла статья!

    Правда вывод немного приспособить под себя пришлось.

    <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; ?>»>подробнее

  22. kirpich6900
    20 Декабрь 2010 в 02:50 | #22

    Спасибо большое! Очень помогла статья!

    Правда вывод немного приспособить под себя пришлось.

    » border=»1″>

    »>
    »>
    text; ?>
    »>
    introtext; ?>
    »>
    »>подробнее и т.д.

  23. Cергей
    9 Август 2011 в 16:18 | #23

    а зачем нужен флекси контент?

  24. 18 Август 2011 в 20:08 | #24

    Не знаю, не пробовал.

  25. Юрий
    30 Ноябрь 2011 в 07:44 | #25

    Подскажите пожалуйста стоит latestnews все работало нормально, а сейчас проблема:
    есть новости «Нормативные документы» и «Все документы»(была ссылкой) , так вот а теперь ссылка «Все документы» не активна.
    че делать, где искать? что править или настраивать?

    С уважением,
    Юрий

  26. 30 Ноябрь 2011 в 21:33 | #26

    Not reproduced ;) .
    Не нужно пихать ссылки на свои ресурсы подобным образом, все комментарии я модерирую.
    Там у тебя обе ссылки «Нормативные документы» и «Все документы» неактивны, если раньше были активны, значит ты что-то отключил в настройках.

  27. Rhamdeew
    3 Декабрь 2011 в 11:59 | #27

    Спасибо за элегантное решение!
    Все бы хорошо, да только на новостях с мудреным форматированием нифига ничего не выводится. Решено небольшой правкой функции getmynews. Первой строкой в функции должно идти:

    [code]$text=strip_tags($text);[/code]

  28. Eura
    5 Декабрь 2011 в 11:05 | #28

    А какой сторонний модуль посоветуете? А то не у всех опыта хватает код переделывать…

  29. 7 Декабрь 2011 в 17:23 | #29

    Сабж и советую.

  30. Дмитрий
    28 Декабрь 2011 в 18:48 | #30

    А что делать с Joomla 1.7? Там того, что вы здесь описали вообще нет.

  31. 30 Декабрь 2011 в 21:48 | #31

    С Джомлой закончил работать на версии 1.5, поэтому за темой не слежу.

  32. Саня
    11 Январь 2012 в 10:56 | #32

    Охиренно! Спасибо большое! Помогло!

  33. Григорий
    8 Март 2012 в 14:24 | #33

    Здравствуйте, все работает , за исключением вывода даты. Ни как не могу разобраться в чем проблема. Дела все по инструкции выше, а в default.php для даты вставил следующий код created ; ?>
    Помогите разобратся.

  34. Григорий
    8 Март 2012 в 14:25 | #34

    Код почему то вырезает, в пхп конструкции такой код (echo $item->created;)

  35. xck
    18 Апрель 2012 в 15:19 | #35

    Формат даты выводится корректно, код выше указан правильно, формат даты (‘%d %B %Y’):
    item->created, JText::_(‘%d %B %Y’)); ?>
    admin — Спасибо за статью, для меня оказалась очень полезной…

  1. Пока что нет уведомлений.