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

Главные вкладки

Аватар пользователя clubwave.ru clubwave.ru 23 декабря 2009 в 23:14

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

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

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

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

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

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

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

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

Комментарии

Аватар пользователя ankheg ankheg 23 декабря 2009 в 23:48

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

Аватар пользователя clubwave.ru clubwave.ru 23 декабря 2009 в 23:57

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

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

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

Аватар пользователя ankheg ankheg 24 декабря 2009 в 1:00

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

Да.

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

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

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

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

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

Аватар пользователя clubwave.ru clubwave.ru 24 декабря 2009 в 1:29

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

Аватар пользователя clubwave.ru clubwave.ru 24 декабря 2009 в 2:31

соображалка сейчас плохо работает, такой код подойдёт? (написано, что для дру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, я удаляю пользователей, который ниразу не заходили за длительное время)

Аватар пользователя edhel edhel 24 декабря 2009 в 5:34

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

Аватар пользователя edhel edhel 24 декабря 2009 в 7:00

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

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

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

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

Аватар пользователя clubwave.ru clubwave.ru 24 декабря 2009 в 15:16

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 вообще не влияет, на указанную мной проблему.. поскольку даже если очистить эту таблицу, комменты всё также показываются до определённой страницы

Аватар пользователя edhel edhel 24 декабря 2009 в 15:43

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

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

Аватар пользователя ankheg ankheg 24 декабря 2009 в 18:32

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

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

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

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

и потом

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

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

Аватар пользователя clubwave.ru clubwave.ru 24 декабря 2009 в 23:18

select count(*) from comments where nid = 4535

update node_comment_statistics set comment_count = 4535 where nid = 38959

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

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

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

Аватар пользователя ankheg ankheg 24 декабря 2009 в 23:35

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

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

Аватар пользователя clubwave.ru clubwave.ru 25 декабря 2009 в 0:47

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

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 на не правильной странице

Аватар пользователя clubwave.ru clubwave.ru 25 декабря 2009 в 4:23

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

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

Аватар пользователя edhel edhel 25 декабря 2009 в 6:09

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

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

Аватар пользователя clubwave.ru clubwave.ru 25 декабря 2009 в 18:04

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

Аватар пользователя edhel edhel 25 декабря 2009 в 19:05

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

Аватар пользователя mNigma@drupal.org mNigma@drupal.org 3 января 2010 в 11:40

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

Аватар пользователя clubwave.ru clubwave.ru 14 марта 2010 в 13:54

Обновился до 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

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