Frage

Ich erstelle ein benutzerdefiniertes Modul mit einem eigenen Schema mit einigen Tischen. Diese Tabellen müssen einige Werte vorgepopuliert haben, damit das Modul funktioniert (Standardorte, Optionen auswählen usw.).

Wie können Sie die Best Practices während des Hook_installs in diese Tabellen einfügen?

Da Drupal_Write_Record nicht verfügbar ist, kann ich db_query verwenden, aber ich möchte nur sicherstellen, dass ich damit keine Kardinalregeln breche.

War es hilfreich?

Lösung

Der bessere Weg ist, es im Inneren zu tun Hook_enable (); Zum Zeitpunkt des Aufrufens des Hakens ist das Modul bereits installiert und das Schema seiner Datenbank ist Drupal und zu verfügbar drupal_write_record(). Da der Haken alle Male aufgerufen wird, ist ein Modul aktiviert, und nicht nur, wenn das Modul installiert ist, sollte die Hook -Implementierung prüfen, ob es diese Datenbankzeilen nicht hinzugefügt hat (z. B. sollte er eine Drupal -Variable verwenden, die einen booleschen Wert enthält). .

Als Beispiel für ein Modul, das verwendet hook_enable() Für einen ähnlichen Zweck können Sie überprüfen forum_enable (), oder php_enable () (Das fügt das Eingabeformat "PHP -Code" hinzu).

function php_enable() {
  $format_exists = (bool) db_query_range('SELECT 1 FROM {filter_format} WHERE name = :name', 0, 1, array(':name' => 'PHP code'))->fetchField();
  // Add a PHP code text format, if it does not exist. Do this only for the
  // first install (or if the format has been manually deleted) as there is no
  // reliable method to identify the format in an uninstall hook or in
  // subsequent clean installs.
  if (!$format_exists) {
    $php_format = array(
      'format' => 'php_code', 
      'name' => 'PHP code',
      // 'Plain text' format is installed with a weight of 10 by default. Use a
      // higher weight here to ensure that this format will not be the default
      // format for anyone. 
      'weight' => 11, 
      'filters' => array(
        // Enable the PHP evaluator filter.
        'php_code' => array(
          'weight' => 0, 
          'status' => 1,
        ),
      ),
    );
    $php_format = (object) $php_format;
    filter_format_save($php_format);

    drupal_set_message(t('A <a href="@php-code">PHP code</a> text format has been created.', array('@php-code' => url('admin/config/content/formats/' . $php_format->format))));
  }
}

Wie aus diesen Hook -Implementierungen gezeigt, muss der Code unbedingt alle Male ausgeführt werden, die der Haken ausgeführt wird. Es könnte sich auch um den Code handeln, den gerade einmal ausgeführt werden muss, da in dem Fall die zur Datenbank hinzugefügten Standardwerte nicht vom Benutzer geändert werden können, der keine Benutzeroberfläche hat, um diese Werte zu ändern/zu löschen.

Andere Tipps

Ich würde mit gehen db_query / db_insert (D6 / d7) in Hook_install ().

Es gilt nicht als schlechte Praxis (und niemand zwingt Sie jemals, sie zu verwenden drupal_write_record()).

Es ist nicht ungewöhnlich, dass Menschen Module deaktivieren und wiedererpflichten, und in diesem Fall Ihr Code in hook_enable() würde jedes Mal feuern. Was ist nicht schön.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit drupal.stackexchange
scroll top