Странный баг (фильтры?)

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

Аватар пользователя Old.timer Old.timer 7 января 2007 в 18:43

Здравствуйте, господа! Недавно на меня напал непонятный и зловещий баг. Использую друпал 4.7.4. Пока заметил два его проявления. А) Темы форума - к стандартным нодам forum в конце автоматически против моей воли прилепляется следующий код: <div class="forum-topic-navigation"><a href="/node/362" class="topic-previous" title="Go to previous forum topic">‹ АХД!</a><a href="/node/204" class="topic-next" title="следующее обсуждение &amp;gt;&amp;gt;">Орг. вопросы по АХД ›</a></div>То есть в тело ноды внедряется forum-topic-navigation, который тут же системой выводится под телом ноды. Выглядит это некрасиво (см. файл) и очень раздражает. Б) К нодам (например, story) с приаттаченными изображениями посредством внедрения в ноду кода (как вирус какой-то) <div style="width: 185px" class="image-attach-body"><a href="/node/160"><img src="/system/files/images/logo_1_rus.thumbnail.gif" alt="" title="" class="image thumbnail" width="185" height="118" /></a></div>изображение крепится по второму разу. Эффект негативный (см. файл). Наблюдения: 1) В таблице node_revisions в полях teaser/body этого мусора нет, т.е. избыточный код выводится чем-то автоматически 2) Главное: в формате PHP (точнее, с включённым фильтром `Тестирование кода PHP`) все эти фокусы (А и Б) пропадают! Но я же не могу включить пользователям этот фильтр.. Убивать это через CSS не буду принципиально. Апгрейд до 5.0 предстоит не скоро. Прошу помочь с устранением бага! Может кто-то уже сталкивался?

Комментарии

Аватар пользователя Old.timer Old.timer 7 января 2007 в 23:47

Не удаётся выяснить первопричину генерации избыточного кода. Модулей не так уж много - около 50 - и все стандартные, ничего особо серьезного. С темами/движками это никак не связано, баг вылезает всегда.

Остаётся понять, каким образом PHP evaluator блокирует генерацию избыточного кода (или каким образом HTML фильтры её вызывают)?

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 7 января 2007 в 23:53

На мой взгляд фильтры не при чем. Дело в том, что объект $node->body может изменять (дополнять) любой hook_node_api() любого стороннего модуля.

Замечание о том, что "модулей не так уж много - около 50" - в мемориз Smile

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя Old.timer Old.timer 8 января 2007 в 0:20

На мой взгляд фильтры не при чем. Дело в том, что объект $node->body может изменять (дополнять) любой hook_node_api() любого стороннего модуля.
Допускаю, спасибо за идею. Но почему тогда режим ввода PHP evaluator убирает эту проблему - он блокирует hook_node_api()? Есть ли безопасные способы блокировать эту функцию? Полагаю, что никаким моим модулям она не нужна.
Замечание о том, что "модулей не так уж много - около 50" - в мемориз Smile
Smile Когда осенью впервые поставил Друпал, чуть ли не треть модулей с офсайта скачал - столько полезного на первый взгляд, когда читаешь описания )) Но увы, ресурсы небесконечны... Кстати, думаю, что среднестатистический сайт использует 20-30 модулей (я считаю вместе с ядром).

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 8 января 2007 в 1:31

hook_node_api() вовсе не функция, это шаблон для функций, позволяющих модулям взаимодействовать с публикациями. Я вовсе не хотел сказать, что фильтр "PHP evaluator" блокирует эти функции, полагаю, что проблемный модуль просто не обрабатывает публикации, использующие этот фильтр. По хорошему нужно просматривать код в поисках места, в котором изменяется объект $node. Но Вам, как пользователю, порекомендую последовательно отключать модули, пока не исчезнет проблема - так Вы сможете определить проблемный модуль, и, либо выключить его, либо запостить сюда более конкретный вопрос, типа "почему этот модуль ведет себя подобным образом".

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

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

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя Shedko Shedko 8 января 2007 в 3:52

Может в теме прописан вызов вывода этой навигации два раза, проверить можно отключив вывод стандартной навигации, чтобы убрать стандартную навигацию в template.php надо вставить код
/* empty - to remove navigation in first post */
function ИМЯ_ТЕМЫ_forum_topic_navigation($node) {
$output = '';
return $output;
}