Entwicklungsabteilung

Drupal-Funktionen

Bild von tobiasb

Drupal_write_record

Bild von tobiasb

Mit dieser schicken Funktion kann man sehr elegant Daten in seiner Datenbank abspeichern ohne den SQL-Code dafür schreiben zu müssen.
Unterstützte Datenbank-Operationen sind INSERT und UPDATE.

Die Datenbank-Tabelle muss ein Primary Key aufweisen, damit man diese Funktion nutzen kann.

Die Schlüssel oder Eigenschaften des Objects bilden dabei immer den Spaltennamen.

Parameter: 

$table Der Name der Tabelle, die muss in der Schema-Api vorhanden sein.

$object Das Object was geschrieben werden soll. Das Object ist eine Referenz, die Standardwerte werden wie in der Schema-API entprechend gefüllt, ebenfalls die ID bei Serial Typ(en). Es kann sowohl ein Array als auch ein Object übergeben werden.

$update Wenn dies ein UPDATE ist, müssen hier die Namen der Primary Keys angegeben werden. Ob der Datensatz bereits in der Datenbank vorhanden ist, muss selbst vorher überpüft werden. Wenn es nur 1 Schlüssel gibt, muss nur ein einfach String übergeben werden.

Rückgabe: 
Bei einem erfolglosen schreiben des Datensatz, wird FALSE zurückgegeben. Ansonsten SAVED_NEW oder SAVED_UPDATED, abhängig davon, welche Operation durchgeführt wird. Die $opject Parameter enthaltene Werte für alle Serial-Felder, welche durch $table definiert sind. Zum Beispiel, $object->nid wird nach dem einfügen einer Node zur Verfügung stehen.
Code der Funktion: 
  1. <?php
  2. function drupal_write_record($table, &$object, $update = array()) {
  3.   // Standardize $update to an array.
  4.   if (is_string($update)) {
  5.     $update = array($update);
  6.   }
  7.  
  8.   $schema = drupal_get_schema($table);
  9.   if (empty($schema)) {
  10.     return FALSE;
  11.   }
  12.  
  13.   // Convert to an object if needed.
  14.   if (is_array($object)) {
  15.     $object = (object) $object;
  16.     $array = TRUE;
  17.   }
  18.   else {
  19.     $array = FALSE;
  20.   }
  21.  
  22.   $fields = $defs = $values = $serials = $placeholders = array();
  23.  
  24.   // Go through our schema, build SQL, and when inserting, fill in defaults for
  25.   // fields that are not set.
  26.   foreach ($schema['fields'] as $field => $info) {
  27.     // Special case -- skip serial types if we are updating.
  28.     if ($info['type'] == 'serial' && count($update)) {
  29.       continue;
  30.     }
  31.  
  32.     // For inserts, populate defaults from Schema if not already provided
  33.     if (!isset($object->$field) && !count($update) && isset($info['default'])) {
  34.       $object->$field = $info['default'];
  35.     }
  36.  
  37.     // Track serial fields so we can helpfully populate them after the query.
  38.     if ($info['type'] == 'serial') {
  39.       $serials[] = $field;
  40.       // Ignore values for serials when inserting data. Unsupported.
  41.       unset($object->$field);
  42.     }
  43.  
  44.     // Build arrays for the fields, placeholders, and values in our query.
  45.     if (isset($object->$field)) {
  46.       $fields[] = $field;
  47.       $placeholders[] = db_type_placeholder($info['type']);
  48.  
  49.       if (empty($info['serialize'])) {
  50.         $values[] = $object->$field;
  51.       }
  52.       else {
  53.         $values[] = serialize($object->$field);
  54.       }
  55.     }
  56.   }
  57.  
  58.   // Build the SQL.
  59.   $query = '';
  60.   if (!count($update)) {
  61.     $query = "INSERT INTO {". $table ."} (". implode(', ', $fields) .') VALUES ('. implode(', ', $placeholders) .')';
  62.     $return = SAVED_NEW;
  63.   }
  64.   else {
  65.     $query = '';
  66.     foreach ($fields as $id => $field) {
  67.       if ($query) {
  68.         $query .= ', ';
  69.       }
  70.       $query .= $field .' = '. $placeholders[$id];
  71.     }
  72.  
  73.     foreach ($update as $key){
  74.       $conditions[] = "$key = ". db_type_placeholder($schema['fields'][$key]['type']);
  75.       $values[] = $object->$key;
  76.     }
  77.  
  78.     $query = "UPDATE {". $table ."} SET $query WHERE ". implode(' AND ', $conditions);
  79.     $return = SAVED_UPDATED;
  80.   }
  81.  
  82.   // Execute the SQL.
  83.   if (db_query($query, $values)) {
  84.     if ($serials) {
  85.       // Get last insert ids and fill them in.
  86.       foreach ($serials as $field) {
  87.         $object->$field = db_last_insert_id($table, $field);
  88.       }
  89.     }
  90.   }
  91.   else {
  92.     $return = FALSE;
  93.   }
  94.  
  95.   // If we began with an array, convert back so we don't surprise the caller.
  96.   if ($array) {
  97.     $object = (array) $object;
  98.   }
  99.  
  100.   return $return;
  101. }
  102. ?>

Konvertierung von Drupal 6.x Module auf 7.x - Teil 2

Bild von tobiasb

Überblick der Drupal API Änderung von 6.x nach 7.x - Teil 2
Übersetzung von http://drupal.org/node/224333
Liste wird erweitert, sobald es neue Änderungen gibt und Zeit/Lust vorhanden ist.

Änderungsprotokoll für Drupal 7

Bild von tobiasb
Achtung alles vorläufig und nicht endgültig:

Konvertierung von Drupal 6.x Themes auf 7.x

Bild von tobiasb

Überblick der Drupal Themes Änderungen in 7.x

Übersetzung von http://drupal.org/node/254940
Liste wird erweitert, sobald es neue Änderung gibt und ich Zeit/Lust habe :D.

Konvertierung von Drupal 6.x Module auf 7.x

Bild von tobiasb

Überblick der Drupal API Änderung von 6.x nach 7.x
Übersetzung von http://drupal.org/node/224333
Liste wird erweitert, sobald es neue Änderungen gibt.

Inhalt abgleichen