AJAX: Nachladen eines DIVs in eigenem Modul
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 15.01.2010 - 11:33 Uhr in
Hallo zusammen!
Ich möchte in einem eigenenModul auf einer Seite in einem DIV Inhalte nachladen. Dazu rufe ich per Ajax eine Url auf, welche den Content zurückgibt. Ich musste jedoch auch diese Url in Drupal integrieren, da dort auf das Drupal System und Nodes zugegriffen wird. Daher habe ich diese aufzurufende Url mit hook_menu() integriert.
Geht auch bisher alles gut, aber wenn ich diese Url per Ajax nachladen erhalte ich natürlich auch die gesamte HTML-Seite drumrum. Ich möchte aber nur den Inhalt des DIVs erhalten und nicht eine gesamte HTML-Seite.
Wie kann ich das anstellen?
<?php
function suche_menu() {
$items = array();
$items['suche/ajax/region/%'] = array(
'page callback' => 'buildContent',
'access arguments' => array('access content'),
'page arguments' => array(3),
'type' => MENU_CALLBACK,
);
return $items;
}
function buildContent() {
return "Inhalt";
}
?>
Oben das Beispiel: Anstatt einer ganzen Seite, soll hier nur "Inhalt" nachgeladen werden.
Viele Grüße
Jan
- Anmelden oder Registrieren um Kommentare zu schreiben
Component...
am 15.01.2010 - 12:51 Uhr
Das Modul http://drupal.org/project/component könnte Dir vielleicht helfen. Du müsstest einen Block bereitstellen und diesen per Ajax nachladen.
Siehe auch: http://mdwp.de/blog/ajax-und-drupal-leicht-gemacht
Viel Erfolg
Sepp
Die Lösung!
am 15.01.2010 - 13:04 Uhr
Hey Sepp,
danke für den Hinweis, aber ich nutze Drupal 6 und da ist das Modul noch in der Entwicklung.
Kannst du mir sagen, ob ich da bestimmte Blöcke oder Views definieren kann, die ich aufrufen will? Oder kann ich (oder jemand fremdes) über die Urls alle Elemente direkt aufrufen?
Habe sonst die Lösung gefunden. Die Funktion muss lauten:
<?php
function
buildContent() {
echo "Inhalt";
}
?>
Wenn ich etwas returne, wird die Page drumrum aufgebaut. Mit print und echo kann ich einen Output erstellen ohne die Page!
Viele Grüße
Jan
Block bereitstellen
am 15.01.2010 - 14:18 Uhr
.. ja ok ist ein Argument. Das Modul funktioniert bei mir aber einwandfrei und wenn du Dir den QuellCode ansiehst kann da auch nicht viel schiefgehen.
Du müsstest bei deinem Modul einen Block bereitstellen mit hook_block:
<?php
/**
* Implementation of hook_block()
*/
function DEIN_MODUL_block($op='list', $delta=0, $edit=array()) {
switch ($op) {
// Dein Code hier
return $blocks;
}
}
?>
Aufruf dann mit Component:
<?php
//Block ausgeben
print component_get_block('DEIN_MODUL_BLOCK',0,'Dein Block-Titel');
//der erste Parameter ist das Modul, welches den Block generiert
//der zweite Parameter ist die Nummer (delta) des Blocks
//der dritte Parameter ist ein neuer Titel für den Block
?>
Sepp