[gelöst] mymodule_schema_alter(), aber Werte nicht im node-Object
Eingetragen von Jehu (16)
am 30.12.2009 - 15:13 Uhr in
am 30.12.2009 - 15:13 Uhr in
Hallo Leute,
ich entwickle gerade mein erstes ernsthaftes Drupal-Modul. Genauer gesagt geht es um ein Modul, das die Funktionalität von Ubercart erweitert (hätte mir was leichteres aussuchen sollen...).
Folgendes definiere ich in der Datei mymodule.install Datei (unter anderem):
function mymodule_schema_alter(&$schema) {
// Add fields to existing schema.
$schema['uc_products']['fields']['new_field'] = array(
'type' => 'varchar',
'length' => '255',
'not null' => FALSE,
);
}
Außerdem wird die Tabelle 'uc_products' um das DB-Feld "new_field" erweitert.
Das Datenbankfeld "new_field" habe ich auch mit Inhalt gefüllt.
In der mymodule_nodeapi bekomme ich aber mit $node->new_field immer nur NULL, statt den in der DB stehenden Wert.
$node->sell_price jedoch liefert den korrekten Wert (den Verkaufspreis).
Was muss man außer dem hook schema_alter() noch beachten, damit das node-Object den Inhalt des Datenbankfeldes erhält?
Danke im voraus!
- Anmelden oder Registrieren um Kommentare zu schreiben
hook_nodeapi
am 30.12.2009 - 15:20 Uhr
Was muss man außer dem hook schema_alter() noch beachten, damit das node-Object den Inhalt des Datenbankfeldes erhält?
Du musst natürlich Deine Daten noch selbst an das Node-Objekt anhängen. Automatisch funktioniert das nicht.
Implementiere in Deinem Modul hook_nodeapi und füge dann bei
$op == 'load'
Deine Daten ins Objekt ein.Schau mal, wie Übercart das macht, dort müsste es auch eine
..._nodeapi
geben.hth,
Stefan
--
Sei nett zu Deinem Themer!
Danke!
am 31.12.2009 - 16:55 Uhr
Ah! So klappt's nun also:
function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'load':
$query = db_query("SELECT new_field FROM {uc_products} WHERE nid = %d AND vid = %d", $node->nid, $node->vid);
$result = db_result($query);
$node->new_field = $result;
break;
}
}
Ich hätte eigentlich gehofft, dass Drupal das Schema dazu benutzt, die entsprechenden Datenbankfelder ins node-Object zu packen und diese automatisch zur Verfügung stehen. Aber ich habe das nun verstanden - es existiert nur im node-Object, was auch explizit im Modul (in diesem Fall in uc_products) hinzugefügt wurde.
Vielen Dank für die schnelle Hilfe.