Modul-Daten in Seiten anzeigen
am 09.03.2009 - 15:30 Uhr in
<?php
function mymodul_node_info() {
return array('mymodul' => array('name' => t('MyModul'),
'module' => 'mymodul', ),);
}
function mymodul_load($node) {
if(isset($node)) {
$query = "SELECT savename, imgw, imgh FROM {mymodul} WHERE active = 1 AND nid = %n AND domain = '%s'";
return db_fetch_object(db_query($query), ($node = $node ? $node : 1), $_SERVER['HTTP_HOST'] );
}
}
function mymodul_view($node, $teaser = FALSE, $page = NULL) {
$node = node_prepare($node, $teaser);
$node->content['mymodul'] = array(
'#value' => theme('mymodul', $node),
'#weight' => 1, );
return $node;
}
function mymodul_theme() {
return array(
'mymodul' => array('arguments' => array('node'), ),
);
}
function theme_mymodul($node) {
$output = '<div class="teaerimage">';
$output .= 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH';
$output .= '</div>';
return $output;
}
?>Die Frage zu obigem Beispiel ist nun, wie bekommt man die Daten aus der DB in eine Page?
Die/Das Beispiel, wie man ein Modul entwickeln kann habe ich x-mal durchgelesen und auch mehrfach übernommen. Jedoch wurde nicht ein einziges mal eine Ausgabe der DB-Daten dargestellt oder in die Seite eingebunden.
Als dies nicht funktionierte, habe ich es per preprocess versucht. Da wurden zwar die definierten Variablen für das Template übernommen, aber wiederum nicht die Daten aus der Datenbank.
- Anmelden oder Registrieren um Kommentare zu schreiben

Daten auf Seite
am 09.03.2009 - 15:42 Uhr
Ok, dann wollen wir mal.
Wenn das Modul unter einem bestimmten Pfad eine Seite mit den Daten anzeigen soll, musst Du Drupal erstmal sagen, unter welchen Pfad eine solche Seite verfügbar sein soll. Dies ist unter Anderem auf dieser Seite beschrieben.
Kurzfassung: Du musst einen neuen "Menüpunkt" mittels
hook_menu()hinzufügen, der als callback eine Funktion liefert, die die entsprechenden Inhalte darstellt.In dieser entsprechenden Funktion kannst Du dann Deine Daten laden. Wenn es Daten aus der node-Tabelle (und den dazugehörigen Tabellen) sind, kannst Du node_load() verwenden, ansonsten db_query() in Verbindung mit SQL.
Reicht das erstmal als Ansatzpunkt?
Stefan
Indem man den Anleitungen
am 09.03.2009 - 15:52 Uhr
Indem man den Anleitungen folgt, die in diversen Büchern zu finden sind. Hier mal 2 Auszüge aus Pro Drupal Development zu hook_node_info
/*** Implementation of hook_node_info().
*/
function joke_node_info() {
// We return an array since a module can define multiple node types.
// We're only defining one node type, type 'joke'.
return array(
'joke' => array(
'name' => t('Joke'), // Required.
'module' => 'joke', // Required.
'description' => t('Tell us your favorite joke!'), // Required.
'has_title' => TRUE,
'title_label' => t('Title'),
'has_body' => TRUE,
'body_label' => t('Joke'),
'min_word_count' => 2,
'locked' => TRUE
)
);
}
und dann noch hook_load
/*** Implementation of hook_load().
*/
function joke_load($node) {
return db_fetch_object(db_query('SELECT punchline FROM {joke} WHERE vid = %d',
$node->vid));
}
ich denke, daß man die Unterschiede schon sehen kann. Dein Code ist einfach falsch oder nicht vollständig.
Ich kann und will hier nicht das ganze bis ins Detail auswalzen, aber es hilft auch, wenn man sich mal entsprechende Module ansieht und feststellt, wie es da gelöst wurde. Du kannst kaum erwarten, daß man Dir mal so nebenbei ein komplettes Modul schreibt. Da solltest Du dich schon selbst einlesen.
Gruß
Werner
Reichen würde das, wenn ich
am 09.03.2009 - 15:56 Uhr
Reichen würde das, wenn ich das nicht schon mal versucht hätte. Wobei nun die Frage noch mal aufkommt, wenn ich alle Seiten - sprich somit egal welche Page/Artikel geladen wird erreichen möchte, was ist dann als items anzugeben?
wla schrieb Du kannst kaum
am 09.03.2009 - 16:01 Uhr
Du kannst kaum erwarten, daß man Dir mal so nebenbei ein komplettes Modul schreibt. Da solltest Du dich schon selbst einlesen.
Gruß
Werner
Danke für deine Bemühungen und dein Hinweis. Allerdings habe ich schon an x Stellen bereits genannt, dass ich kein Modul geschrieben haben möchte(kann man auch noch in font-size: 2em; darstellen!. Wenn dir der Aufwand Usern zu helfen zu viel ist, dann liegt es in deiner Entscheidung dies eben nicht zu tun. Und auch das Buch habe ich x mal durchgelesen und auch darauf vermerkt, das es mit der Übersetzung schwer fällt.
Ich helfe gerne, wenn ich
am 09.03.2009 - 16:27 Uhr
Ich helfe gerne, wenn ich kann, wenn ich sehe, das der andere sich bemüht und nicht immer nur quengelt, weil man es immer noch nicht mundgerecht geliefert hat. Ansonsten verweise ich auf den alten Internetspruch: RTFM
Gruß
Werner
Na dann seh mal zu das sich
am 09.03.2009 - 17:50 Uhr
Na dann seh mal zu das sich andere Bemühen...... (so ein Schwachsinn).
Na dann noch mal zu tiefstem Dank verpflichtet - du dich vom Trohn herabgestiegender wia!
Ob sich dein Hinweis als das Problem herausstellt werde ich dann noch mitteilen - nur um deinen Hochmut mal in Frage zu stellen!
Re: Modul-Daten in Seiten anzeigen
am 09.03.2009 - 18:07 Uhr
<?php
return db_fetch_object(db_query($query), ($node = $node ? $node : 1), $_SERVER['HTTP_HOST'] );
?>
Richtig wäre:
<?php$result = db_query($query, $node->nid, $_SERVER['HTTP_HOST']);
$record = db_fetch_object($result);
if ($record) {
return $record;
} else {
return new stdClass;
}
?>
Deine Daten können natürlich nur dann richtig angezeigt werden, wenn sie vorher richtig geladen werden.
Außerdem wäre es günstiger, wenn deine Tabelle eine Spalte
vidhaben würde, da dein Modul dann unterschiedliche REvisionen des selben Nodes außeinanderhalten kann.--

Hi traxer, danke für den
am 09.03.2009 - 18:35 Uhr
Hi traxer,
danke für den Hinweis, da ist mir ein Fehler unterlaufen.
Die Verfeinerung auf vid (was bei node standard ist) werde ich noch ergänzen. Vorerst möchte ich ein Zwischenergebnis in Form der Datenausgabe.
Werde den Tipp sofort anpassen.