Moin Freddy,
stimmt ja nicht ganz.
Doch, bei Deiner bisherigen Schilderung schon. Wobei diese seiteninterne Suche natürlich nicht mit google & Co. gleichzusetzen ist...
Mein Problem ist ja das durch das Kontaktmodul der Namen der Kontaktperson ausgegeben wird aber wohl nicht in er DB gespeichert wird und damit nicht in der Suche berücksichtigt wird.
Das hattest Du so im Detail noch gar nicht beschrieben (-> Glaskugel).
Hier gibt's dann zwei Ansätze: Entweder Du bekommst per Modul den fraglichen Inhalt in die
con_content oder Du musst halt das Modul anpassen damit Metadaten unabhängig von der
con_content gefunden werden.
Lösungsansatz und Infos zum aktuellen Modul für letzteres:
Im Bereich
/********** collecting idartlang, idtype and amount of hits begin **********/ werden alle Artikel in der
con_content gesammelt und nach dem Begriff durchsucht. Im Array
$array_detections wird der Artikel hinterlegt sofern ein Treffer gefunden wurde. Sie ist die Basis für die spätere Wertung und Suche in den Metadaten. Das kannst Du grundsätzlich so lassen. Die später folgende Query zu den Metadaten hängt aktuell also von den Inhalten dieses Arrays ab:
Ist Dein Suchbegriff zwar in den Metadaten enthalten aber nicht in der
con_content, wird er also in der derzeitigen Version der Suche nicht gefunden.
Im Abschnitt
/* searchstring contained in metadata begin */ findest Du die Query zu den Metadaten. Die könntest Du aber grundsätzlich auch so belassen wie sie ist.
Dein Ansatzpunkt ist eine
zusätzliche Query über die Tabelle
con_meta_tag, die das Array
$array_detections nach dem Crawlen der
con_content ergänzt. Also im Anschluss an
/********** collecting idartlang, idtype and amount of hits end **********/ lässt Du eine Suche über die
con_meta_tag laufen, die das Array
$array_detections um weitere Artikel ergänzt, bei denen der Suchbegriff ausschließlich in den Metatags steht. Dazu brauchst Du nur die schon vorhandene Suche über die
con_content im Abschnitt
Code: Alles auswählen
/********** collecting idartlang, idtype and amount of hits begin **********/
// array contains all idtypes with hits, so idartlang might be contained several times
$query = "SELECT idartlang,idtype,value FROM con_content ORDER BY idartlang ASC";
$result = cRegistry::getDb();
$result->query($query);
$array_detections=array();
while($result->nextRecord())
{
$array_crawler=$result->toArray();
$conversion=utf8_encode(html_entity_decode(stripslashes(mb_strtolower($array_crawler[value]))));
if(strpos(" ".$conversion,$string_search))
{
$amount_of_hits=substr_count($conversion,$string_search);
$array_detections[]=array('idartlang'=>$array_crawler[idartlang],'idtype'=>$array_crawler[idtype],'hits'=>$amount_of_hits);
}
}
/********** collecting idartlang, idtype and amount of hits end **********/
duplizieren, anpassen und als eigenen Abschnitt direkt im Anschluss anhängen.
Wichtig ist dabei, dass Du hier Doppelungen ausschließt. Heißt, entweder sofort beim Ergänzen des Arrays schauen, ob die
idartlang schon enthalten ist oder nach Erstellung des Arrays bereinigen. Bei letzterem stellt sich aber die Frage, welcher der beiden Einträge zu dem Webartikel "wertvoller" ist: Der aus der
con_content entstandene oder der aus der
con_meta_tag? -> Nimm den aus der
con_content. Was bedeutet: Sofort beim Ergänzen des Arrays schauen, ob die
idartlang schon enthalten ist.
Hinweis: Diese Kurzlösung verursacht eine Doppeldurchsuchung der
con_meta_tag. Zuerst vollständig (was Dein Problem löst aber je nach Umfang der Seite entsprechend dauert) und danach noch einmal (wie bisher) dediziert nach den Artikeln in denen der Suchbegriff bereits gefunden wurde. Den Bereich mit der (dann) zweiten Query über die
con_meta_tag kannst Du aber auch nicht einfach rauswerfen, da hier die Gewichtung mit untergebracht ist. Heißt: Es dürfte länger dauern bis Ergebnisse im Frontend erscheinen.
Das Ganze zu optimieren statt wie geschildert einfach die Lösung Deines Problems als eigenen Bereich einzuschieben, ist dann schon größerer Aufwand.