Closed makey2 closed 4 years ago
@makey2 Выглядит так, как будто по первому запросу, отбирающему новости по тегам, не находятся никакие ID По крайней мере судя по логу запросов. Получается, что имя тега у вас должно совпадать с ID новости, но либо не совпадает, либо таких новостей нет.
Вот тут реализована логика отбора новостей по тегу. https://github.com/dle-modules/DLE-BlockPro/blob/5fcb7d5d3b362c5cf1e89fc1377fec14bbfccd62/engine/modules/base/blockpro.php#L746-L751
@pafnuty Да, действительно. Сам запутался и Вас запутываю... Простите!!! Причина такого поведения была закомментированная, мной строчка "$wheres[] = ...." Но комментировал ее не ради развлечений. Ищу причину странности. Из одной категории выбор по тегам работает правильно. Если есть такая новость (тег совпал с ID) - показывает анонс, если нет тега - сообщение. Все так как и должно быть, но вот с другой категорией совсем не так. Если есть тег равный ID - показывает анонс новости правильно, в противном случае вместо сообщения выводит из указанной категории "первые попавшиеся" согласно сортировке. При этом блок статистика не появляется.
Единственное, что отличает: в первом случае по одному тегу к новости, а во втором может быть несколько (т.е. ID новостей, где должен показываться анонс).
@makey2 Т.е. получается, если несколько тегов у новости, то она не выводится? Попробуйте изменить порядок тегов или оставить один тег, что бы исключить/подтвердить это предположение.
@pafnuty Поймал! Дело не в категории!!! Очистил в новостях одной категории все теги. На страницах, где одно подключение blockpro с поиском в этой категории, вместо сообщения об ошибке (не найдена новость) появился список из 10 анонсов новостей. На нескольких страницах два подключения blockpro. При условии, что хотя бы по одному найден тег, проблем со вторым подключением не возникает (есть сообщение, что новость не найдена)! Если ни по одному подключению нет тега, то оба выдают по 10 анонсов (сортировка по умолчанию) вместо сообщения.
Если одно подключение и нет тега (список вместо сообщения):
Запрос(ы):
[1] SELECT news_id FROM `dh_tags` WHERE tag regexp "[[:<:]](4945)[[:>:]]"
[1 время:] 9.0837478637695E-5
[2] SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, p.allow_comm, p.comm_num, p.fixed, p.allow_main, p.symbol, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.related_ids, e.view_edit, e.editdate, e.editor, e.reason FROM `dh_post` p LEFT JOIN `dh_post_extras` e ON (p.id=e.news_id) WHERE approve AND category regexp "[[:<:]](49)[[:>:]]" ORDER BY fixed DESC, e.rating DESC, p.comm_num DESC, e.news_read DESC LIMIT 0, 10
[2 время:] 0.00011491775512695
Время выполнения запросов: 0.00020575523376465
Время выполнения скрипта: 0.010689 c.
Расход памяти: 5.96Мб
Если 2 подключения и по обоим нет тега (списки вместо сообщений):
Запрос(ы):
[1] SELECT news_id FROM `dh_tags` WHERE tag regexp "[[:<:]](4795)[[:>:]]"
[1 время:] 6.6995620727539E-5
[2] SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, p.allow_comm, p.comm_num, p.fixed, p.allow_main, p.symbol, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.related_ids, e.view_edit, e.editdate, e.editor, e.reason FROM `dh_post` p LEFT JOIN `dh_post_extras` e ON (p.id=e.news_id) WHERE approve AND category regexp "[[:<:]](49)[[:>:]]" ORDER BY fixed DESC, e.rating DESC, p.comm_num DESC, e.news_read DESC LIMIT 0, 10
[2 время:] 0.0049939155578613
Время выполнения запросов: 0.0050609111785889
Время выполнения скрипта: 0.014418 c.
Расход памяти: 5.96Мб
Запрос(ы):
[1] SELECT news_id FROM `dh_tags` WHERE tag regexp "[[:<:]](4795)[[:>:]]"
[1 время:] 6.6995620727539E-5
[2] SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, p.allow_comm, p.comm_num, p.fixed, p.allow_main, p.symbol, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.related_ids, e.view_edit, e.editdate, e.editor, e.reason FROM `dh_post` p LEFT JOIN `dh_post_extras` e ON (p.id=e.news_id) WHERE approve AND category regexp "[[:<:]](49)[[:>:]]" ORDER BY fixed DESC, e.rating DESC, p.comm_num DESC, e.news_read DESC LIMIT 0, 10
[2 время:] 0.0049939155578613
[3] SELECT news_id FROM `dh_tags` WHERE tag regexp "[[:<:]](4795)[[:>:]]"
[3 время:] 6.6995620727539E-5
[4] SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, p.allow_comm, p.comm_num, p.fixed, p.allow_main, p.symbol, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.related_ids, e.view_edit, e.editdate, e.editor, e.reason FROM `dh_post` p LEFT JOIN `dh_post_extras` e ON (p.id=e.news_id) WHERE approve AND category regexp "[[:<:]](663)[[:>:]]" ORDER BY fixed DESC, e.rating DESC, p.comm_num DESC, e.news_read DESC LIMIT 0, 10
[4 время:] 0.0030679702758789
Время выполнения запросов: 0.0081958770751953
Время выполнения скрипта: 0.005504 c.
Расход памяти: 5.96Мб
Если два подключение и хотя бы по одному есть тег (работает правильно):
Запрос(ы):
[1] SELECT news_id FROM `dh_tags` WHERE tag regexp "[[:<:]](4765)[[:>:]]"
[1 время:] 6.6995620727539E-5
[2] SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, p.allow_comm, p.comm_num, p.fixed, p.allow_main, p.symbol, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.related_ids, e.view_edit, e.editdate, e.editor, e.reason FROM `dh_post` p LEFT JOIN `dh_post_extras` e ON (p.id=e.news_id) WHERE approve AND category regexp "[[:<:]](49)[[:>:]]" AND id IN (5409) ORDER BY fixed DESC, e.rating DESC, p.comm_num DESC, e.news_read DESC LIMIT 0, 10
[2 время:] 0.00050783157348633
Время выполнения запросов: 0.00057482719421387
Время выполнения скрипта: 0.004741 c.
Расход памяти: 4.84Мб
Запрос(ы):
[1] SELECT news_id FROM `dh_tags` WHERE tag regexp "[[:<:]](4765)[[:>:]]"
[1 время:] 6.6995620727539E-5
[2] SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, p.allow_comm, p.comm_num, p.fixed, p.allow_main, p.symbol, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.related_ids, e.view_edit, e.editdate, e.editor, e.reason FROM `dh_post` p LEFT JOIN `dh_post_extras` e ON (p.id=e.news_id) WHERE approve AND category regexp "[[:<:]](49)[[:>:]]" AND id IN (5409) ORDER BY fixed DESC, e.rating DESC, p.comm_num DESC, e.news_read DESC LIMIT 0, 10
[2 время:] 0.00050783157348633
[3] SELECT news_id FROM `dh_tags` WHERE tag regexp "[[:<:]](4765)[[:>:]]"
[3 время:] 6.3896179199219E-5
[4] SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, p.allow_comm, p.comm_num, p.fixed, p.allow_main, p.symbol, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.related_ids, e.view_edit, e.editdate, e.editor, e.reason FROM `dh_post` p LEFT JOIN `dh_post_extras` e ON (p.id=e.news_id) WHERE approve AND category regexp "[[:<:]](663)[[:>:]]" AND id IN (5409) ORDER BY fixed DESC, e.rating DESC, p.comm_num DESC, e.news_read DESC LIMIT 0, 10
[4 время:] 0.00026392936706543
Время выполнения запросов: 0.00090265274047852
Время выполнения скрипта: 0.000865 c.
Расход памяти: 5.06Мб
Еще уточнение: сами страницы, на которых подключен вывод BlockPro не имеют тегов. Показ блока производится в шаблоне короткой новости.
Сделал чистую установку Версия DLE 12.1 Версия PHP: 7.3.11 Одну новость (id3) перенес в категорию с id 2. Добавил в шаблон короткой и шаблон полной строку вызова {include file="engine/modules/base/blockpro.php?catId=1&tags={news-id}"}. Новости с id2 добавил тег "1" Результат: Если нет указанного тега, то выводятся новости из категории те что есть. Если тег найден, то новость имеющая его. Почему нет сообщения об ошибке? Прошу помочь, очень нужно!!!! Иначе получается, что на всех страницах вместо уникального контента для определенной новости выводиться одно и тоже (((
@makey2 прошу прощения, пропустил все сообщения от вас. Похоже недоработка модуля. Попробуйте после этой строки https://github.com/dle-modules/DLE-BlockPro/blob/dad276ab2bf21ff56219807778af846218bee007/engine/modules/base/blockpro.php#L767
else {
$wheres[] = 'id = 0';
}
Судя по всему из-за того, что тегов не найдено, логика отбора новостей по ним не срабатывает и условие не добавляется в запрос.
@pafnuty , спасибо! Сейчас все работает корректно!
@makey2 ок, пока поживите так, в следующей версии будет исправлено.
@makey2 Исправлено
Ошибка заключается в том, что выводятся 10 новостей из указанной категории, а не сообщение об ошибке (если тегов совпадающих нет). Ощущение, что кешируется, т.к. в разных шаблонах и страницах одинаковые статьи выводятся. Кеш отключен на сайте. Версия DLE 12.1 Версия PHP: 7.3.11
Вывод строкой: {include file="engine/modules/base/blockpro.php?nocache=y&catId=663&tags={news-id}"} и {include file="engine/modules/base/blockpro.php?template=blockpro/faq&nocache=y&catId=49&tags={news-id}&sort=none"} Теги совпадают с ID новости.
Шаблоны: -----1-------
------2------