Wie kann ich die function search_data überschreiben?
am 18.02.2010 - 23:28 Uhr in
Wie kann ich folgende Funktion aus dem search.module überschreiben?
/**
* Perform a standard search on the given keys, and return the formatted results.
*/
function search_data($keys = NULL, $type = 'node') {
if (isset($keys)) {
if (module_hook($type, 'search')) {
$results = module_invoke($type, 'search', 'search', $keys);
if (isset($results) && is_array($results) && count($results)) {
if (module_hook($type, 'search_page')) {
return module_invoke($type, 'search_page', $results);
}
else {
return theme('search_results', $results, $type);
}
}
}
}
}Wenn es da keine Möglichkeit gibt, das zu überschreiben, muss man dann einen Hack im Core machen?
Jedenfalls sollte diese Zeile
if (isset($results) && is_array($results) && count($results)) {geändert werden auf
if (isset($results) && is_array($results)) {um die normale Ergebnisseite auch dann anzuzeigen, wenn 0 Treffer bei der Suche rausgekommen sind. Das ist nötig, damit auch dann die Google Werbung angezeigt wird, die in search-results.tpl.php eingebaut wurde.
- Anmelden oder Registrieren um Kommentare zu schreiben

DrupalFan schrieb Wie kann
am 19.02.2010 - 08:16 Uhr
Wie kann ich folgende Funktion aus dem search.module überschreiben?
Leider gar nicht.
Wenn es da keine Möglichkeit gibt, das zu überschreiben, muss man dann einen Hack im Core machen?
Nein. Bitte nicht.
um die normale Ergebnisseite auch dann anzuzeigen, wenn 0 Treffer bei der Suche rausgekommen sind.
Du könntest etwas Anderes versuchen:
erstelle Dir ein Modul, in dem Du die Funktion hook_search implementierst.
Dort lieferst Du exakt ein Ergebnis zurück. Dieses Ergebnis könntest Du dann sogar noch über eine Implementierung der Funktion template_preprocess_search_results einfach wieder herausfiltern, so dass es nicht angezeigt wird.
So hast Du definitiv immer ein Ergebnis, das jedoch nicht angezeigt wird.
hth,
Stefan
--
Sei nett zu Deinem Themer!
search-results.tpl.php immer themen können, auch bei 0 Treffer
am 19.02.2010 - 13:12 Uhr
Ja, das ist vielleicht eine Möglichkeit, aber ehrlich gesagt, ist mir das zu viel Aufwand. Es geht hier nur darum eine einzige Zeile zu verändern oder es geht darum, dass auch dann, wenn 0 Treffer rausgekommen sind, die vorhandene search-results.tpl.php aufgerufen wird, was jetzt bei 0 Treffern leider nicht der Fall ist. Man könnte sogar sagen, das ist eine Schwachstelle im Search Modul, denn sinnvoller ist auf jeden Fall, dass auch bei 0 Treffern theming mit der ja vorhandenen und funktionierenden Template-Datei search-results.tpl.php möglich ist.
Aufwand
am 17.03.2010 - 10:13 Uhr
Ja, das ist vielleicht eine Möglichkeit, aber ehrlich gesagt, ist mir das zu viel Aufwand.
Tja, dann ist Dir nicht zu helfen.
Man könnte sogar sagen, das ist eine Schwachstelle im Search Modul
Definitiv nicht.
denn sinnvoller ist auf jeden Fall, dass auch bei 0 Treffern theming mit der ja vorhandenen und funktionierenden Template-Datei search-results.tpl.php möglich ist.
Nein, auch nicht. Zumal es in diesem Fall keine Suchergebnisse gibt, die gethemed werden müssten. Dementsprechend macht dieses Template für diesen Fall keinen Sinn.
eoh,
Stefan
Macht sehr viel Sinn
am 17.03.2010 - 14:22 Uhr
Doch, das template macht sehr sehr sehr viel Sinn, auch dann, wenn NULL Suchergebnisse rauskommen.
Denn genau dann erscheint eine Google Adsense for Search Ads-Only Werbung, genauso wie wenn Suchergenisse rauskommen. Und diese Werbung kann man in der template Datei einfach einbauen.
Und diese Werbung muss unbedingt auch dann erscheinen, wenn Null Suchergebnisse rauskommen und genau dann ist nämlich die Klickrate noch höher und der Kunde kann Einnahmen generieren.
Leider kennt fast niemand die Google Adsense for Search Ads-Only, wie man auch bei diesem Beitrag sehen kann:
http://www.drupalcenter.de/node/25326
(Null Reaktion).
Verstehst Du jetzt, warum es so wichtig ist?
Die Template-Datei ist super, was sie nutzt in dem Fall nicht, wenn sie nicht aufgerufen wird, aber aufgerufen werden MUSS! Diese Werbung ist sehr wichtig, niemand kann das weg diskutieren.
Wenn hier keiner eine Idee hat, wie man das lösen kann, bleibt nur ein hack oder patch fürs search Modul.
if (isset($results) && is_array($results)) {
Lösung
am 17.03.2010 - 14:28 Uhr
Wenn hier keiner eine Idee hat, wie man das lösen kann
Die Lösung habe ich Dir bereits beschrieben.
bleibt nur ein hack oder patch fürs search Modul.
Du wirst schon wissen, was Du tust ...
Sinnvolle Lösung
am 17.03.2010 - 18:15 Uhr
Um eine einzige Zeile zu verändern, wird niemand so einen aufwändigen Weg gehen.
Es muss auch andere, sinvolle Lösungen geben, wo man nicht einen riesigen Aufwand hat nur um eine winzige Sache zu ändern.
DrupalFan schrieb Um eine
am 17.03.2010 - 20:14 Uhr
Um eine einzige Zeile zu verändern, wird niemand so einen aufwändigen Weg gehen..
Ich würde es begrüßen, wenn du weniger verallgemeinern würdest. Ich würde Stefans Weg nämlich sehrwohl gehen und halte ihn für "sauber". Da wären wir schonmal bei niemand weniger zwei.
Entwickler versus Hobby
am 17.03.2010 - 20:20 Uhr
Es gibt Entwickler, die haben viele Aufträge, da staut es sich schon. Da kann man nicht solche aufwändigen Lösungen machen um eine Zeile zu verändern. Ganz bestimmt nicht.
Es gibt Hobby-Drupaler, die haben Zeit für das, ist halt ein Spiel, viel und manchmal auch komlizierte Sachen zu machen. Ich versteht das schon, umgekehrt sollte man die Entwickler, die sich die Zeit nicht nehmen wollen, auch verstehen.
Was bedeutet das jetzt? Das
am 17.03.2010 - 20:35 Uhr
Was bedeutet das jetzt? Das Du in Deinen Kundenprojekten lieber den Core hackst um schneller zum gewünschten Ergebnis zu kommen, anstatt ein Modul zu schreiben?
soso
am 17.03.2010 - 22:26 Uhr
Es gibt Entwickler, die haben viele Aufträge, da staut es sich schon. Da kann man nicht solche aufwändigen Lösungen machen um eine Zeile zu verändern. Ganz bestimmt nicht.
Seltsam nur, dass ich dann genau diesen "aufwändigen Weg" vorgeschlagen habe. Als erfahrener Entwickler mit Kundenprojekten vermeidet man es nämlich tunlichst, eine "Lösung" zu verwenden, die einen später mal gehörig auf die Nase fallen lässt.
Es gibt Hobby-Drupaler, die haben Zeit für das, ist halt ein Spiel, viel und manchmal auch komlizierte Sachen zu machen. Ich versteht das schon, umgekehrt sollte man die Entwickler, die sich die Zeit nicht nehmen wollen, auch verstehen.
Soso. Na dann möchte ich Deine "Kundenprojekte" lieber nicht sehen.
Stefan
PS: es soll ja auch Entwickler mit vielen Aufträgen geben, die lieber sauber arbeiten und sich Zeit für eine vernünftige, gut durchdachte Lösung nehmen. Habe ich jedenfalls mal gehört.
Saubere Lösung ohne viel Aufwand
am 17.03.2010 - 22:36 Uhr
Leider falsch!!!
Ich will ja eine saubere Lösung! Aber nicht eine mit soooooooooo viel Aufwand. Das ist hier das Ziel und ich hoffe, es gibt einen Weg.
Hättest du mal die Zeit für
am 17.03.2010 - 23:39 Uhr
Hättest du mal die Zeit für deine Follow-Ups in diesem Thread in Stefans Lösungsansatz gesteckt, wärst du schon lange fertig.
Um es in Abwandlung eines bekannten Werbespruchs zu sagen: Suchst du noch oder löst du schon?
Ja, manchmal sucht man ja
am 17.03.2010 - 23:54 Uhr
Ja, manchmal sucht man ja länger.
Ich glaube aber, dass nicht viele extra ein Modul schreiben würden um dieses Problem zu lösen.
Modul
am 18.03.2010 - 08:20 Uhr
Mal eine andere Frage: wenn Du es nicht selbst lösen willst oder kannst, warum beauftragst Du dann nicht einen richtigen Entwickler, dieses "Problem" zu lösen?
5 Minuten dürfte sich wohl auch jemand mit vielen Projekten dafür abzweigen können ...
DrupalFan schrieb Ja,
am 18.03.2010 - 10:44 Uhr
Ja, manchmal sucht man ja länger.
Schon richtig, aber du hast ja nun schon eine Weile einen sauberen Lösungsweg vorliegen und Stefan ist nicht eben dafür bekannt mal schnell irgendwas hinzuschlunzen. Wenn du im Anschluss also noch die Zeit x für weitere Suchen investierst kannst du dir auch überlegen, ob es im Sinne einer funktionierenden lösung nicht besser ist o.g. Weg umzusetzen, anstatt weiter Ausschau nach der Weltformel zu halten.
Ich glaube aber, dass nicht viele extra ein Modul schreiben würden um dieses Problem zu lösen.
Es würden zumindest diejenigen machen, die halbwegs fit in der Drupal-Entwicklung sind und das sind die einzigen, von denen du überhaupt eine Reaktion bekommen hast. Diejenigen mit geringerem Kenntnisstand / Erfahrungsschatz haben sich gar nicht gemeldet, weshalb die Chancen gut stehen, dass es die von dir gewünschte noch einfacherer Lösung für Nicht-Voll-Durchsteiger nicht gibt.
Überredet
am 23.03.2010 - 11:47 Uhr
Okay, ich glaube ihr habt ja recht und habt mich überzeugt:
Wenn ich Zeit findet, werde ich so ein SiteHelper-Modul schreiben (wie damals in Drupal 5) und das Problem von hier oben und auch das Problem hier
http://www.drupalcenter.de/node/25261
mit dem SiteHelper Modul lösen (gibt es dafür überhaupt weine Lösung, scheint weltweit ungelöst zu sein).