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

maxis

  • Захожу иногда
  • 119
  • 1 / 0
С праздником, Коллеги!

Копаюсь в компоненте
Код
com_tags в Joomla 3.x
и пытаюсь переопределить шаблон вывода материалов по меткам (тегам).

Хочу вывести программу мероприятия по дням (в роли дней метки), формат вывода:
Название метки
материал1, материал2, ...
Название метки2
материал3, материал4, ...
...

Лично мне это позволит построить гибкий список материалов, где метками можно управлять под каким названиями материал будет отображаться. Конкретная задача - расписание программ мероприятий на фестивале. Т.е. описание программы одно, но может попадать в разные даты. Для того, чтобы снять с программы на любой день, просто убираю метку с датой или добавляю при необходимости.

Если кто-то знает другие решения для такой задачи на Joomla 3.x - буду очень признателен.

столкнулся со следующими трудностями:
- не могу понять в каком месте компонент определяет кол-во меток, чтобы менять вывод (и если честно не до конца понял, где в шаблоне зависимость вида от кол-ва меток)
- как разделить результат запроса по нескольким меткам по конкретным меткам для группированного вывода в шаблоне.
- как получить список меток и их свойства, чтобы вывести заголовок метки и описание
- надо ли объединять шапку и список

Возможно есть другие решения, но я пока не придумал.

« Последнее редактирование: 21.05.2016, 13:08:19 от maxis »
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Может на описание работы компонента, кто ссылку даст?
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
В общем решил вопрос следующим образом (возможно есть более изящные)

1. Добавил в файл tags.php по адресу libraries/cms/helper
следом за 547 строкой перед скобкой:
Код
. ', ' . 'tags.title AS tag_title'
и после 577 строки вставил строку:
Код
->join('LEFT', '#__tags AS tags ON tags.id = m.tag_id')
Это для того, чтобы по тегу можно было отсортировать в шаблоне вывода (это тот самый костыль, который не нравится)

2. в шаблоне вывода списка тегов шаблон\html\com_tags\tag\default_items.php переопределил вместо стандартного (заменяем код с 62 строки по 93 тем, что в спойлере):   
Спойлер
[свернуть]

Детали вывода надо дополнять, конечно, но основную канву выводит как надо.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Рано радовался...
Выводит только по последнему указанному тегу. А надо, чтобы материал выводился по каждому тегу.

Может, кто подкинет идею, где копать?
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Добрался до того, что надо запрос немного переделывать, убирать лишнюю группировку. Только не знаю какую группировку убирать.
Есть у кого идеи?
Результирующий запрос получается такой:
Спойлер
[свернуть]

Не понимаю для чего так много значений с оператором MAX, может в этом загвоздка?
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
А где можно поправить количество результатов по тегам по умолчанию? Столкнулся с тем, что выдаёт только 20 строк запроса.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Нашел на форуме похожую задачу: http://joomlaforum.ru/index.php?topic=311732.0
проделывал похожее, но количество не поменялось. Нужно сделать так, чтобы все выбранные записи выводились с указанными параметрами. Упорно выдаёт 20 записей, хотя я меняю 20 на 60 здесь:
Код
$limit = $params->get('display_num', $app->get('list_limit', 20));
и здесь в значение по умолчанию задавал 60 (3-й параметр)
Код
$limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $limit, 'uint');

Есть несколько вопросов для знатоков:
Куда в конечном счёте передаётся итоговый запрос $query для выборки?
protected function populateState в моделе com_tags - кто и когда вызывает или через что вызывается. Не нашёл связей?


Знаю, что где-то на верном пути, но не нашёл ни документации и материалов как делать. Только общие советы.

HELP!
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Как оказалось всё гораздо проще. При отключенном фильтре компонент com_tags ориентируется на глобальные настройки. Там по умолчанию 20 стоит. Заодно и для админ панели добро сделал - 50 установил.
Исправляется здесь: Общие настройки -> Сайт -> Длина списка по умолчанию

Но вернулся к изначальной проблеме - список материалов. Оказывается не всё так просто... для меня. Копаем дальше.

Благодарю всех за внимание, помогать не стоит, сам как-нибудь доберусь до Истины.
До новых постов.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
На всякий случай, если вдруг кому-то интересно покопаться, текст запроса до применения пагинации:
Код
SELECT 
m.type_alias,
m.content_item_id,
m.core_content_id,
count(m.tag_id) AS match_count,
MAX(m.tag_date) as tag_date,
MAX(c.core_title) AS core_title,
MAX(c.core_params) AS core_params,
tags.title AS tag_title,
MAX(c.core_alias) AS core_alias,
MAX(c.core_body) AS core_body,
MAX(c.core_state) AS core_state,
MAX(c.core_access) AS core_access,
MAX(c.core_metadata) AS core_metadata,
MAX(c.core_created_user_id) AS core_created_user_id,
MAX(c.core_created_by_alias) AS core_created_by_alias,
MAX(c.core_created_time) as core_created_time,
MAX(c.core_images) as core_images,
CASE WHEN c.core_modified_time = '0000-00-00 00:00:00' THEN c.core_created_time ELSE c.core_modified_time END as core_modified_time,
MAX(c.core_language) AS core_language,
MAX(c.core_catid) AS core_catid,
MAX(c.core_publish_up) AS core_publish_up,
MAX(c.core_publish_down) as core_publish_down,
MAX(ct.type_title) AS content_type_title,
MAX(ct.router) AS router,
CASE WHEN c.core_created_by_alias > ' ' THEN c.core_created_by_alias ELSE ua.name END AS author,
ua.email AS author_email
FROM
#__contentitem_tag_map AS m INNER JOIN #__ucm_content AS c ON
m.type_alias = c.core_type_alias AND
m.core_content_id = c.core_content_id AND
c.core_state IN (1) AND
(c.core_publish_up = '0000-00-00 00:00:00' OR c.core_publish_up <= '2016-05-12 09:05:34') AND
(c.core_publish_down = '0000-00-00 00:00:00' OR c.core_publish_down >= '2016-05-12 09:05:34')
INNER JOIN #__content_types AS ct ON
ct.type_alias = m.type_alias
LEFT JOIN #__users AS ua ON
ua.id = c.core_created_user_id
LEFT JOIN #__tags AS tags ON
tags.id = m.tag_id
WHERE m.tag_id IN (3,4,5,6) AND
`c`.`core_language` IN ('ru-RU', '*') AND
m.type_alias IN ('com_content.article') AND
c.core_access IN (0,1,5)
GROUP BY m.type_alias, m.content_item_id, m.core_content_id, core_modified_time, core_created_time, core_created_by_alias, name, author_email ORDER BY MAX(`c`.`core_title`) ASC

Буду признателен, если подскажете, что здесь лишнее исходя из задачи. В выборку должны попадать не только уникальные, но и повторяющиеся материалы согласно таблице #__contentitem_tag_map
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Пока решил таким образом:
Закомментировал в выборке вот эти строки
Код
->group('m.type_alias, m.content_item_id, m.core_content_id, core_modified_time, core_created_time, core_created_by_alias, name, author_email')
. ', ' . 'count(m.tag_id) AS match_count'

убрал из запроса группировку по максимальным значениям MAX

Теперь выбираются не только уникальные строки, но и добавлены строки, где установлено несколько тегов (меток), с учётом настроек компонента. Возможно некорректно работает параметр Строгое соответствие или не строгое соответствие.
« Последнее редактирование: 20.05.2016, 09:47:11 от maxis »
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Благодарю всех за помощь!

Задачу по переопределению вывода списка материалов по метке в компоненте метки com_tags решил следующим образом:

1. установил максимальное кол-во позиций в списке в глобальных настройках Общие настройки -> Сайт -> Длина списка по умолчанию
2. Закомментировал следующие строки в SQL Запросе:
Код
->group('m.type_alias, m.content_item_id, m.core_content_id, core_modified_time, core_created_time, core_created_by_alias, name, author_email')
. ', ' . 'count(m.tag_id) AS match_count'
3. переопределил шаблон вывода имяшаблона/html/com_tags/tag/default_item.php
Добавил непосредственно перед выводом списка:
Код
<?php $sort_by_tag = array();
foreach ($items as $item) {
$sort_by_tag[$item->tag_title][] = $item;
}
?>
Изменил вывод списка вместо простого вывода списка по умолчанию, поставил вот это:
Код
<?php foreach ($sort_by_tag as $tag => $items_by_tag): ?> 
<div class="h2dev"><h2>Мероприятия на <?php echo $tag; ?></h2></div>
<ul class="category list-striped">
<?php foreach ($items_by_tag as $item): ?>
...и в конце не забываем закрыть циклы foreach:
Код
				</li> <!-- завершает вывод позиции списка в оригинальном варианте -->
<?php endforeach; ?>
</ul>
<?php endforeach; ?>

Не проверял опцию по соответствию, она может некорректно работать так как переменная, которая отвечает за условие, которое добавляется в запрос закомментирована match_count в первом пункте  ^-^
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Совместными усилиями результат достигнут, благодаря моему другу, который хорошо разбирается логике построения запросов Владимир Герасимчук v.gerasimchuk@mail.ru
 :D :D :D

По сути тему можно закрывать, но если кто-то хочет добавить свои альтернативные решения или уже готовые, то будет отличное дополнение ветки. Благодарю всех за внимание!

Всех благ!
 ^-^
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Вы случайно от id не избавлялись в брауз.строке в тегах?
В плане такая ссылка при клике на тег : /component/tags/tag/id-тег
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Вы случайно от id не избавлялись в брауз.строке в тегах?
В плане такая ссылка при клике на тег : /component/tags/tag/id-тег

Читал Ваш пост, прикинул как это можно сделать но не придумал. Столкнулся с тем, что без ID материала ссылка некликабельная становится, но я полагаю, что неглубоко копал.
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
А при чём тут id материала?
Это id тега по счёту из компонента:если тег создан 7-ой по счёту "joomla", то и id будет 7.
И ссылка будет /component/tags/tag/7-joomla
Вот от этого я хочу избавиться.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
А при чём тут id материала?
Это id тега по счёту из компонента:если тег создан 7-ой по счёту "joomla", то и id будет 7.
И ссылка будет /component/tags/tag/7-joomla
Вот от этого я хочу избавиться.

Я понял Вас, но не ставил себе такой задачи. А в чём сложность? На каком месте неразрешимая проблема?
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Решил плагином скрытия ид.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

easy_simple

  • Осваиваюсь на форуме
  • 49
  • 0 / 0
Уважаемые господа, вы так хорошо разбираетесь в Joomla. может знаете как фильтровать по тэгу внутри категории? то есть нахожусь я в определённой категории и хочу только в ней отфильтровать материалы по тэгу.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Уважаемые господа, вы так хорошо разбираетесь в Joomla. может знаете как фильтровать по тэгу внутри категории? то есть нахожусь я в определённой категории и хочу только в ней отфильтровать материалы по тэгу.

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

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Тему можно закрывать.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Плагин для вывода похожих материалов картинками

Автор jess

Ответов: 33
Просмотров: 3813
Последний ответ 14.05.2023, 19:45:43
от franzheinzel
Глюки с модулем вывода последних опубликованных материалов

Автор MultiMatrix83

Ответов: 3
Просмотров: 519
Последний ответ 13.11.2021, 19:46:25
от draff
После обновления до 3.10.2 пропали из списка обновлеия

Автор newalex

Ответов: 1
Просмотров: 575
Последний ответ 07.10.2021, 14:17:33
от ProtectYourSite
Условие для image_intro в альтернативном макете вывода статьи

Автор Olg

Ответов: 2
Просмотров: 600
Последний ответ 24.05.2021, 12:55:38
от Olg
Проблема с выводом материалов в две колонки

Автор blind

Ответов: 3
Просмотров: 585
Последний ответ 27.02.2021, 21:21:38
от IToro82