Hilfe zu Fehlermeldung
am 11.08.2011 - 23:13 Uhr in
Hallo zusammen,
ich brauche dringend Rat zu einer Fehlermeldung :(
Ich bekomme auf meiner Drupal Startseite seit heute (Änderungen, die zu diesem Fehler führen könnten, habe ich schon vor ein paar Tagen durchgeführt) folgende Fehlermeldung angezeigt:
- Notice: Undefined property: stdClass::$field_serie in eval() (Zeile 3 von /www/htdocs/w00d91dc/drupal/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(49) : eval()'d code).
Ich habe mir eine View (vw_1) mit contextual filter erstellt, die mir den Wert des Feldes "field_serie" abfragt, und alle anderen Inhalte des Typs "Blogeintrag" mit dem selben Wert auflistet.
Der Code dafür:
<?php
if (arg(0) == 'node' && is_numeric(arg(1)))
{ $node = node_load(arg(1));
$result= $node->field_serie['und'][0]['value'];
return $result;
}
?>
Das ist auch die einzigste Stelle, wo field_serie als Variable vorkommt.
Ich habe mir weiterhin eine .tpl.php Datei gebaut, die mir den Inhalt dieser View in Blogeinträgen zwischen derm Inhalt und dem Kommentarfeld anzeigt.
Eine weitere View (vw_2) listet mir alle Blogeinträge auf und wird über einen php Aufruf auf der Startseite dargestellt.
Soweit funktioniert das auch alles problemlos (nach mehreren Abenden rumprobieren :) ) aber seit ich vorhin einen weiteren Blogeintrag veröffentlicht habe, bei dem das Feld field_serie noch nicht belegt war, bekomme ich auf der Startseite diese Fehlermeldung.
Ach ja, bei drei gelisteten Inhalten auf der Startseite wird die Fehlermeldung drei mal angezeigt, bei vier Einträgen vier mal usw...
Kann mir irgendwer von euch nen Denkanstoß geben, warum auf einmal eine Fehlermeldung kommt, wo könnte ich suchen?
Vielen Dank schonmal im Vorraus
lg Alex
edit:
Der Fehler scheint irgendwie im Aufruf der View vw_2 auf der Startseite zu liegen...
Wenn ich in der Konfiguration die Startseite direkt auf den Pfad der View vw_2 setze, bekomme ich alle Einträge angezeigt, aber die Fehlermeldung ist weg.
Ich rufe die View auf der Startseite mit folgendem Code auf:
<?php
$view = views_get_view('vw_2');
print $view->execute_display('default');
?>
- Anmelden oder Registrieren um Kommentare zu schreiben
hi alexich will nicht
am 13.08.2011 - 13:20 Uhr
hi alex
ich will nicht klugdingsen
aber ein
Notice
ist keine fehlermeldung in php,
keine von drupal,
sondern 'nur' ein hinweis
das eben die besagte variable eine
Undefined property
also eine undefinierter wertebereich ist.
$node->field_serie['und'][0]['value'];
das ['und'] zeigt schon das das hier nicht richtig gesetzt
wurde, ist eine verkürzung von 'undefined'..
du kannst in deinem skript
folgendes machen:
if(isset($result= $node->field_serie['und'][0]['value']) and !empty($result= $node->field_serie['und'][0]['value'];)){
$result= $node->field_serie['und'][0]['value'];
}else{
$result= '';
}
oder verkürzt ohne default zuweisung
$result= @$node->field_serie['und'][0]['value'];
oder der field_serie in der feld verwaltung
einen default wert
oder du stellst die ausgabe der notice ab
zb in der index.php
error_reportings(E_ALL ^ E_NOTICE)
das besagt, das dir weiterhin alle
fehlermeldungen (ERROR, WARNING) angezeigt werden
aber diese Hinweise (NOTICE) eben nicht
Im produktiv betrieb sollten die aber eh grundsätzlich ausgeschaltet sein
schönen gruss
stf
Hallo stf, vielen Dank für
am 14.08.2011 - 09:29 Uhr
Hallo stf,
vielen Dank für deine ausführliche Antwort.
Wenn ich das also richtig verstanden habe, dann ist die Warnung keine schwerwiegende Sache, sondern normal, da meine View in allen Nodes vom Typ Blogeintrag nach einem Wert für dieses Feld sucht.
Hat das Feld keinen Inhalt, weil der Node nicht zu einer Artikelserie gehört gibt es dann die Warnung.
D.h. für mich, die sinnvollsteVariante wäre:
$result= @$node->field_serie['und'][0]['value'];
weil das "@" die Warnung unterdrückt, wenn das Feld keinen Wert hat. (sagt zumindest google)
Warum sieht man an dem ['und'] denn, dass das Feld nicht richtig gesetzt ist?
Das Feld wurde ja ganz normal im Inhaltstyp als ganze Zahl, Textfeld, 1 Wert erzeugt.
var_dump gibt im Node dann folgendes aus
["field_serie"]=> array(1) { ["und"]=> array(1) { [0]=> array(1) { ["value"]=> string(1) "1" } } }
Wie müsste man denn ein Feld anlegen, welches einfach nur einen Wert speichern soll?
was dann zum Beispiel so aussieht:
["field_path"]=> array(0) { }
Vielen Dank schonmal und liebe Grüße,
Alex
moin alexAlex183
am 15.08.2011 - 09:26 Uhr
moin alex
Wenn ich das also richtig verstanden habe, dann ist die Warnung keine schwerwiegende Sache,
genau. es sollten aber immer alle variablen vorab deklariert sein
bevor sie verarbeitet werden.
ausserdem helfen die NOTICE beim debuggen, machen daher also schon sinn.
sie verursachen aber keinen skript abruch.
D.h. für mich, die sinnvollsteVariante wäre:
$result= @$node->field_serie['und'][0]['value'];
weil das "@" die Warnung unterdrückt, wenn das Feld keinen Wert hat. (sagt zumindest google)
yep, besser wie gedagt wäre sie zu deklarieren
if(!isset($node->field_serie['und']) or empty($node->field_serie['und']) )
muss aber nicht zwingend s.o.
Warum sieht man an dem ['und'] denn, dass das Feld nicht richtig gesetzt ist?
ich vermute das weil da ein 'und' im schlüssel des arrays ist
@$node->field_serie['und']
das deutet auf eine fehlerhafte deklarierung des array hin
weil da statt 0 eben 'undefined' (abgekürzt und) verwendet wurde..
und zwar bevor dann 'später' der eigendliche inhalt zugewiesen wurde.
ich kann mich da auch irren, aber dieses 'und' macht für mich garkeinen sinn sonst..
Wie müsste man denn ein Feld anlegen, welches einfach nur einen Wert speichern soll?
ich hab noch nich so ganz verstanden wo dieses 'field_serie'
angelget wurde. ist das ein cck feld das du erstellt hast?
grüße zurück
stef
Na hallo stef, ja, ist ein
am 15.08.2011 - 19:19 Uhr
Na hallo stef,
ja, ist ein cck field (allerdings drupal 7 core modul), das im Inhaltstyp Blogeintrag angelegt wurde...ist angelegt als ganze Zahl, Textfeld, ohne Standardwerte, da ich ja darüber die zusammengehörigen Artikel finden will.
Viele Grüße,
Alex
hey alex Zitat: ohne
am 15.08.2011 - 19:34 Uhr
hey alex
ohne Standardwerte
was passiert wenn du ihm einen standartwert zuweist
0 zb..
gruss
stef
gibt in Einträgen, die einen
am 15.08.2011 - 20:24 Uhr
gibt in Einträgen, die einen eigenen Wert haben, also den Standard überschreiben jetzt die Warnung
Notice: Undefined index: und in eval() (Zeile 3 von /www/htdocs/w00d91dc/drupal/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(49) : eval()'d code).
aus
In Einträgen, die den Standardwert haben, gibt es keine Warnung...
var_dump zeigt das Feld aber nach wie vor noch als
["field_serie"]=> array(1) { ["und"]=> array(1) { [0]=> array(1) { ["value"]=> string(1) "1" } } }
an :(
Edit:
Sehr seltsam...habe grade nochmal nen Inhaltstyp angelegt, Testfeld dazu....alles schön...var_dump() zeigt mir Field_test-->Array(0)
Sobald ich beim Bearbeiten des Inhalts einen Wert in das Feld eintrage und speichere macht er mir
["field_test"]=> array(1) { ["und"]=> array(1) { [0]=> array(1) { ["value"]=> string(1) "1" } } }
draus...hmmm
Edit2:
Also das ['und'] kommt aus der Datenbank...Das Feld schein in etwa so angelegt zus ein.
field_serie[language] (=und)[delta] (=0 da nur ein Wert pro Feld zulässig)[value] (=1 bei meiner Artikelserie), also damit kann die Warnung nichts zu tun haben...
hmm..wird immer undurchsichtiger grade :(