Drupal Entwicklerhandbuch Kapitel 2
am 03.07.2009 - 22:21 Uhr in
Hallo Drupal-Gemeinde,
ich habe das Drupal Entwicklerhandbuch von Addison-Wesely und hänge schon bei Kapitel 2...
In dem Beispiel wird ein kleines Modul entwickelt, bei dem man für konfigurierbare Inhaltstypen persönliche Kommentare abgeben kann.
Genau da habe ich ein Problem damit:
Im Admin-Formular wird aufgrund aller gefundenen Typen (node_get_types) eine Optionsliste erstellt.
Das Speichern funktioniert auch, zumindest wird in der Datenbank in der Tabelle variables ein Eintrag 'annotate_node_types' angelegt.
Allerdings mit einem sehr seltsamen Effekt, der sich auf die gesamte Funkionalität auswirkt. Wenn keine Option ausgewählt wurde, werden trotzdem alle verfügbaren Optionen gespeichert. Wurde eine oder mehrere ausgewählt, werden diese zweimal hintereinander abgelegt:
Tabelleneintrag: a:3:{s:5:"story";s:5:"story";s:8:"criteria";i:0;s:4:"page";i:0;}
Im obigen Fall wurde das Formular mit der ausgewählten Option "Artikel" gespeichert.
Wird nun der Hook 'nodeapi' für das Modul aufgerufen, wird über variable_get der Eintrag 'annotate_node_types' gelesen und mit in_array geprüft, ob die aufgerufene Node dem Inhaltstyp entspricht. Logischerweise werden alle verfügbaren Typen gefunden und damit ist keine Selektion möglich.
Wer sich den Beispielcode mal ansehen will (den habe ich so von der Webseite des Verlags), kann sich ja den Beispielcode ziehen und unter ...\Drupal_Beispielcodes\2798_Drupal_Entwicklerhandbuch_Beispielcodes\Beispielcodes\kapitel02\annotate das Modul mal ausprobieren.
Also, egal was ist, aber bei mir funktioniert es nicht. Vllt. liegt es auch an einer PHP- oder MySQL-Einstellung, keine Ahnung.
Hoffe jemand kennt diesen Effekt und möglicherweise eine Lösung, weil ich Drupal bisher Super finde und ich habe mir schon ein paar CMS angeschaut.
Vielen Dank im voraus.
Banzai
- Anmelden oder Registrieren um Kommentare zu schreiben

Der erste Eintrag ist der Schüssel, der zweite ist der Wert
am 04.07.2009 - 11:47 Uhr
Tabelleneintrag:
a:3:{s:5:"story";s:5:"story";s:8:"criteria";i:0;s:4:"page";i:0;}Wenn du folgendes eingibst:
<?php$var = 'a:3:{s:5:"story";s:5:"story";s:8:"criteria";i:0;s:4:"page";i:0;}';
$array = unserialize($var);
var_export($array);
?>
dann bekommst du folgendes Ergebnis:
<?php
array(
'story' => 'story',
'criteria' => 0,
'page' => 0,
)
?>
--

thx traxer für die
am 04.07.2009 - 22:03 Uhr
thx traxer für die Antwort.
Dies erklärt mir, wie diese Art der Array-Speicherung aufgebaut ist (Ha, wieder was gelernt!).
Eine Lösung scheint der dritte Parameter von in_array zu sein, zumindest funktioniert das Modul jetzt erwartungsgemäß:
<?php
// Vorher (Originalcode):
// Abbrechen, wenn dieser Node nicht zu den kommentierbaren
// Typen gehört.
if ( !in_array( $node->type, $types_to_annotate) ) {
break;
// Korrigiert:
// Abbrechen, wenn dieser Node nicht zu den kommentierbaren
// Typen gehört.
if ( !in_array( $node->type, $types_to_annotate, true) ) {
break;
}
?>
Vielen Dank für den Hinweis.
Banzai