Adattábla készítése nem megy a schema apival

kolldani képe

Sziasztok!

Abban szeretném a segítségeteket kérni, hogy próbálok a schema api által létrehozni a modulomnak egy adattáblát a MySQL db-ba, hogy ebbe írhasson és ebből olvashasson a modul adatokat. És sehogy sem hozza létre a táblát.

Van egy .install fájl, ebben implementáltam a hook_schema() és hook_install() függvényeket. A hook_schema() visszaadja a $schema-t, a hook_install() pedig meghívja a drupal_install_schema() függvényt, ennek átadom a modul nevét, így:
drupal_install_schema('modul_neve');

Megpróbáltam megnézni a visszatérési értéket, hát ha okosabb leszek, de nem segített, mert a modul be/kikapcsolásakor nem írt ki semmit:
$result = drupal_install_schema('modul_neve');
drupal_set_message(print_r($result));

Természetesen a .install fájl neve megegyezik a .module fájléval. Kipróbáltam záró php taggel és anélkül is (ez lenne a normális ugyebár) de sehogy sem hozza létre a táblát. Gondolom ezt abba az adatbázisba kéne rakja, ahol a többi modul táblái is vannak? Bár új adatbázist sem csinált :-). Néztem a jelentésnél a naplót: semmi. Minden telepítési próbálkozás után állandóan nyomtam neki az update.php-t, meg a gyorstárak törlését is, persze a modul kikapcsolása után.

Ha valaki bele nézne itt az .install fájl kódja:

/**
 * @file
 * Install file for simplified_nodereference module
 */
 
/**
 * Implementing hook_schema() to create database table storing data needed for this module
 */
function simplified_nodereference_schema() {
  $schema['simplified_nodereference_table'] = array(
    'description' => 'This table currently contains two field: first is nid of referencing node, second is nid of referenced node',
    'fields' => array(
      'referencing_node' => array(
        'description' => 'Nid of referencing node',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE),
      'referenced_node' => array(
        'description' => 'Nid of referenced node',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0)
      ),
    'primary key' => array('referencing_node')
  );
 
  return $schema;
}
 
function simplified_nodereference_install() {
  $result = drupal_install_schema('simplified_nodereference');
 drupal_set_message(print_r($result));
}

Ha valaki tud, kérem segítsen.

Üdv:

Dani

Drupal verzió: 
pp képe

install csak egyszer fut le amikor először bekapcsolod a modult. Nem kikapcsolni kell, hanem el kell távolítani is. Vagy devel modul felrak és annak van "reinstal modules"(vagy valami ilyesmi) menüpontja.

pp

0
0
kolldani képe

Szia pp!

Köszönöm szépen, már próbálom is ki, de biztos ez volt a baj, teljesen logikus, nem is értem erre miért nem gondoltam. A gyakorlati tapasztalatom kevés még szerintem, de csak megszerzem előbb-utóbb. De tényleg élet mentő volt a válaszod, mert magamtól sztem még egy hét alatt sem jöttem volna rá, legfeljebb hagytam volna az egészet, egyszerűen erre nem gondoltam.

Még egyszer nagyon szépen köszönöm neked :-)!

Dani

0
0

Dani

kolldani képe

Sziasztok! Szia pp!

Végül is sikerült a táblát létrehoznom+az egész modult elkészíteni, amit szerettem volna, csak kicsit nehéz volt a dolog.
Hiába helyeztem át a modul mappáját (Win alól nyomulok egyébként), hiába update-teltem az adatbázist (update.php), töröltem a gyorsítótárakat a teljesítmény oldalon, sehogy nem akarta még egyszer lefuttatni a hook_installt.
Végül is telepítettem a 6.16-os Drupalt (jó, nyilván nem a verzió a döntő ez esetben, csak ideírtam), de ez teljesen új telepítés volt, az adatbázisból is kitöröltem minden táblát, és így már létre is hozta az .instal fájlból a táblát.
Valószínű, a jövőben inkább a devel modult fogom használni, nem a Drupal reinstallt. De azért érdekes kérdés, hogy a evel modul, hogy veszi rá, hogy újra installálja a modult. Gondolom valamelyik adattáblában eltárolja, hogy egy adott modul installálva lett már, ha ezt innen ki tudnánk szedni, akkor úgy érezné, hogy még installálatlan a modul és megcsinálná az installt. Erről esetleg tud valaki bővebbet? Mert bizonyos esetekben azért a Drupal reinstallja még sem az igazán üdvözítő megoldás (pl. jó sok tartalom, beállítás van már).

0
0

Dani

alippai képe

Csinálj hook_uninstall-t ami törli a schemát és uninstalláld egyszerűen Drupalon keresztül. Így is lehet.
Esetleg a {system} táblából törölheted a modul bejegyzését. (6)

0
0

Lippai Ádám
young element