Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 19. März 2018 08:53

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 604

Externe Suche (sphider-plus) in CMSms integrieren

Hallo zusammen,

aufbauend auf diesem Thread (http://www.cmsmadesimple.de/forum/viewtopic.php?id=5101) geht es nun um die Einbindung der Suche in CMSms 2.
Die Suche an sich ist richtig gut - PDF's werden durchsucht, News- und LISE-Einträge ebenfalls. Aber nun der nächste Schritt.
Das Suchformular selbst ist kein Problem - einfach den Code an die entsprechende Stelle im Template setzen und etwas anpassen/aufhübschen (HTML und CSS):

[== HTML ==]
<form action="/path_to_sphider-plus/search.php" method="get">
<table border="2" width="150" cellpadding="0" cellspacing="2">
<tr>
<td align="center"><input type="text" name="query_t" size="30" value="" /></td>
<td align="center"><input type="submit" value="Search" />
<input type="hidden" name="search" value="1" /></td>
</tr>
</table>
</form>

Jetzt wird allerdings beim Absenden der Suche das Script bzw. die Ergebnisseite geladen - komplett außerhalb von CMSms.
Es gibt da eine entsprechende Hilfe in der Dokumentation (http://www.sphider-plus.eu/index.php?f=14#14_210), allerdings werde ich daraus nicht so ganz schlau.
Ziel ist es, das Suchergebnis im Rahmen der "normalen" Seite zu zeigen.

Ganz platt würde ich jetzt so da dran gehen:

[== HTML ==]
<form action="/path_to_sphider-plus/search.php" method="get">

ersetzen durch

[== HTML ==]
<form action="/suchergebnis" method="get"> <!-- "suchergebnis" ist eine in CMSms angelegte Seite -->

Auf der Seite "suchergebnis" würde ich nun das Skript in irgendeiner Form in den Content-Block setzen. Nur wie?
Ich blicke es irgendwie nicht ... Ich muss ja die Informationen an das Script der Seite übergeben.

Zur Info:
Die search.php includiert im Prinzip nur weitere PHP-Dateien, die die Ergebnisseite aufbauen. Hier würde dann ja im Prinzip die entsprechende Datei ausreichen (die anderen Dateien kümmern sich um HTML-Header, Suchfeld, Suchoptionen etc.).
Hat jemand mit Shpider(Plus) Erfahrungen?

Danke schon mal fürs Zuhören :-)

Offline

#2 20. März 2018 13:54

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.097

Re: Externe Suche (sphider-plus) in CMSms integrieren

allerdings werde ich daraus nicht so ganz schlau.

Dein Ansatz ist schonmal nicht verkehrt.
Die eigentlichen Infos stehen allerdings in der search.php von sphider plus.
Da kann ich leider nicht helfen.
Aber wie ich das sehe, musst Du im Backend von Sphider Plus eine Option aktivieren, die verhindert, dass eine komplette Seite generiert wird. Die einzelnen Teile (header, css, formular, ergebnisse) musst Du dann selbst einbinden. Bei der orginial-Version hätte ich in der search.php einfach die Stellen, die ich nicht brauche, selbst auskommetiert. Dann bräuchte man nur die search.php via include einzubinden.

Laut Smarty-Dokumentation ist das Einbinden von PHP-Dateien im Template veraltet. Man soll stattdessen, Plugins verwenden.

Also z.B. im Verzeichnis "/plugins" eine Datei namens "function.sphider.php" mit folgendem Code anlegen:

<?php
function smarty_function_sphider($params, $template)
{
    include_once('/path_to_sphider-plus/search.php');
}
?>

Und dann an gewünschter Stelle mit {sphider} einfach im Template oder Inhalt aufrufen.

Wenn man das ganze weiterdenkt, könnte man die einzelnen Teile von sphider dann via Parameter ansteuern:

<?php
function smarty_function_sphider($params, $template)
{
    if(isset($params['css']))
        include_once('/path_to_sphider-plus/file_for_css.php');

    if(isset($params['form']))
        include_once('/path_to_sphider-plus/file_for_search_form.php');

    if(isset($params['results']))
        include_once('/path_to_sphider-plus/file_for_results.php');

    ...
}
?>

Und dann im Template z.B. {sphider results=true} nur für die Ergebnisse.
Aber wie gesagt, dazu müsste man einen Blick in die Sphider Plus search.php werfen.

Offline

#3 21. März 2018 03:07

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 604

Re: Externe Suche (sphider-plus) in CMSms integrieren

Hallo NaN,

danke für den Ansatz.

Im Prinzip sieht Dein Vorschlag schon aus wie die Sphider.php - diese inkludiert nur nach und nach die entsprechenden "Bausteine". Die wiederum werden durch die Option im Admin gesteuert (mal mit html-Grundgerüst bzw. ohne).

Leider hänge ich schon bei der bloßen Einbindung :-/
Ich habe das Plugin erstellt, die Option im Sphider-Admin gesetzt und grundsätzlich funktioniert es auch mit dem Aufruf {sphider} und den zusätzlichen Parametern. Aber wie es aussieht, bricht CMSms die Ausgabe, sobald {sphider ...} erreicht wird, ab. Ich habe es mit einem einfachen echo-Befehl in einer test.php gegengeprüft, das klappt.
Konkret sieht das Plugin bei mir so aus:

[== PHP ==]
<?php
function smarty_function_sphider($params, $template)
{
    if(isset($params['head']))
        include_once('/path_to_sphider/include/search_10.php'); //Bindet notwendige Meta-Infos ein

    if(isset($params['form']))
        include_once('/path_to_sphider/include/search_30.php'); //Formular

    if(isset($params['results']))
        include_once('/path_to_sphider/include/search_40.php'); //Ergebnis-Liste

}
?>

Im header rufe ich entsprechend {sphider head=true} auf und auf der Suchergebnis-Seite im Content {sphider results=true}. Nur ohne Erfolg.
Auch wenn noch kein Suchbegriff übergeben wird, sollte doch dennoch irgendeine Ausgabe erfolgen - klappt bei der search.php ja auch ...

Beitrag geändert von jeff1980 (21. März 2018 03:08)

Offline

#4 21. März 2018 16:27

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.097

Re: Externe Suche (sphider-plus) in CMSms integrieren

Dann scheint da noch etwas mehr benötigt zu werden.
Sind denn in der search.php keine Kommentare, die etwas mehr erklären?
Die Doku allein hilft da leider wirklich nicht weiter.

Edit: Also wenn CMSms beim Plugin abbricht, aber das Grundprinzip in einer separaten php-Datei funktioniert, dann liegt das i.d.R. an einem fatalen Fehler, der irgendwas mit dem Plugin zu tun haben muss. Wie siehts aus mit Fehlermeldungen? Error-Logs?

Wie hast Du denn das mit der test.php gemacht?

Offline

#5 21. März 2018 21:50

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 604

Re: Externe Suche (sphider-plus) in CMSms integrieren

Die Kommentare in der search.php sagen im Grunde nicht mehr aus, als ich in das Plugin geschrieben habe - was jeweils die einzelnen search-Dateien machen. Nicht mehr.

Die Logs haben ergeben, dass ein Pfad in der search_10.php nicht gefunden werden und eine weitere Datei entsprechend nicht inkludiert werden kann:

[== Log ==]
PHP Fatal error:  require_once(): Failed opening required './settings/database.php' (include_path='.:/usr/share/php7.0') in /is/htdocs/xxx/www/sphider/include/search_10.php on line 62

Nachdem ich den Pfad durch den absoluten Pfad (wie der Pfad zur search_10.php) angegeben habe, kommt folgender Fehler:

[== Log ==]
PHP Fatal error:  Uncaught Error: Call to undefined function IPv4To6() in /is/htdocs/xxx/www/sphider/include/search_10.php:119\nStack trace:\n#0 /is/htdocs/xxx/www/cmsms2018/assets/plugins/function.sphider.php(8): include_once()\n#1 /is/htdocs/xxx/www/cmsms2018/lib/smarty/sysplugins/smarty_resource_recompiled.php(52) : eval()'d code(19): smarty_function_sphider(Array, 'Stiftung-Patien...')\n#2 /is/htdocs/xxx/www/cmsms2018/lib/smarty/sysplugins/smarty_template_resource_base.php(128): content_5ab2c10f8c09a4_06479197(Object(CMS_Smarty_Template))\n#3 /is/htdocs/xxx/www/cmsms2018/lib/smarty/sysplugins/smarty_template_compiled.php(172): Smarty_Template_Resource_Base-]getRenderedTemplateCode(Object(CMS_Smarty_Template))\n#4 /is/htdocs/xxx/www/cmsms2018/lib/smarty/sysplugins/smarty_internal_template.php(206): Smarty_Template_Compiled-]render(Object(CMS_Smarty_Template))\n#5 /is/htdocs/xxx/www/cmsms2018/lib/smarty/sysp in /is/htdocs/xxx/www/sphider/include/search_10.php on line 119

Die test.php (mit echo "Test";) habe ich in das Verzeichnis mit den search_xx.php-Dateien gelegt und dann stattdessen im Plugin aufgerufen.

Offline

#6 22. März 2018 13:45

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.097

Re: Externe Suche (sphider-plus) in CMSms integrieren

Und in der search.php steht sonst auch nichts weiter drin?
Keine weiteren includes o.ä.?
Denn "Call to undefined function IPv4To6()" sagt mir, dass da eine Funktion fehlt.
In der alten search.php steht z.B. ganz oben noch dies hier:

$include_dir = "./include"; 
include ("$include_dir/commonfuncs.php"); <-- Das sieht wichtig aus

Das müsstest Du in Deinem Plugin noch einfügen.
Allerdings müsste "./" entsprechend angepasst werden, je nachdem wo sich die search.php vom Plugin aus befindet.

Bsp.:

[CMSms root]
|
+--- /sphider-plus/
|    |
|    +--- /include/
|    |    |
|    |    +---commonfuncs.php
|    |
|    +--- search.php
|
+--- /plugins/
     |
     +--- function.sphider.php

in der function.sphider.php müsste dann folgendes stehen:

...
$include_dir = "../sphider-plus/include"; 
include ("$include_dir/commonfuncs.php");
...
include_once '../sphider-plus/search_10.php';

Also relativ zum Verzeichnis des Plugins.
Oder Du lässt das ./include wie es ist (denn wenn ich mir die commonfuncs.php so anschaue, könnte es da wieder zu Problemen kommen, weil die Variable weiter verwendet wird) und machst folgendes:

$include_dir = "./include"; 
include ("../sphider-plus/include/commonfuncs.php"); <-- also den Pfad ohne Variable angeben

Offline

#7 22. März 2018 14:13

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 604

Re: Externe Suche (sphider-plus) in CMSms integrieren

Die Pfade sind glaube ich ein Fass ohne Boden. Die Dateien werden über mehrere Dateien hinweg inkludiert. Immer wenn ich wieder einen Pfad angepasst habe, kam der nächste Fehler in einer weiteren Datei. Und bevor ich mir da die Updatefähigkeit zerschieße ...

Ich habe es jetzt komplett anders gelöst (zumindest größtenteils):
- selbst ein Such-Formular mit dem Formbuilder gebaut, welches den Suchbegriff über ein UDT in die Session speichert und zur Suchergebnis-Seite leitet - der Hinweis kam glaube ich in anderem Zusammenhang auch mal von Dir :-)
- auf der Suchergebnis-Seite wird dann per jquery/Ajax (keine Ahnung :-)) die search.php mit den entsprechenden Parametern (Suchbegriff aus der Session plus ein paar feste Parameter) geladen und es läuft. So hätte ich sogar die Möglichkeit, das Formular mal zu erweitern und weitere Parameter mitzugeben.

Ich muss nun den "Rahmen", also die ganzen HTML-Templates anpassen. Aber das hätte ich ja ohnehin gemusst. So scheint es auf jeden Fall ganz gut zu funktionieren.

Danke für Deine Mühen ...

Offline