Собственно, лучше покажу, как это выглядит, чем объяснять.
- 2013 г.
- 01.01.2013 Новость 1
- 2012 г.
- 01.07.2012 Новость 3
- 23.02.2012 Новость 2
- 07.04.2012 Новость 1
- 2011 г.
- Новость 2
- Новость 1
- 2010 г.
- 2009 г.
Вот как-то так… То есть, выводим название категории, а в ней ссылки на материалы. Раскрашивать и украшать не стал — и так видно, что за затея.
Сздаем пункт меню «Материалы » Список всех категорий» и указываем корневую категорию, которая содержит нужные подкатегории с материалами. Получим пока просто список категорий.
Открываем /templates/ШАБЛОН/html/com_content/categories/default_items.php
или /components/com_content/views/categories/tmpl/default_items.php
в зависимости от того, что присутствует (я уже писал о разных путях). Вообще, это и есть шаблон вывода категории, который мы сейчас будем нещадно править.
Самая суть вот в этом куске:
<?php $db =& JFactory::getDBO(); $query = $db->getQuery(true); //echo $item->id; $query = 'SELECT * FROM `#__content` WHERE `catid`='.$item->id.' AND `state`>0'; $db->setQuery($query); $res= $db->loadObjectList(); foreach ($res as $concert) { echo '<li>'; //print_r ($concert); echo $concert->title; echo '</li>'; } ?>
Номер строки проставлять не стал, это можно вставить почти куда угодно — тут хватит даже начальнах знаний PHP. Собственно, тут мы подключаемся к базе, выполняем запрос, в котором нам нужны все поля (мне нужны все поля, кому надо определенные — курим SELECT), но только принадлежащие id категории ($item->id), опубликованные и не в корзине (`state`>0).
Дальше полученный результат ($res= $db->loadObjectList();) перебираем и вставляем заголовок новости (echo $concert->title;).
Чтобы все это выглядело красиво — я затолкал вывод заголовков новостей в список (потом в CSS уже как захочется можно его украсить).
Я неспроста оставил //print_r ($concert); заремареным. Если его раскомментировать — увидим (да и так это видно), что $concert — это объект, в котором находятся все наши поля. доступ к ним осуществляется аналогично. Есть маленькая тонкость. В базе нигде не прописана ссылка. Заметили? Ссылку делаем так:
echo 'index.php?option=com_content&view=article&id='.$concert->id;
Если совсем разжевать и в рот положить — получится так:
<a href="index.php?option=com_content&view=article&id=<?php echo $concert->id; ?>"><?php echo $concert->title; ?></a>
Есть вариант вогнать туда роутер (что предпочтительнее):
echo '<a href="'.JRoute::_(ContentHelperRoute::getArticleRoute($concert->id)).'">'.$concert->title.'</a>';
Это, конечно, костылик, но большего обычно требуется редко, тем более, если мы сделаем это в файле /templates/ШАБЛОН/html/com_content/categories/default_items.php — не такой это и костыль получится.
Для тех, кто вообще далек — вот код (если что-то попрет не туда — не ругаться, а начинать думать!)
<?php /** * @package Joomla.Site * @subpackage com_content * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; $class = ' class="first"'; if (count($this->items[$this->parent->id]) > 0 && $this->maxLevelcat != 0) : ?> <ul> <?php foreach($this->items[$this->parent->id] as $id => $item) : ?> <?php if ($this->params->get('show_empty_categories_cat') || $item->numitems || count($item->getChildren())) : if (!isset($this->items[$this->parent->id][$id + 1])) { $class = ' class="last"'; } ?> <li<?php echo $class; ?>> <?php $class = ''; ?> <span class="item-title"><a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($item->id));?>"> <?php echo $this->escape($item->title); ?></a> </span> <?php if ($this->params->get('show_subcat_desc_cat') == 1) :?> <?php if ($item->description) : ?> <div class="category-desc"> <?php echo JHtml::_('content.prepare', $item->description, '', 'com_content.categories'); ?> </div> <?php endif; ?> <?php endif; ?> <?php if ($this->params->get('show_cat_num_articles_cat') == 1) :?> <dl><dt> <?php echo JText::_('COM_CONTENT_NUM_ITEMS'); ?></dt> <dd><?php echo $item->numitems; ?></dd> </dl> <?php endif; ?> <?php if (count($item->getChildren()) > 0) : $this->items[$item->id] = $item->getChildren(); $this->parent = $item; $this->maxLevelcat--; echo $this->loadTemplate('items'); $this->parent = $item->getParent(); $this->maxLevelcat++; endif; ?> <ul> <?php /* MerinovKV * Добавляем список материалов к текущей категории * в списке категорий */ $db =& JFactory::getDBO(); $query = $db->getQuery(true); //echo $item->id; $query = 'SELECT * FROM `#__content` WHERE `catid`='.$item->id.' AND `state`>0'; $db->setQuery($query); $res= $db->loadObjectList(); foreach ($res as $concert) { echo '<li>'; //print_r ($concert); //echo $concert->title; echo '<a href="'.JRoute::_(ContentHelperRoute::getArticleRoute($concert->id)).'">'.$concert->title.'</a>'; echo '</li>'; } ?> </ul> </li> <?php endif; ?> <?php endforeach; ?> </ul> <?php endif; ?>
Сердечное спасибо! Просто выручили!)))
Те кто совсем далек))) Эт я)
Материалы выходят списком, только у меня в joomla 2.5.6 неправильно формировались ссылки на сам материал, выходила ошибка. Проблема решилась заменой 69-й строчки в вашем коде на
echo ''.$concert->title.'';
Спасибо вам огромное!!!! Я так долго мучилась. Вот что значит не знать php. Мне как раз нужен был именно такой список с годами и заголовками. И отдельное большое спасибо Ирине(Irinа), у меня та же проблема была, не додумалась сразу в комментарии посмотреть.
В вашем предоставленном коде куча ошибок. не понимаю как он работает у других….????
Заур, зачем оставлять голословные комментарии? Те, у кого работает — пробовали, у них и заработало. А те, у кого в голове свой интерпретатор PHP — с ними ничго не поделаешь, всегда найдется тот, у кого «не работает» по разным причинам.
Покажите ошибки. Может быть, вы для другой версии Joomla это все пробуете.
Хочу немного переделать модуль mod_breadcrumbs для Joomla 2.5
Хочу что бы у меня выводилось на текущий материал, а следующий. Помогите сформировать ссылку для php файла
ну если следующий, то это будет +1 🙂
вы про эту ссылку?
'index.php?option=com_content&view=article&id='.$concert->id
$concert->id — это число, значит к нему можно прибавить единичку.
++$concert->id
получится
'index.php?option=com_content&view=article&id='.++$concert->id
Подскажите, можно ли со списком материалов в списке категорий выводить превью самого материала, например изображение или описание?
Елена, посмотрите в сторону шаблона блога.
Признаю свою слабость в php, и прошу у вас помощи.
А кто-то пробовал такой вывод категории с Joomfish 2.5 — у меня не выводит список категорий и материалов при переключении на другой язык почему-то.
Может кто-то подскажет в чем дело ?
Здравствуйте
а как можно сделать тоже самое но с алфавитом вместо годов?
Я выбирал свои подкатегории, которые назывались, например, «2001», «2002» и пр. Чтобы автоматически сортировать по алфавиту, надо будет переписать функцию
Спасибо! Очень помогли. Правда ссылки отображаются криво, по крайней мере у меня) Вот 100% рабочий вариант
<a href="id, $concert->catid)); ?>»>title; ?>
То есть получается что то типа блога категории. Просто у меня задача такая была:)
Спасибо автору все хорошо работает. Единственное что еще хочется в этом, так это постраничную. навигацию.Как это можно реализовать?
Подскажите как вывести материалы из категории в алфавитном порядке?