Własny moduł - nie działa .install

Witam!

Napisałem przykładowy moduł opisany w 2 rozdziale książki „Pro Drupal Development”, nazywa się „annotate.” Wszystko jest cacy, poza tym, że nie wykonuje się kod podany w pliku annotate.install (tworzenie tabeli w bazie danych).

Plik jest w odpowiednim katalogu (razem z annotate.module), jest odpowiednio nazwany, funkcja w środku ma nazwę annotate_install(), a mimo to funkcja nie wykonuje się przy włączaniu modułu (powinna pokazać wiadomość z funkcji drupal_set_mes­sage() zawartej w pierwszej linijce funkcji annotate_insta­ll()).

Dlaczego to nie działa?

Zawartość mojego pliku annotate.install:

<?php
  // $Id$
  function annotate_install() {
    drupal_set_message(t('Beginning installation of annotate module.'));
    switch ($GLOBALS['db_type']) {
      case 'mysql':
      case 'mysqli':
        db_query("CREATE TABLE annotations (
          uid int NOT NULL default 0,
          nid int NOT NULL default 0,
          note longtext NOT NULL,
          timestamp int NOT NULL default 0,
          PRIMARY KEY (uid, nid)
          ) /*!40100 DEFAULT CHARACTER SET utf8 */;"
        );
        $success = TRUE;
        break;
      case 'pgsql':
        db_query("CREATE TABLE annotations (
          uid int NOT NULL DEFAULT 0,
          nid int NOT NULL DEFAULT 0,
          note text NOT NULL,
          timestamp int NOT NULL DEFAULT 0,
          PRIMARY KEY (uid, nid)
          );"
        );
        $success = TRUE;
        break;
      default:
        drupal_set_message(t('Unsupported database.'));
    }
  if ($success) {
    drupal_set_message(t('The module installed tables successfully.'));
  }
  else {
    drupal_set_message(t('The installation of the annotate module
      was unsuccessful.'),'error');
  }
}

Sposób wyświetlania odpowiedzi

Wybierz preferowany sposób wyświetlania odpowiedzi i kliknij "Zachowaj ustawienia", by wprowadzić zmiany.
Portret użytkownika archetwist

Błąd został opisany w

moderator

Błąd został opisany w erracie do książki. Powinno być CREATE TABLE {annotations} zamiast CREATE TABLE annotations. Poza tym tabela nie może istnieć w chwili wykonywania funkcji.

Przeniosłem Twój kod z odpowiedzi do samego wątku. Nie ma potrzeby dodawać odpowiedzi, jeśli można skorzystać z możliwości edycji wpisu.

design www drupal

Dzięki za informację

Dzięki za informację o erracie. Pierwszego postu w temacie nie dało się edytować.

Poprawiłem nawiasy, ale funkcja instalacyjna dalej się nie odpala. Mimo ewentualnych błędów, powinienem zobaczyć efekt pierwszej linijki funkcji, czyli drupal_set_message(t('Beginning installation of annotate module.'));.

Portret użytkownika archetwist

tabela

moderator

Czy tabela annotations istniała w chwili wykonywania skryptu?

Pierwszego postu w temacie nie dało się edytować.

Właśnie sprawdziłem z konta użytkownika i jest to możliwe, choć pewnie nie już po dodaniu odpowiedzi.

design www drupal

Tabela nie istniała

Tabela nie istniała i dalej nie istnieje.

Właśnie sprawdziłem z konta użytkownika i jest to możliwe, choć pewnie nie już po dodaniu odpowiedzi.

Ok, następnym razem będę wiedział. ;]