Добрый день.
Столкнулся стакой вот проблемой:
После создания/обновления ноды на странице просмотра вылазит длииииинная повторяющаяся ошибка
«warning: Invalid argument supplied for foreach() in /home/suburb/suburb.kiev.ua/www/modules/taxonomy/taxonomy.module on line 69.»
Всё что смог нарыть гуглом вот: http://www.drupal.ru/node/19322 но ответа там так и не увидел. + никаких махинаций с отображением терминов с моей стороны не производилось.
строки эти вот:
<?php
64 // Previewing free tagging terms; we don't link them because the
65 // term-page might not exist yet.
66 else {
67 foreach ($term as $free_typed) {
68 $typed_terms = drupal_explode_tags($free_typed);
69 foreach ($typed_terms as $typed_term) {
70 $links['taxonomy_preview_term_'. $typed_term] = array(
71 'title' => $typed_term,
72 );
?>
Файл модуля, (если нужен), прикрепляю.
Если кто сталкивался, или знает в чём может быть дело, отчаянно прошу не проходить мимо... ))
Вложение | Размер |
---|---|
taxonomy.module | 47.44 КБ |
Комментарии
Если самописные модули на сайте есть то я бы в них поискал где то неправильно параметры передаются видимо
ну или вариант в issue почитать
например http://drupal.org/node/259632
читать на тему error_reporting в PHP
это не ошибка
нет. это ядреный модуль. просто в друпале да и в модулях есть говнокод с foreach где до сих пор нет проверки if(is_array($blahblah) && count($blahblah) ) перед foreach, как это делают
параноикиво всех приличных домахЭто неправильная передача параметров в foreach
и читать нужно либо в http://www.php.net/manual/en/control-structures.foreach.php и проверить не передается
например ли $node->nid вместо $node где нибудь в самописном модуле в какую то из http://api.drupal.org/api/drupal/modules--taxonomy--taxonomy.module/6 функций.
Более того я привел ссылку в которой об отсутствии проверок нужных и говорится и даже говорится как этот вопрос решить.
а лезть руками в ядро - моветон - хоть иногда и надо - но тогда патчик на drupal.org запостить стОит
Я в курсе и про то что это ядерный модуль и про проверки
Однако почему у меня подобных фич не выскакивает как правило? Что Я Делаю Не Так
еще раз для тех кто в танке. warning - не ошибка.
это предупреждение о том что код некорректен в плане работы с данными.
В приличных домах это или глушат или выводят в лог вебсервера.
гуглить error_reporting, я же сказал.
у меня вот выскакивает когда мне нужно, например, когда я свой код пишу.
Самописных модулей нет.
Правильно ли я понял что это не критично, пишет себе... и пусть пишет. В настройках отключил показ и ладно... Или всё же стоит сломать свой мозг (и разбить монитор клавиатурой), но проверить и исправить каждый модуль, сделать чтоб не писало предупреждений своих...
P.S. Большое спасибо за ответы!
А ещё можно делать:
foreach ((array)$term as $free_typed) {
и класть на весь мир
count() надо проверить. иначе предупреждение вылезет. и таки толсто. тольсто бля!!!1
патамушо я згнаю что виктар
предохраняется ипроверяет кодгде я сказал что это ошибка ???
+1
почему неправильная?
компилятор c/c++ иной раз стока предупреждений генерит. и ничо.
выдержка из документации http://php.net/manual/ru/control-structures.foreach.php
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
то есть, то что передается не соответствует тому, что написано в документации
array_expression - может там пустой массив и компилятор, да, в этом случае Warning плюется.
насколько я понимаю у ТС был вопрос - почему вылазит подобное сообщение и что делать? - ответ - потому что фактически передаваемые в foreach параметры не соответствуют тому что он "ожидает" - не пустой массив.
Окей поправлюсь - некорректная (т.е. не соответствующая правилу - переменная должна быть массивом и он должен быть не пуст) передача параметров в foreach, если так будет понятнее
а отключение вывода warning имхо не способ в данном случае, но каждый решает для себя сам.
там в ядре дофига такого. а о простых модулях я вообще молчу.
не отключать. в логи писать.
если
тогда да, согласен
только ТС понял не правильно
не ладно - дебажить надо
o.k.
Мне нужно найти какой модуль в foreach посылает неправильные данные.....
Прошу прощения за дилетантство, но может кто подскажет какую нить литературку (на всесоюзном если можно), может сайты/статейки наводящие... Реально только видео-уроки по PHP проглянул разок... Сейчас просто не представляю даже куда кидаться, на какой модуль...
Я собственно кинул статью по проблеме
http://drupal.org/node/259632
есть такой способ отладки - отладочная печать, в данном случае самое то
и раскручивать надо от модуля таксономии
сомневаюсь что Вам удастся отловить в чем проблема самостоятельно, хотя дерзайте.
Только копии файлов делайте перед тем как их менять чтобы было куда откатиться
Всем огромное спасибо!
Буду пилить......
Ну.... А вот это помогло....
то что это вариант никто не спорит, но нужно еще и количество элементов проверять в массиве как уже писал Санчес.
И еще - "решено" у топика поставь
Знал бы как... чесслово посчитал бы...
Пока и этим радуюсь. ))
http://php.net/manual/ru/function.count.php
Эта бага появилась при использовании модуля BBB,
пофиксил исправлением core модуля.
вот кусок исправленного taxonomy.module, начиная с 69 строки
<?php elseif (is_array($term)) {
foreach ($term as $free_typed) {
$typed_terms = drupal_explode_tags($free_typed);
foreach ($typed_terms as $typed_term) {
$links['taxonomy_preview_term_'. $typed_term] = array(
'title' => $typed_term,
);
}
}
}
else {
return array();
}
?>
Спасибо Tempo помогло мой сайт где была похожая проблема