AJAX-Frage vom Anfänger
am 10.12.2014 - 16:29 Uhr in
Hallo, ich versuche in einem Vorhanden Modul (search_api) die Suchergebnisse in einem DIV-Element zu öffnen.
Dazu wollte ich die AJAX-Exampels von Drupal verwenden. Also habe ich diesen Code in search_api.module eingefügt
function search_api_link_ajax() {
// A menu callback is required when using ajax outside of the Form API.
$items['search_api_link_callback'] = array(
'page callback' => 'search_api_ajax_response',
'access callback' => 'user_access',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK
);
return $items;
}
function search_api_ajax_response($type = 'ajax') {
if ($type == 'ajax') {
$output = t("This is some content delivered via ajax");
$commands = array();
// See ajax_example_advanced.inc for more details on the available commands
// and how to use them.
$commands[] = ajax_command_append('l-region--detail', $output);
$page = array('#type' => 'ajax', '#commands' => $commands);
ajax_deliver($page);
}
else {
$output = t("This is some content delivered via a page load.");
return $output;
}
}Damit wollte ich ein Hook erstellen.
Und die Funktion "getItemUrl" in "includes/datasource_entity.inc" habe ich damit ersetz
public function getItemUrl($item) {
if ($this->entityType == 'file') {
return array(
'path' => file_create_url($item->uri),
'options' => array(
'entity_type' => 'file',
'entity' => $item,
),
);
}
$url = entity_uri($this->entityType, $item);
$url['#type'] = 'link';
// Note the /nojs portion of the href - if javascript is enabled,
// this part will be stripped from the path before it is called.
$url['#id'] = 'ajax_link';
$url['#ajax'] = array(
'wrapper' => 'l-region--detail',
'method' => 'html',
'callback' => 'search_api_link_ajax',
);
return $url ? $url : NULL;
}Damit sollten die Parameter für den Link übergeben werden, denke ich mal. Was aber genau hier passiert, habe ich keine Ahnung.
Jetzt habe ich es soweit das das Ding mir keine Fehler ausgibt. Funktionieren tut es aber beim weiten noch nicht. War mir auch klar, das es so schnell nicht laufen wird.
Jetzt versuche ich verzweifelt rauszufinden, wie das beim Drupal mit den Hooks funktioniert.
Habe ich bereits den Hook in search_api.modulerichtig erstell?
Wie greife ich jetzt auf diesen Hook aus datasource_entity.inc zu?
Danke für jede Hilfe
- Anmelden oder Registrieren um Kommentare zu schreiben

Du hast in das Modul search_api was reingeschrieben?
am 12.12.2014 - 14:06 Uhr
Wenn ich das so richtig verstehe, dann ein paar grundsätzliche Sachen.
Hooks werden dazu genutzt, in eigenen Modulen sich in bestehende Prozesse einzuhängen. Zwar kannst Du das auch in einem anderen Modul drin machen, wenn das aber geupdatet wird sind die overrides von Dir wahrscheinlich weg. Google danach, wie ein Modul gebaut wird, in deinem Fall scheinst Du (ich analysiere deinen Code nicht!) nur YOURMODULE.info und YOURMODULE.module zu brauchen.
In der *.module Datei haust Du obigen Code rein, aktivierst das Modul und schaust was passiert.
Das Ersetzen von Code eines bestehenden Moduls sollte AUF JEDEN FALL vermieden werden. Hooks sind dazu da, wenn gegeben, sich da reinzuhängen und den Prozess umzugestalten (erweitern, verändern etc.).
Ohne Hintergrundwissen was die searchapi jetzt macht kommt mir das aber im Grundgedanken Deines Tuns ein wenig komisch vor.
Falls ich Dich richtig verstehe möchtest Du nicht die Ergebnisse als solches verändern, sondern themen??? Also das Resultat in css packen.
Und das macht man nicht mittels Funktionsänderung sondern mittels Theming. D.h. Du greifst auf die Ausgabe am Schluss zu, da wo gerendert wird. Am besten setzt Du das search_api Modul neu auf und suchst darin nach einer tpl.php Datei.
Stichworte wie das Ganze funktioniert sind in Google theming und tpl.php. Das kannst Du auf verschiedene Weise lösen.
Viel Spaß.
Marc