Не отображаются комментарии

23 декабря 2009 в 23:14

Очень непонятный глюк появился сегодня

Суть проблемы в том, что начиная с определённой страницы, комментарии перестают отображаться, отображается лишь нода и список страниц с комментариями (во вложении 2 страницы, одна, где комментарии ещё отображаются и вторая, где их уже нет)

При этом комментарии добавляются, количество страничек продолжает увеличиваться, но самих комментариев нет и в коде просто пустота

Из последних изменений - обновился до друпал 6.15

Что уже сделал:

1. Очистил кэш друпала
2. Перезагрузил mysql сервер
3. Очистил кэш таблицы комментариев
4. Перезагрузил весь сервер
5. Нажал "восстановить таблицу" в myadmin

Я в замешательстве... Что ещё можно попробовать?

ВложениеРазмер
Иконка изображения Всё ОК249.06 КБ
Иконка изображения Глюк247.95 КБ

Комментарии

Для начала я бы проверил, соответствует ли $node->comment_count реальному количеству комментариев в таблице {comments}.

23 декабря 2009 в 23:48

ankheg, имеете ввиду для конкретно этой ноды проверить?

просто таких нод несколько, но далеко не все

ещё прикол, пока мы тут обсуждаем на странице 449 появился один коммент

23 декабря 2009 в 23:57

"clubwave.ru" wrote:
ankheg, имеете ввиду для конкретно этой ноды проверить?

Да.

"clubwave.ru" wrote:
ещё прикол, пока мы тут обсуждаем на странице 449 появился один коммент

Может быть сбился счетчик комментариев к ноде в большую сторону. То есть реальных комментареив меньше, чем в comment_count. Но при добавлении новых счетчик все равно увеличивается. Это объясняет описанную проблему.

Возможны и другие варианты.

Например, я бы посмотрел таблице {comments} последние комментарии к какой-нибудь проблемной ноде. Нет ли там чего-нибудь подозрительного. Потому что 450 страниц с комментариями к одной ноде - это нетипично.

Или еще я бы включил модуль devel и посмотрел бы SQL-запрос на доставание комментариев на странице, где пусто.

24 декабря 2009 в 1:00

ок, сейчас буду ещё пробовать.. ну а что делать то в случае, если не соответствует comment_count количеству записей в бд?

24 декабря 2009 в 1:29

соображалка сейчас плохо работает, такой код подойдёт? (написано, что для дру5)

TRUNCATE TABLE `node_comment_statistics` ;

INSERT INTO node_comment_statistics( nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count ) (

SELECT nid, c.timestamp, name, uid, comment_count
FROM comments AS c
INNER JOIN (

SELECT MAX( timestamp ) AS timestamp, COUNT( * ) AS comment_count
FROM comments
WHERE STATUS Shok
GROUP BY nid
) AS c2 ON c.timestamp = c2.timestamp
) ;

INSERT INTO node_comment_statistics (
SELECT nid,created,NULL,uid,0 FROM node WHERE nid NOT IN (SELECT nid FROM node_comment_statistics)
) ;

удаляет комменты VBO, я удаляю пользователей, который ниразу не заходили за длительное время)

24 декабря 2009 в 2:31

Посмотрите в браузере html-исходник страницы - там действительно нет комментариев? А то может просто html-разметка кривая в теме.

24 декабря 2009 в 5:34

"clubwave.ru" wrote:
как может на одной странице показываться, а на другой нет из-за разметки?

Да легко. Например, в каком-то комментарии указан homepage и в comment.tpl.php этот случай криво обработан (забыли закрыть html-комментарий, к примеру).

Покажите comment.tpl.php из Вашей темы и всё, что есть в template.php про комментарии (если есть).

Какие модули используются кроме стандартных?

24 декабря 2009 в 7:00

edhel, дело не в темплейтах 100%

VBO удалил часть комментов, а как теперь перестроить node_comment_statistics ума не приложу

вот отчёт:

mysql> INSERT INTO
-> node_comment_statistics
-> (
-> nid,
-> last_comment_timestamp,
-> last_comment_name,
-> last_comment_uid,
-> comment_count
-> )
-> SELECT
-> n.nid,
-> IFNULL(last_comment.timestamp,n.changed) AS last_comment_timestamp,
-> IFNULL(last_comment.name,null) AS last_comment_name,
-> IFNULL(last_comment.uid,n.uid) AS last_comment_uid,
-> IFNULL(comment_count.comment_count,0) AS comment_count
-> FROM
-> node AS n
-> LEFT OUTER JOIN (SELECT nid, COUNT(*) AS comment_count FROM comments WHERE status=0 GROUP BY nid) AS comment_count ON comment_count.nid=n.nid
-> LEFT OUTER JOIN (SELECT nid, MAX(cid) AS max_cid FROM comments WHERE status=0 GROUP by nid) AS max_node_comment ON max_node_comment.nid=n.nid
-> LEFT OUTER JOIN (SELECT cid,uid,name,timestamp FROM comments ORDER BY cid DESC LIMIT 1) AS last_comment ON last_comment.cid=max_node_comment.max_cid
-> WHERE
-> n.status=1
-> ORDER BY
-> n.nid;
Query OK, 125480 rows affected (39 min 49.88 sec)
Records: 125480 Duplicates: 0 Warnings: 0

mysql>

код запроса под 5-ку. .под 6-й друпал найти не удалось, хотя таблицы вроде бы соответствуют..

сегодня записей в таблице node: 131,695.. тоже странно.. не могли же 6 тысяч за утро настрогать.. ну не суть, почему-то node_comment_statistics вообще не влияет, на указанную мной проблему.. поскольку даже если очистить эту таблицу, комменты всё также показываются до определённой страницы

24 декабря 2009 в 15:16

Копайте comment_render, ставьте там print-ы куда ни попадя. Надо понять возвращает ли select правильные комменты. Если всё возвращает правильно, то действительно ли они уходят в функцию темизации (theme('comment...')).

Также непонятно правильное ли количество страниц вообще выводится? Просто посчитать ручками select count(*) from comments where nid=123 и поделить на размер страницы.

24 декабря 2009 в 15:43

"clubwave.ru" wrote:
удаляет комменты VBO

Мне кажется это и вызывает проблемы. Комменты удаляются, а comment_count не обновляется.

Сделайте запрос

select count(*) from comments where nid = номер_проблемной_ноды

и потом

update node_comment_statistics set comment_count = полученное_число where nid = номер_проблемной_ноды

Если получится, то можно дальше копать в этом направлении.

24 декабря 2009 в 18:32

select count(*) from comments where nid = 4535

update node_comment_statistics set comment_count = 4535 where nid = 38959

результатов не дало

Затронуто строк: 0. ( запрос занял 0.0003 сек. )

а это почему так? я в myadmin писал

24 декабря 2009 в 23:18

"clubwave.ru" wrote:
Затронуто строк: 0. ( запрос занял 0.0003 сек. )

Значит там и было 4535. Нужно искать другие причины.

24 декабря 2009 в 23:35

на не правильной странице запросы, касающиеся комментов выглядят так:

pager_query

SELECT c.cid AS cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data, c.thread, c.status FROM comments c INNER JOIN users u ON c.uid = u.uid WHERE c.nid = 38959 ORDER BY c.cid LIMIT 4510, 10

pager_query

SELECT COUNT(*) FROM comments c WHERE c.nid = 38959

comment_nodeapi

SELECT last_comment_timestamp, last_comment_name, comment_count FROM node_comment_statistics WHERE nid = 38959

node_comment_mode

SELECT comment FROM node WHERE nid = 38959

на правильной так:

pager_query

SELECT c.cid AS cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data, c.thread, c.status FROM comments c INNER JOIN users u ON c.uid = u.uid WHERE c.nid = 38959 ORDER BY c.cid LIMIT 4500, 10

pager_query

SELECT COUNT(*) FROM comments c WHERE c.nid = 38959

comment_nodeapi

SELECT last_comment_timestamp, last_comment_name, comment_count FROM node_comment_statistics WHERE nid = 38959

node_comment_mode

SELECT comment FROM node WHERE nid = 38959

причём на "правильной" выводится 6 комментариев из 10 доступных

помимо этого разумеется отсутствуют запросы модуля userpoint на не правильной странице

25 декабря 2009 в 0:47

комменты отображаются все, если добавить новый, он отображается на несколько пустых страничек раньше, но перекидывает на последнюю пустую страничку

т.е. получается дело в неправильном определении количества страниц pager'ом

25 декабря 2009 в 4:23

"clubwave.ru" wrote:
SELECT comment FROM node WHERE nid = 38959

это настройки комментариев (2 означает - читать и добавлять можно)

25 декабря 2009 в 6:09

друпал орг перелопатил.. ничего.. не знаю как ещё задать можно.. почему pager думает ,что комментов больше, чем есть

25 декабря 2009 в 18:04

Ну я бы раскопал на живом сайте, а так... не буду же я писать номера строчек куда вставить print, чтобы проверить одно или другое, мы так можем неделю+ переписываться... копайте comment.module, вставляйте print-ы, смотрите какие значения и почему получаются.

25 декабря 2009 в 19:05

Комментарии добавляют анонимные пользователи? Я обновился до версии 6.15, при перезаливке бд, идентификатор вместо 0 стал 4. Комментарии не отображались, а их количество было видно.

3 января 2010 в 11:40

Обновился до 6.16 глюк остался

Всё-таки хочется разобраться. Итак модуль devel показывает следующие запросы, относящиеся к теме (в скобках указаны получаемые значение при выполнении запроса через PhpMyAdmin):

SELECT COUNT(*) FROM comments c WHERE c.nid = 6604 (655)

SELECT c.cid AS cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data, c.thread, c.status FROM comments c INNER JOIN users u ON c.uid = u.uid WHERE c.nid = 6604 ORDER BY c.cid LIMIT 640, 10 (null)

запрос осуществляется на странице с отсутствующими комментами

если немного изменить запрос..

SELECT c.cid AS cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data, c.thread, c.status FROM comments c INNER JOIN users u ON c.uid = u.uid WHERE c.nid = 6604 ORDER BY c.cid (627 всего, запрос занял 0.0109 сек.)

вобщем пока писал нашёл.. дело в том, что у некоторых комментов uid оказался = 0

соответственно после удаления такие комментов, всё всталона свои места

14 марта 2010 в 13:54