Własny moduł - nie działa .install
Naglfar, śr., 2008-01-16 22:45
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_message() zawartej w pierwszej linijce funkcji annotate_install()).
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');
}
}

Błąd został opisany w
archetwist, śr., 2008-01-16 23:59 moderatorBłąd został opisany w erracie do książki. Powinno być
CREATE TABLE {annotations}zamiastCREATE 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ę
Naglfar, czw., 2008-01-17 12:28Dzię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.'));.tabela
archetwist, czw., 2008-01-17 14:01 moderatorCzy tabela istniała w chwili wykonywania skryptu?
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
Naglfar, czw., 2008-01-17 18:07Tabela nie istniała i dalej nie istnieje.
Ok, następnym razem będę wiedział. ;]