Новости Joomla

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

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Всем привет!
Верстаю модуль вывода данных по тегам на основе оригинального запроса Joomla (libraries\src\Helper\TagsHelper.php) - getTagItemsQuery(), нужно переписать запрос с дополнительными параметрами.

Что надо?

ЛИМИТЫ И СОРТИРОВКА
Внедрить лимит на вывод каждого типа контента.
Лимит должен быть не общий на весь массив данных, как например, на вывод массива из 5 значений. А лимит должен быть на каждый тип контента (com_content.article, com_contact.contact, com_content.category, com_contact.category, com_banners.banner, com_banners.category), где мы ограничиваем, например, до 5 значений КАЖДОГО типа.
+ Переделываем сортировку, чтобы она работала ВНУТРИ вывода КАЖДОГО типа контента.

УТОЧНЕНИЕ КАТЕГОРИЙ
Для типов контента com_content.article, om_contact.contact, com_banners.banner сделать уточнение из каких ID категорий внутри брать данные

СТРУКТУРА МАССИВА
В итоге мы должны получать двумерный массив данных, внутри которого были бы массивы для каждого типа контента с сортировкой и ограничением количества выводимых значений.

stdClass Object (
    [com_contact.contact] => Array (
      [О] => stdClass Object (
         [type_alias] => com_contact.contact
         [content_item_id] => 6
         [core_content_id] => 66
         [match_count] => 1
         [tag_date] => 2021-03-17 15:57:25
         [core_title] => sample title
         [core_params] => {..........}
         [core_alias] => sample-alias
         [core_state] => 1
         [core_access] => 1
         [core_metadata] => {"robots":"","rights":""}
         [core_created_user_id] => 42
         [core_created_by_alias] =>
         [core_created_time] => 2020-09-14 07:54:33
         [core_images] =>
         [core_modified_time] => 2021-03-17 12:57:25
         [core_language] => *
         [core_catid] => 4
         [core_publish_up] => 0000-00-00 00:00:00
         [core_publish_down] => 0000-00-00 00:00:00
         [content_type_title] => Contact
         [router] => ContactHelperRoute::getContactRoute
         [author] => Super User
      )
      [1] => stdClass Object (
         [key] => value
         ...
      )
      [2] => stdClass Object (
         [key] => value
         ...
      )
      [3] => stdClass Object (
         [key] => value
         ...
      )
   )
   [com_content.article] => Array (
   ...
   )
   [com_banners.banner] => Array (
   ...
   )
   [com_contact.category] => Array (
   ...
   )
   [com_content.category] => Array (
   ...
   )
   [com_banners.category] => Array (
   ...
   )
)


Сейчас запрос к БД формируется так, что в результате даёт просто общую простыню всех материалов....

Код
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,
MAX(c.core_alias) AS core_alias,
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
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 <= '2021-07-05 17:13:33')
AND (c.core_publish_down = '0000-00-00 00:00:00' OR c.core_publish_down >= '2021-07-05 17:13:33')
INNER JOIN #__content_types AS ct ON ct.type_alias = m.type_alias
LEFT JOIN #__categories AS tc ON tc.id = c.core_catid
LEFT JOIN #__users AS ua ON ua.id = c.core_created_user_id
WHERE
m.tag_id IN (10,11)
AND (c.core_catid = 0 OR tc.published = 1)
AND `c`.`core_language` IN ('en-GB', '*')
AND m.type_alias IN ('com_content.article','com_contact.contact','com_content.category','com_contact.category','com_banners.banner','com_banners.category')
AND c.core_access IN (0,1,2,3,6)
GROUP BY m.type_alias, m.content_item_id, m.core_content_id, core_modified_time, core_created_time, core_created_by_alias, author
ORDER BY MAX(`c`.`core_title`) ASC
« Последнее редактирование: 06.07.2021, 17:04:01 от moonaway »
*

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться