SQL in .install schreiben
Eingetragen von Apfel007 (143)
am 04.09.2008 - 10:20 Uhr in
am 04.09.2008 - 10:20 Uhr in
Hallo zusammen,
bin gerade dabei mein erstes Modul zu schreiben und zu verstehen:-)
Kann mir jemand sagen, wie ich diesen Code in die .install einsetze.. - muß ich in der .modul die .install aufrufen, oder geschieht das automatisch?
<?php
db_query("CREATE TABLE privatcontent (
nid int(10) unsigned NOT NULL default '0' PRIMARY KEY,
private int,
KEY `node_privatcontent _nid` (nid)
)
?>
Meine .install:
<?php
function privatcontent_schema() {
$schema['privatcontent'] = array(
.....???
???? 'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
// specification for mytable1
);
return $schema;
}
function privatcontent_install() {
// Create my tables.
drupal_install_schema('privatcontent');
}
function mymodule_uninstall() {
// Drop my tables.
drupal_uninstall_schema('privatcontent');
}
?>
Gruß Apfel007
- Anmelden oder Registrieren um Kommentare zu schreiben
Modulentwicklung
am 04.09.2008 - 12:37 Uhr
Moin!
Auf drupal.org findest Du ein komplettes Tutorial zur Modulentwicklung (drupal 6.x). Allerdings ist dort nicht näher beschrieben, wie .install-Dateien erstellt werden, dafür gibt es jedoch eine Seite im Tutorial für drupal 5.x.
Der Aufruf der Installations-Routinen erfolgt übrigens automatisch beim Installieren (bzw. beim Update) des Moduls.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Error
am 05.09.2008 - 10:00 Uhr
Hallo zusammen,
wenn ich die .install so schreibe bekommen ich diesen Fehler. Wer kann mir einen Tip geben?
Gruß Apfel007
<?php
<?php
// $Id: privatcontent.install,v 1.0 2008/09/04 01:27:07 Rav Exp $
/**
* Implementation of hook_schema().
*/
function privatcontent_schema() {
$schema['privatcontent'] = array(
'fields' => array(
'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'default' => '0',
'not null' => TRUE,
),
'private' => array(
'type' => 'int',
),
'indexes' => array(
'privatcontent_nid' => array('nid'),
),
),
'primary key' => array('nid'),
);
return $schema;
}
function privatcontent_install() {
// Create my tables.
drupal_install_schema('privatcontent');
}
function privatcontent_uninstall() {
// Drop my tables.
drupal_uninstall_schema('privatcontent');
}
?>
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT NULL, PRIMARY KEY (nid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */' at line 4 query: CREATE TABLE privatcontent ( `nid` INT unsigned NOT NULL DEFAULT '0', `private` INT DEFAULT NULL, `indexes` DEFAULT NULL, PRIMARY KEY (nid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ in F:\xampp\htdocs\drupal02\includes\database.inc on line 509.
indexes
am 05.09.2008 - 10:09 Uhr
Moin!
Indexes muss aus dem "fields"-Array raus (bitte besser formatieren, dann sieht man das auch).
$schema['privatcontent'] = array(
'fields' => array(
'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'default' => '0',
'not null' => TRUE,
),
'private' => array(
'type' => 'int',
),
),
'indexes' => array(
'privatcontent_nid' => array('nid'),
),
'primary key' => array('nid'),
);
hth,
Stefan
PS: Schema API
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Tabellen anlegen
am 05.09.2008 - 11:51 Uhr
Hi Stefan,
danke für den Hinweis, aber die Tabelle wird immer noch nicht angelegt..??
dies hier sollte doch das anlegen übernehmen - oder? oder fehlt da noch etwas?
<?php
function privatcontent_install() {
drupal_install_schema('privatcontent');
}
?>
Der Tabellenname wird ja so/hier dargestellt: $schema['privatcontent'] ????
Gruß Kai
Schema
am 05.09.2008 - 12:01 Uhr
dies hier sollte doch das anlegen übernehmen...
Hm, prinzipiell schon. http://drupal.org/node/146862 kennst Du? Da ist ein Beispiel für ein Schema und
hook_install()
.Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
kenne ich
am 05.09.2008 - 12:03 Uhr
jawohl kenne ich bin danach vorgegangen..