C 4.8.8 + MR + Conflakes Search

Gesperrt
Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

C 4.8.8 + MR + Conflakes Search

Beitrag von Karlchen »

Hi zusammen,

benutze die gute alte Conflakes Suche von Kummer in C 4.8.8. Leider funktioniert dieses Modul nicht mit MR zusammen, es gibt immer wieder einen Sprung auf die Fehlerseite. Ist MR deaktiviert gehts... Hätte jemand einen Hinweis für die Änderungen in dem Modul, dass es mit MR geht?

Merci vorab und viele Grüsse

Kalrchen
<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : w3concepts.search.v1.0.1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 2004-12-29
* Modified : 2005-01-03
* ***********************************************/

class conFlakesSearch {

function conFlakesSearch() {

// Globale Variablen in Klassenkontext aufnehmen
$this->getGlobals();

// Defaultwerte setzen
$this->setDefault();

// Übergabeparameter in Klassenkontext aufnehmen
$this->importParameters();

// Datenbankverbindung herstellen
$this->db = new DB_Contenido;
$this->db2 = new DB_Contenido;

// Suchmaske ausgeben
echo $this->getSearchMask();

// Suche vornehmen
if (!empty($this->post['searchEntry'])) {
$this->doSearch();
$this->showResults();
}
}

function getGlobals() {

global $auth;

$this->classGlobal['auth'] = $auth;
}

function setDefault() {

// Tabellennamen festlegen
$this->tab['cache'] = 'conFlakes_Cache';
$this->tab['content'] = 'conFlakes_Content';
$this->tab['container'] = 'conFlakes_Container';
}

function importParameters() {

$this->get = array ();
if (!empty ($_GET))
foreach ($_GET as $key => $value) {
$this->get[$key] = $value;
}

$this->post = array ();
if (!empty ($_POST))
foreach ($_POST as $key => $value) {
$this->post[$key] = $value;
}
}

function getSearchMask() {

if (array_key_exists('searchEntry',$this->post)) {
$searchEntry = $this->post['searchEntry'];
} else {
$searchEntry = '';
}

$returnvalue = "<form style=\"display:inline;\" name=\"conFlakesSearch\" method=\"POST\" action=\"".$this->classGlobal[auth]->url()."\">";

$returnvalue .= "<div><input style=\"border:solid 1px #999; padding:3px;\" type=\"text\" name=\"searchEntry\" size=\"30\" value=\"$searchEntry\"/>";
$returnvalue .= '&nbsp;<input type="submit" name="doSearch" value="suchen" /></div>';

if (!empty($this->post['logical']) && $this->post['logical'] == 'and') {
$returnvalue .= '<div style="margin-top:10px; margin-bottom:30px;"><fieldset><legend>Logische Verknüpfung der Suchbegriffe</legend><div style="margin-bottom:5px; margin-top:5px;"><input style="vertical-align:bottom;" type="radio" name="logical" value="and" checked="checked" />&nbsp;UND (alle Begriffe sind vorhanden)</div>';
$returnvalue .= '<div><input style="vertical-align:bottom;" type="radio" name="logical" value="or" />&nbsp;ODER (einer oder mehre Begriffe vorhanden)</div></fieldset></div>';
} else {
$returnvalue .= '<div style="margin-top:10px; margin-bottom:30px;"><fieldset><legend>Logische Verknüpfung der Suchbegriffe</legend><div style="margin-bottom:5px; margin-top:5px;"><input style="vertical-align:bottom;" type="radio" name="logical" value="and" />&nbsp;UND (alle Begriffe sind vorhanden)</div>';
$returnvalue .= '<div><input style="vertical-align:bottom;" type="radio" name="logical" value="or" checked="checked" />&nbsp;ODER (einer oder mehre Begriffe vorhanden)</div></fieldset></div>';
}

$returnvalue .= '</form>';

return $returnvalue;
}

function doSearch() {

global $cfg, $client, $lang;

$sql = "" .
"SELECT " .
" a.title, " .
" a.idart, " .
" a.summary, " .
" a.idartlang, " .
" b.idcat, " .
" count(*) AS ordervalue, " .
" a.lastmodified " .
"FROM {$cfg['tab']['art_lang']} AS a " .
"LEFT JOIN {$cfg['tab']['cat_art']} AS b ON a.idart = b.idart " .
"LEFT JOIN {$cfg['tab']['cat']} AS c ON b.idcat = c.idcat " .
"LEFT JOIN {$cfg['tab']['content']} AS d ON a.idartlang = d.idartlang " .
"LEFT JOIN {$this->tab['cache']} AS e ON (e.idart = a.idart AND e.idlang = a.idlang) " .
"LEFT JOIN {$this->tab['container']} AS f ON e.pk_cache = f.fk_cache " .
"LEFT JOIN {$this->tab['content']} AS g ON f.pk_container = g.fk_container " .
"WHERE " .
" c.idclient = $client " .
" AND a.idlang = $lang " .
" AND a.online = 1 ";

$searchString = str_replace('*','.*',trim(strtolower($this->post['searchEntry'])));

if ($this->post['logical'] == 'or') {
// Suchbegriffe sind logisch ODER-verknüpft
$regExpression = "(".str_replace(" ", ")|(", $searchString).")";

$s = ereg_replace("ü", "%FC", $regExpression);
$s = ereg_replace("ä", "%E4", $s);
$s = ereg_replace("ö", "%F6", $s);

$regExpression .= " | $s";

$whereClause = " " .
"AND (" .
" d.value REGEXP '{$regExpression}' " .
" OR a.title REGEXP '{$regExpression}' " .
" OR a.summary REGEXP '{$regExpression}' " .
" OR g.value REGEXP '{$regExpression}' " .
" OR d.value REGEXP '{$s}' " .
" OR a.title REGEXP '{$s}' " .
" OR a.summary REGEXP '{$s}' " .
" OR g.value REGEXP '{$s}' " .
" ) ";

} else {
// Suchbegriffe sind logisch UND-verknüpft
$searchStrings = explode(' ',$searchString);

$whereClause = '';

foreach ($searchStrings as $search) {
$regExpression = "($search)";

$s = ereg_replace("ü", "%FC", $regExpression);
$s = ereg_replace("ä", "%E4", $s);
$s = ereg_replace("ö", "%F6", $s);

// $regExpression .= " | $s";

$whereClause .= " " .
"AND (" .
" d.value REGEXP '{$regExpression}' " .
" OR a.title REGEXP '{$regExpression}' " .
" OR a.summary REGEXP '{$regExpression}' " .
" OR g.value REGEXP '{$regExpression}' " .
" OR d.value REGEXP '{$s}' " .
" OR a.title REGEXP '{$s}' " .
" OR a.summary REGEXP '{$s}' " .
" OR g.value REGEXP '{$s}' " .
" ) ";
}
}

$sql = $sql.$whereClause;

$sql = $sql." " .
"GROUP BY " .
" a.title, " .
" a.idart, " .
" a.summary, " .
" a.idartlang, " .
" b.idcat, " .
" a.lastmodified " .
"ORDER BY " .
" ordervalue DESC";

$this->db->query($sql);

$this->searchResults = array();
while ($this->db->next_record()) {
$this->searchResults[$this->db->f('idartlang')] = array('idart'=>$this->db->f('idart'),'idcat'=>$this->db->f('idcat'),'title'=>$this->db->f('title'),'summary'=>$this->db->f('summary'),'lastmodified'=>$this->db->f('lastmodified'));
}
}

function showResults() {

global $sess, $cfgClient, $client, $lang;

// Ausgabe der Suchresultate
if (!empty($this->searchResults)) {
// Ausgabe der Resultate
$counter = 0;
foreach ($this->searchResults as $result) {
$counter++;
$link = $link = $sess->url($cfgClient[$client]['path']['htmlpath']."front_content.php?client=$client&lang=$lang&idcat={$result['idcat']}&idart={$result['idart']}");
echo '<div style="margin-bottom:15px;">';
echo "<div style=\"margin-bottom:5px;\"><a href=\"$link\"><span style=\"font-weight:bold; font-size:120%\">{$result['title']}</span></a></div>";
echo "<div style=\"margin-bottom:5px;\">{$result['summary']}</div>";
echo "<div style=\"font-size:50%\">Letztmals aktualisiert: {$result['lastmodified']}</div>";
echo '</div>';
}
} else {
// Ausgabe der Meldung, dass keine Seiten gefunden worden sind.
echo '<div>Die Suche ergab keine Resultate. Versuchen Sie es bitte mit anderen Suchbegriffen.</div>';
}
}
}

$conFlakesSearch = new conFlakesSearch();

?>
xmurrix
Beiträge: 3213
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: C 4.8.8 + MR + Conflakes Search

Beitrag von xmurrix »

Hallo,
Karlchen hat geschrieben:...benutze die gute alte Conflakes Suche von Kummer in C 4.8.8. Leider funktioniert dieses Modul nicht mit MR zusammen, es gibt immer wieder einen Sprung auf die Fehlerseite. Ist MR deaktiviert gehts... Hätte jemand einen Hinweis für die Änderungen in dem Modul, dass es mit MR geht?...
ich würde es mal mit einer Anpassung der Zeile

Code: Alles auswählen

$returnvalue = "<form style="display:inline;" name="conFlakesSearch" method="POST" action="".$this->classGlobal[auth]->url()."">";
in

Code: Alles auswählen

global $idart, $client, $lang; 
$returnvalue = "<form style="display:inline;" name="conFlakesSearch" method="POST" action="front_content.php?idart=".$idart."&client=".$client."&lang=".$lang."">";
probieren.

Der Aufruf von $this->classGlobal[auth]->url() kann bei Verwendung von MR eine URL zurückliefern, die eventuell Probleme verursacht.

Gruß
xmurrix
Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen »

Hi xmurrix,

DANKE, es klappt nun mit MR bestens!!!

Auch wenn es jetzt schon fast unverschämt ist: Hättest du vielleicht noch einen Trick für mich auf Lager, dass die Ausgabe der gefundenen Seiten auch MR tauglich ist? Trotz aktiviertem MR, bleibt in der Ausgabe der Link mit frontcontentxxxxx stehen...

Merci und viele Grüsse

Karlchen
xmurrix
Beiträge: 3213
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Beitrag von xmurrix »

Karlchen hat geschrieben:...Trotz aktiviertem MR, bleibt in der Ausgabe der Link mit frontcontentxxxxx stehen...
Wie sieht der Link/die URL denn genau aus, kannst du es mal posten?

Gruß
xmurrix
Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen »

klar, bei aktivem MR lautet die URL der Suchseite so:
/de/service/suche/index.html

Wird ein Suchbegriff eingegeben und etwas gefunden (oder auch nicht gefunden) kommt diese URL:
/de/service/suche/suchen_und_finden.html

MR arbeitet z.B. bei der Navi weiterhin korrekt, lediglich die Links der gefundenen Artikel werden trotz MR aber so ausgegeben:
/cms/front_content.php?client=1&lang=1&idcat=41&idart=67

Wobei beim Klick auf den Link der richtige Artikel erscheint und MR auch weiterhin korrekt arbeitet...

Viele Grüsse

Karlchen
xmurrix
Beiträge: 3213
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Beitrag von xmurrix »

Karlchen hat geschrieben:...MR arbeitet z.B. bei der Navi weiterhin korrekt, lediglich die Links der gefundenen Artikel werden trotz MR aber so ausgegeben:
/cms/front_content.php?client=1&lang=1&idcat=41&idart=67...
Dafür musst du die Zeile

Code: Alles auswählen

$link = $link = $sess->url($cfgClient[$client]['path']['htmlpath']."front_content.php?client=$client&lang=$lang&idcat={$result['idcat']}&idart={$result['idart']}");
in

Code: Alles auswählen

$link = "front_content.php?client=$client&lang=$lang&idcat={$result['idcat']}&idart={$result['idart']}";
ändern.

Damit werden Urls erstellt, die mit "front_content.php" beginnen. Diese URLs werden dann vom MR Plugin erkannt und umschrieben.

Gruß
xmurrix
Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen »

Xmurrix, merci vielmals!!! Funktioniert nun grandios.

Viele Grüsse

Karlchen

PS Denkst du noch an deine Wishlist? ;-)
suppenschlurf
Beiträge: 3
Registriert: Mo 26. Jan 2009, 17:51
Kontaktdaten:

Komplettes Such-Modul?

Beitrag von suppenschlurf »

hallo allerseits,

ich bin noch recht neu bei contenido und muss eine suche in eine 4.8.x installation integrieren. durch empfehlung bin ich auf die w3c-conFlakes suche gestossen. Aber wo kann man denn jetzt noch das gesamte modul finden. ohne z.b. ein entsprechenden sql-dump der verwendeten tabellen ist der reine source-code doch recht nutzlos oder versteh ich da was nicht??

meine frage also: wo findet man denn noch den rest des beschriebenen moduls.

mit der bitte um erleuchtung...

gruß,
matthias
Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen »

Hi Matthias,
das ist der komplette Code von Kummers Conflakes Search. Für MR musst die nur die o.g. Schnipsel austauschen.
Verwendung: den Code NUR in den Output eines neuen Modul einfügen und das Modul im Layout einbinden. Das wars! Oder hast du noch Fragen???
Viele Grüsse
Karlchen
suppenschlurf
Beiträge: 3
Registriert: Mo 26. Jan 2009, 17:51
Kontaktdaten:

Beitrag von suppenschlurf »

hallo karlchen,
vielen dank für deine schnelle anwort. das problem ist, dass die suche nichts finden will. wenn ich mir mal das sql ausgeben lasse, welches die suche an die datenbank absetzt ist das auch logisch, da dort tabellen einbezogen werden, die es in meiner contenido-installation einfach nicht gibt (conFlakes_Cache, conFlakes_Container, conFlakes_Content).
die werden im quellcode in der funktion setDefault() festgelegt.

aber was sind denn das für tabellen und wo kann man die herbekommen?

gruß,
matthias
Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen »

Hi Matthias,
die Tabellen kommen von dem ConFlakes Modul... Muss ich aber suchen...
Viele Grüsse
Karlchen
suppenschlurf
Beiträge: 3
Registriert: Mo 26. Jan 2009, 17:51
Kontaktdaten:

Beitrag von suppenschlurf »

hallo karlchen,

falls du noch was dazu findest wäre das natürlich super. aber falls nicht, was gäbe es denn in diesem bereich noch für alternativen? gleichen oder zumindest ähnlichen funktionsumfang sollten sie bieten...

mich wunderts ja, dass es da etwas dünn gesäht ist bei contenido. zumindest soweit ich das jetzt nach meinen bisherigen recherchen überschaue.

gruß,
matthias
Gesperrt