Comment puis-je ajouter des valeurs par défaut à une table de base de données à l'aide hook_install ()?

drupal.stackexchange https://drupal.stackexchange.com/questions/9462

  •  16-10-2019
  •  | 
  •  

Question

Je suis en train de créer un module personnalisé avec son propre schéma de quelques tables. Ces tables doivent avoir des valeurs dans les préremplis pour le module de travail (emplacements par défaut, sélectionnez les options, etc.).

Quelle est la meilleure façon d'insérer les pratiques des valeurs par défaut dans ces tables pendant hook_install?

Depuis drupal_write_record n'est pas disponible, je peux utiliser db_query, mais je veux juste vous assurer que je ne suis pas enfreindre les règles cardinales en le faisant.

Était-ce utile?

La solution

La meilleure façon est de le faire à l'intérieur hook_enable () ; au moment où le crochet est invoqué, le module est déjà installé, et le schéma de la base de données est disponible pour Drupal, et drupal_write_record(). Comme le crochet est appelé en tout temps un module est activé, et pas seulement lorsque le module est installé, la mise en œuvre du crochet doit vérifier si elle n'a pas ajouté les lignes de base de données déjà (contenant une valeur booléenne par exemple, il doit utiliser une variable Drupal) .

Comme exemple de module utilisant hook_enable() dans un but similaire, vous pouvez vérifier forum_enable () ou php_enable () (qui ajoute le "format d'entrée du code PHP").

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))));
  }
}

Comme le montre de ces implémentations crochet, le code pourrait nécessairement être exécuté en tout temps le crochet est exécuté; il pourrait aussi être les besoins de code à juste exécuté une fois, comme dans le cas des valeurs par défaut ajoutées à la base de données ne peuvent pas être modifiés par l'utilisateur, qui ne dispose pas d'une interface utilisateur pour modifier / supprimer ces valeurs.

Autres conseils

Je partirais avec db_query / db_insert (D6 / D7) dans hook_install ().

Il est pas considéré comme une mauvaise pratique (et personne ne jamais vous oblige à utiliser drupal_write_record()).

Il est pas rare pour les personnes à désactiver et réactiver les modules, et dans ce cas, votre code hook_enable() tireraient à chaque fois. qui n'est pas agréable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top