[gelöst] arguments (Views) mit php steuern und Kritik am O'Reilly- Buch wegen der fehlerhaften Wiedergabe von PHP- Codes
am 04.01.2010 - 00:05 Uhr in
Ich möchte Argumente in den Views mit php steuern.
In einem View als Block sollen die Bands des gleichen Genres ausgegeben werden, wie die Band im Node Content in der Mitte.
Code zum Argument Genre:
$nid = arg(1);
if ($this -> view -> current_display == 'block'
&& arg(0) == 'node' && is_numeric($nid))
{ $context = node_load($nid);
if ($context -> type == 'bandprofil')
{
return $context -> field_genre[0]['nid'];
}
}
return 'all';
Der Views tut zeigt nach wie vor alle Bands an, egal welchen Genres, es tut sich also nichts, ob mit oder ohne Code.
Dieses Beispiel stammt aus dem recht guten Buch von O'Reilly; "Praxiswissen Drupal6".
Ich gehe davon aus, dass ich die Einträge laut Buch alle richtig gemacht habe, auch für diesen View: "Bands gleichen Genres"
Ich habe natürlich das PHP Modul aktiviert.
Wer kann mir helfen?
Hartmut
- Anmelden oder Registrieren um Kommentare zu schreiben


Mit der Funktion var_export
am 04.01.2010 - 02:11 Uhr
Mit der Funktion
var_exportkannst anzeigen lassen, welchen Wert eine Variable hat und mitdrupal_set_messagekannst du eine Statusmeldung in Drupal anzeigen.Das kannst du dazu verwenden, um deinen Code mit Debugging-Informationen anzureichen:
<?php
$nid = arg(1);
drupal_set_message('DBG $nid: ' . var_export($nid, true));
drupal_set_message('DBG current_display: ' . var_export($this->view->current_display, true));
drupal_set_message('DBG arg(0): ' . var_export(arg(0), true));
drupal_set_message('DBG is_numeric($nid): ' . var_export(is_numeric($nid), true));
if ($this -> view -> current_display == 'block'
&& arg(0) == 'node' && is_numeric($nid))
{
$context = node_load($nid);
drupal_set_message('DBG $context->type: ' . var_export($context->type, true));
if ($context -> type == 'bandprofil')
{
drupal_set_message('DBG $context->field_genre[0]["nid"]: ' . var_export($context->field_genre[0]['nid'], true));
return $context -> field_genre[0]['nid'];
}
}
drupal_set_message('DBG: return "all" wird ausgeführt.');
return 'all';
?>
Wenn du nun ein Bandprofil besuchst, dann solltest du recht schnell erkennen ab wann dein Code und deine Vorstellungen getrennte Wege gehen.
BTW: ich glaube,

$this->view->current_display == 'block_1'.--
--

Danke und: Wohin damit?
am 04.01.2010 - 17:27 Uhr
Wird dein Code in eine neue Seite als PHP-Code eingefügt?
Gruß Hartmut
Der Code ersetzt deinen
am 04.01.2010 - 19:48 Uhr
Der Code ersetzt deinen bestehenden Code.
--

--

Die Debug- Anzeige klappt
am 05.01.2010 - 01:39 Uhr
Ein interessante Möglichkeit zu debuggen. Danke für die Arbeit. Und ich weis jetzt wie es geht.
Woher kann man diese Info bekommen? Gibt es ein Buch?
Z.B. Drupal für Entwickler?
Ich werde jetzt anhand der Ausgaben prüfen, welche Fehler auftreten. Zumindest geht aber der PHP- Code überhaupt.
In dem Views/ Arguments habe ich jedoch die php-Codezeichen
<?php....
?>
Gruß Hartmut
Deine Vermutung war richtig!
am 05.01.2010 - 01:37 Uhr
Du hast richtig gelegen mit der Benennung "Block_1" statt lediglich "Block".
Die erste if- Bedingung war dadurch immer false und wurde nie durchlaufen, damit auch nicht die darunterstehende Debug- Ausgabe.
Nach der Veränderung lief es richtig.
Damit hast du einen wichtigen Bug in dem O'Reilly - Buch aufgedeckt.
Und ich hab den Einstieg in das PHP - Debugging geschafft.
Nochmals Danke für die schnelle Hilfe.