Пункт меню "Список элементов": отобразить автора и категорию

  • 12 Ответов
  • 543 Просмотров

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

*

slepoy

  • Завсегдатай
  • *****
  • 713
  • 21
  • Тотальная шизофазия
Здравствуйте.

Используя template override, создал файл:
/templates/vt_hiking/html/com_tags/tag/default_items.php

и на страницу "Список элементов" (где отображается список статей, объединенных одним тегом) добавил отображение тегов (по этой инструкции: http://joomlaforum.ru/index.php/topic,282086.0.html#msg1403167).

Но как добавить автора и заголовок категории категорию по тому же принципу (по сути сделать почти как блог)?

Я посмотрел файлы шаблона материала и там довольно часто встречается category  :(

Что можно предпринять в таком случае?

Спасибо.
Помог? Поставь(те) плюс в репутацию.


*

slepoy

  • Завсегдатай
  • *****
  • 713
  • 21
  • Тотальная шизофазия
Спасибо.
Но, к сожалению, так и не разобрался, как вывести псевдоним автора автора и заголовок категории (как ссылка или без нее).
Помог? Поставь(те) плюс в репутацию.


*

Thores

  • Осваиваюсь на форуме
  • ***
  • 26
  • 3
Вот и мне интересно как задать этот дополнительный запрос к базе.
Например на количество просмотров статьи. Код компонента "Метки" мягко говоря отличается от того что есть в Joomla. Может я  и просмотрел и ошибся но привычных запросов к базе нету. по крайней мере в версии 3.4
Если долго мучится, что нибудь получится.

*

b2z

  • Support Team
  • *****
  • 7450
  • 741
  • Разраблю понемногу
Ну так его придется делать в самом файле макета. После строки

Код: php
<?php foreach ($items as $i => $item) : ?>

добавить

Код: php
<?php $db = JFactory::getDbo();

$db->setQuery(
$db->getQuery(true)
->select('hits')
->from('#__content')
->where('id = ' . (int) $item->content_item_id)
);

$hits = $db->loadResult();

В нужном месте вывести

Код: php
<?php echo $hits; ?>

Но это ужасно в плане производительности. На каждый материал делать доп. запрос...

*

Thores

  • Осваиваюсь на форуме
  • ***
  • 26
  • 3
Спасибо Дмитрий, но вы правы что это ужасно в  плане производительности, можно ли дописать свои значения в самом компоненте. Потому что там я получаю почти всю информацию необходимую мне, но тем не менее нескольких пунктов нехватает, лучше для меня пожертвовать обновлением пока что чем произоводительностью сайта
Если долго мучится, что нибудь получится.


*

Thores

  • Осваиваюсь на форуме
  • ***
  • 26
  • 3
 Спасибо за направление и помощь, о результатах отпишусь здесь, вдруг кому понадобится решение.
Если долго мучится, что нибудь получится.

*

Thores

  • Осваиваюсь на форуме
  • ***
  • 26
  • 3
Тогда ковыряйте getTagItemsQuery
Поковырял и отчасти разобрался, единственное что мне непонятно, что при любом добавочном запросе он идет не для всех значений таблицы сразу, а лишь к первому значению и оно принимается уже для каждого элемента. То бишь говоря простым языком запрашивается первое значение и устанавливается для всех.
Тогда в модели вывода components\com_tags\models\tag.php я добавил  у getItems()
Код
$db = JFactory::getDbo();
$db->setQuery(
$db->getQuery(true)
->select('hits')
->from('#__content')
->where('id = ' . (int) $item->content_item_id));
$hits = $db->loadResult();
$item->hits = $hits;
И все заработало, хотя опять же я думаю, что это с точки зрения производительности равносильно тому как засовывать такой запрос в шаблон вывода. Не знаю так ли это...

Теперь есть другой вопрос правда уже не по пункту меню "Список элементов".
Пункт меню "Список меток". Как вывести на экран количество элементов метки. Такой функционал есть в модуле "Популярные метки". Но почему то вывода этого количества нету там где оно так необходимо.
Я так полагаю запрос, по аналогии, должен быть примерно такой:
Код
<?php $db = JFactory::getDbo();
 
$db->setQuery(
$db->getQuery(true)
->select('tag_id')
->from('#__contentitem_tag_map')
->where('COUNT('tag_id') = ' . (int) $item->content_item_id)
);
 
$countelement = $db->loadResult();
Но вот куда его вставить ума не приложу ибо куда бы я не совался все нарушало структуру страницы. Прошу помощи.
Правильный ли запрос? Если нет, то как указать правильнее? И куда его засунуть?
Если долго мучится, что нибудь получится.

*

slepoy

  • Завсегдатай
  • *****
  • 713
  • 21
  • Тотальная шизофазия
Имя автора можно вывести кодом:
Код
<?php echo $item->author; ?>

Однако, мне необходимо вывести псевдоним автора "created_by" но ничего не удается, даже если подглядывать в файл шаблона блога:
Код
		if ($params->get('show_author') && !empty($this->item->author )) :
$output .='<dd class="createdby">';
$author =  $this->item->author;
$author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author);
if (!empty($this->item->contactid ) &&  $params->get('link_author') == true):
$output .= JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author));
else:
$output .= JText::sprintf('COM_CONTENT_WRITTEN_BY', $author);
endif;
$output .='</dd>';
endif;
Помог? Поставь(те) плюс в репутацию.

*

Thores

  • Осваиваюсь на форуме
  • ***
  • 26
  • 3
Имя автора можно вывести кодом:
Код
<?php echo $item->author; ?>
Можно добавить доп. запрос, методом, описанным выше. Правда лучше дождаться ответа Дмитрия, потому как я уже написал незнаю как такой способ влияет на производительность.
« Последнее редактирование: 19.03.2015, 09:26:25 от Thores »
Если долго мучится, что нибудь получится.

*

b2z

  • Support Team
  • *****
  • 7450
  • 741
  • Разраблю понемногу
Имя автора можно вывести кодом:
Код
<?php echo $item->author; ?>

Однако, мне необходимо вывести псевдоним автора "created_by" но ничего не удается, даже если подглядывать в файл шаблона блога:
Код
		if ($params->get('show_author') && !empty($this->item->author )) :
$output .='<dd class="createdby">';
$author =  $this->item->author;
$author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author);
if (!empty($this->item->contactid ) &&  $params->get('link_author') == true):
$output .= JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author));
else:
$output .= JText::sprintf('COM_CONTENT_WRITTEN_BY', $author);
endif;
$output .='</dd>';
endif;

Так там же есть core_created_user_id и core_created_by_alias -  не надо никаких доп запросов... Вот что в принципе доступно в item:

Код: php
stdClass Object
(
    [type_alias] => com_content.article
    [content_item_id] => 24
    [core_content_id] => 1
    [match_count] => 1
    [tag_date] => 2015-01-29 14:28:39
    [core_title] => Joomla! Testing
    [core_alias] => Joomla
    [core_body] => Thanks for helping us to test Joomla!
    [core_state] => 1
    [core_access] => 1
    [core_metadata] => {"robots":"","author":"","rights":"","xreference":""}
    [core_created_user_id] => 913
    [core_created_by_alias] =>
    [core_created_time] => 2011-01-01 00:00:01
    [core_images] => {"image_intro":"","float_intro":"","image_intro_alt":"","image_intro_caption":"","image_fulltext":"","float_fulltext":"","image_fulltext_alt":"","image_fulltext_caption":""}
    [core_modified_time] => 2015-01-29 12:28:39
    [core_language] => *
    [core_catid] => 19
    [core_publish_up] => 2011-01-01 00:00:01
    [core_publish_down] => 0000-00-00 00:00:00
    [content_type_title] => Article
    [router] => ContentHelperRoute::getArticleRoute
    [author] => Super User
    [author_email] => test@test
    [link] => index.php?option=com_content&view=article&id=24:joomla
    [displayDate] => 2011-01-01 00:00:01
    [event] => stdClass Object
        (
            [afterDisplayTitle] =>
            [beforeDisplayContent] =>
            [afterDisplayContent] =>
        )

    [text] => Thanks for helping us to test Joomla!
    [core_params] =>
)

Поковырял и отчасти разобрался, единственное что мне непонятно, что при любом добавочном запросе он идет не для всех значений таблицы сразу, а лишь к первому значению и оно принимается уже для каждого элемента. То бишь говоря простым языком запрашивается первое значение и устанавливается для всех.
Тогда в модели вывода components\com_tags\models\tag.php я добавил  у getItems()
Код
$db = JFactory::getDbo();
$db->setQuery(
$db->getQuery(true)
->select('hits')
->from('#__content')
->where('id = ' . (int) $item->content_item_id));
$hits = $db->loadResult();
$item->hits = $hits;
И все заработало, хотя опять же я думаю, что это с точки зрения производительности равносильно тому как засовывать такой запрос в шаблон вывода. Не знаю так ли это...
Туда нет смысла добавлять... Это тоже самое, что в макет добавить, но макет можно переопределить. Сам запрос в getTagItemsQuery - в нем надо колдовать. Но по моему, там ничего не сделать.

Цитировать
Теперь есть другой вопрос правда уже не по пункту меню "Список элементов".
Пункт меню "Список меток". Как вывести на экран количество элементов метки. Такой функционал есть в модуле "Популярные метки". Но почему то вывода этого количества нету там где оно так необходимо.

После
Код: php
<?php foreach ($this->items as $i => $item) : ?>

доабвьте
Код: php
<?php $db = JFactory::getDbo();
 
$db->setQuery(
$db->getQuery(true)
->select(COUNT('tag_id'))
->from('#__contentitem_tag_map')
->where('tag_id = ' . (int) $item->id)
);

$elementsCount = $db->loadResult();

Но опять - это запрос в цикле...