[РЕШЕНО] Ошибка при создании ноды. Прошу помощи у гуру...

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

Аватар пользователя bumble bumble 18 июля 2011 в 15:03
1

Добрый день.
Столкнулся стакой вот проблемой:

После создания/обновления ноды на странице просмотра вылазит длииииинная повторяющаяся ошибка
«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.module47.44 КБ

Комментарии

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 19 июля 2011 в 1:11

"bumble" wrote:
«warning: Invalid argument supplied for foreach()

читать на тему error_reporting в PHP
это не ошибка
"niko" wrote:
Если самописные модули на сайте есть то я бы в них поискал где то неправильно параметры передаются видимо

нет. это ядреный модуль. просто в друпале да и в модулях есть говнокод с foreach где до сих пор нет проверки if(is_array($blahblah) && count($blahblah) ) перед foreach, как это делают параноики во всех приличных домах

Аватар пользователя niko niko 19 июля 2011 в 11:31

"Ильич Рамирес Санчес" wrote:
читать на тему error_reporting в PHP
это не ошибка

Это неправильная передача параметров в 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 запостить стОит

"Ильич Рамирес Санчес" wrote:
нет. это ядреный модуль. просто в друпале да и в модулях есть говнокод с foreach где до сих пор нет проверки if(is_array($blahblah) && count($blahblah) ) перед foreach, как это делают параноики во всех приличных домах

Я в курсе и про то что это ядерный модуль и про проверки
Однако почему у меня подобных фич не выскакивает как правило? Что Я Делаю Не Так

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 19 июля 2011 в 12:20

"niko" wrote:
Это неправильная передача параметров в foreach
и читать нужно либо в http://www.php.net/manual/en/control-structures.foreach.php и проверить не передается

еще раз для тех кто в танке. warning - не ошибка.
это предупреждение о том что код некорректен в плане работы с данными.

В приличных домах это или глушат или выводят в лог вебсервера.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 19 июля 2011 в 12:21

"niko" wrote:
Однако почему у меня подобных фич не выскакивает как правило? Что Я Делаю Не Так

гуглить error_reporting, я же сказал. Smile
у меня вот выскакивает когда мне нужно, например, когда я свой код пишу.

Аватар пользователя bumble bumble 19 июля 2011 в 18:25

Самописных модулей нет.

Правильно ли я понял что это не критично, пишет себе... и пусть пишет. В настройках отключил показ и ладно... Или всё же стоит сломать свой мозг (и разбить монитор клавиатурой), но проверить и исправить каждый модуль, сделать чтоб не писало предупреждений своих...

P.S. Большое спасибо за ответы!

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 19 июля 2011 в 18:34

"RxB" wrote:
А ещё можно делать:
foreach ((array)$term as $free_typed) {
и класть на весь мир

count() надо проверить. иначе предупреждение вылезет. и таки толсто. тольсто бля!!!1

патамушо я згнаю что виктар предохраняется и проверяет код

Аватар пользователя niko niko 19 июля 2011 в 20:15

"Ильич Рамирес Санчес" wrote:
еще раз для тех кто в танке. warning - не ошибка.

где я сказал что это ошибка ???

"Ильич Рамирес Санчес" wrote:
count() надо проверить.

+1

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 19 июля 2011 в 21:02

"niko" wrote:
где я сказал что это ошибка ???

"niko" wrote:
Это неправильная передача параметров в foreach

почему неправильная?
компилятор c/c++ иной раз стока предупреждений генерит. и ничо.

Аватар пользователя niko niko 19 июля 2011 в 22:41

"Ильич Рамирес Санчес" wrote:
почему неправильная?

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

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 19 июля 2011 в 22:48

"niko" wrote:
а отключение вывода warning имхо не способ в данном случае, но каждый решает для себя сам.

там в ядре дофига такого. а о простых модулях я вообще молчу.
не отключать. в логи писать.

Аватар пользователя niko niko 19 июля 2011 в 22:55

если

"Ильич Рамирес Санчес" wrote:
не отключать. в логи писать.

тогда да, согласен

только ТС понял не правильно

"bumble" wrote:
Правильно ли я понял что это не критично, пишет себе... и пусть пишет. В настройках отключил показ и ладно...

не ладно - дебажить надо Smile

Аватар пользователя bumble bumble 20 июля 2011 в 0:58

o.k.

"niko" wrote:
не ладно - дебажить надо :)

Мне нужно найти какой модуль в foreach посылает неправильные данные.....
Прошу прощения за дилетантство, но может кто подскажет какую нить литературку (на всесоюзном если можно), может сайты/статейки наводящие... Реально только видео-уроки по PHP проглянул разок... Сейчас просто не представляю даже куда кидаться, на какой модуль...

Аватар пользователя niko niko 20 июля 2011 в 11:29

Я собственно кинул статью по проблеме

http://drupal.org/node/259632

есть такой способ отладки - отладочная печать, в данном случае самое то

и раскручивать надо от модуля таксономии

"bumble" wrote:
Реально только видео-уроки по PHP проглянул разок...

сомневаюсь что Вам удастся отловить в чем проблема самостоятельно, хотя дерзайте.
Только копии файлов делайте перед тем как их менять чтобы было куда откатиться

Аватар пользователя bumble bumble 20 июля 2011 в 14:04

"RxB" wrote:

А ещё можно делать:
foreach ((array)$term as $free_typed) {
и класть на весь мир


Ну.... А вот это помогло....

"niko" wrote:

Я собственно кинул статью по проблеме

http://drupal.org/node/259632[/quote]
Тут немного о другом, тот способ я попробовал, он не подошел. А делать какие нибудь выводы из статьи, я пока ещё зелёный очень не осилю... Будем работать над собой и проблемой )))

P.S. Опять же, всем огромное спасибо за то что не бросаете аматоров новичков вроде меня!

Аватар пользователя niko niko 20 июля 2011 в 14:27

"bumble" wrote:
Ну.... А вот это помогло....

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

И еще - "решено" у топика поставь

Аватар пользователя bumble bumble 20 июля 2011 в 16:17

"niko" wrote:
...нужно еще и количество элементов проверять в массиве...

Знал бы как... чесслово посчитал бы...
Пока и этим радуюсь. ))

Аватар пользователя tempo tempo 20 октября 2011 в 16:46

Эта бага появилась при использовании модуля 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();
        }
?>