Modul Feature-Suche

Diskussion zu nicht so umfangreichen Modulen und Start-Up für neue Module. Ansonsten bitte die speziellen Kategorien benutzen!
Antworten
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Modul Feature-Suche

Beitrag von MarkusR »

Diese Idee stammt aus dem Februar
Bisher fiel mir irgendwie noch kein anderer Name dafür ein, aber es wird ein rein kommerzielles Modul, das es erlauben wird, in bestimmten Feldern nach bestimmten Inhalten zu suchen. Dies wird durch die Möglichkeit beliebige Platzhalter zu definieren ermöglicht.

Beispiel: Immobilienmarkler - Suche nach Immobilien mit Preis von/bis - Suche nach Quadratmeter- oder Zimmerzahl - Suche nach bestimmten Typen
Das im Hinterkopf habe ich einen Auftrag mit entsprechender Anforderung angenommen und habe das Modul ca. zur Hälfte fertig.

Dabei dient das Modul "Suche" als Grundlage (zumindest in der von mir vorgelegten Version, die seit Januar von balu weiterentwickelt wird).

Der Unterschied ist, daß nicht alle Felder durchsucht werden, sondern nur bestimmte.
Wenn also die Artikeldaten konsequent in verschiedene Eingabefelder verteilt werden, dann kann auch konsequent gezielt gesucht werden.

Der eigentliche Witz ist, daß die gesamte Definition über den HTML-Code des Formulares vorgenommen wird, also welche Felder durchsucht werden, wie sie durchsucht werden und dies beliebig erweiterbar ist. Durch Select-Felder kann sogar eine Auswahl von Feldern angeboten werden oder auch eine Reihe vorgefertigter Suchen angeboten werden.

Code: Alles auswählen

	<form name="suchergebnisse" class="result" method="get" action="index.php" style="display: inline;">
	<input type="hidden" name="action" value="feature_search" />
	<input type="hidden" name="rubric" value="### SEARCH_NAV ###" />
	<input type="hidden" name="results" value="AND" />
	<input type="hidden" name="sortby" value="PLZ" />
	<input type="hidden" name="sort" value="ASC" />
		<table border="0">
		<tr>
			<td><label for="p1">PLZ</label></td>
			<td>
				<input type="text" name="p1" id="p1" value="### SEARCH_PHRASE_1 ###" />
				<input type="hidden" name="sf1" value="PLZ" /><input type="hidden" name="sm1" value="LIKE '###%'" />
				</td>
		</tr>
		<tr>
			<td><label for="p2">Nachname</label></td>
			<td>
				<input type="text" name="p2" id="p2" value="### SEARCH_PHRASE_2 ###" />
				<input type="hidden" name="sf2" value="Nachname" /><input type="hidden" name="sm2" value="LIKE '###%'" />
			</td>
		</tr>
		<tr>
			<td><label for="p3">Ort</label></td>
			<td>
				<input type="text" name="p3" id="p3" value="### SEARCH_PHRASE_3 ###" />
				<input type="hidden" name="sf3" value="Ort" /><input type="hidden" name="sm3" value="LIKE '###%'" />
			</td>
		</tr>
		<tr>
			<td><label for="sp4">Rasse</label></td>
			<td>
				<select name="sp4" id="sp4">
				<option value=''>-- Bitte wählen --</option>
				<option value='Airedale Terrier'>Airedale Terrier</option>
				<option value='Australian Terrier'>Australian Terrier</option>
				<option value='Australian Silky Terrier'>Australian Silky Terrier</option>
				<option value='Bedlington Terrier'>Bedlington Terrier</option>
				<option value='Border Terrier'>Border Terrier</option>	
			etc...
Das ganze ist schwer zu beschreiben, wird aber sicher von allen, denen die Volltextsuche zu ungenau ist, schnell eingesetzt werden. Im Grunde ist es das Pendent zum neuen Platzhaltersystem, nur eben als Suchfunktion.

Ach ja: Das Modul wird als Testversion in ca. 2 Wochen zur Verfügung stehen...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Vielleicht nochmal eine praktische Anwendung (wie sie jetzt auch von mir gefordert ist):

Adressverwaltung und -suche

Nun kann man ja ganz hervorragend mit ConPresso die Eingabefelder differenziert zum Ausfüllen bereitstellen, also z.B. ein Feld für PLZ, eines für Ort, etc. und diese auch wunderschön formatiert als Artikel ausgeben.

Nur... wie sucht man nun nach einer Postleitzahl oder einem Postleitzahlbereich ohne gleich jede Telefonnummer als Ergebnis zu finden?
Und wie könnte man eine Liste nach PLZ sortieren???

mod_tables geht zwar schon einen Schritt in diese Richtung, die Daten sind aber ausschließlich als Tabelle nutzbar. Bei der Feature-Suche sind es ganz normale Artikel mit allem Drum und Dran.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Hier jetzt mal eine kleine Anleitung:

Das wichtigste für das ganze Modul ist das Formular, über das fast alles gesteuert wird.

Fangen wir mal vorne an:

Code: Alles auswählen

	<form name="suchergebnisse" class="result" method="get" action="index.php" style="display: inline;">
	<input type="hidden" name="action" value="feature_search" />
	<input type="hidden" name="rubric" value="### SEARCH_NAV ###" />
	<input type="hidden" name="results" value="AND" />
	<input type="hidden" name="sortby" value="PLZ" />
	<input type="hidden" name="sort" value="ASC" />
Hierbei ist folgendes wichtig bzw. einstellbar:
- method="get" muss eingestellt sein, weil dadurch Suchen als Link vordefiniert werden können
- Das hidden-Field action muß den Wert feature_search haben
- In das Hidden-Field rubric trägt das Modul automatisch die per URL übergebene Rubrik ein, wenn dort ### SEARCH_NAV ### eingetragen ist. Das ist wichtig für die richtige Anzeige der Navigation
- results kann den Wert "AND" annehmen. Dadurch müssen alle Angaben erfüllt werden. Wird nichts angegeben gilt automatisch "OR"
- sortby gibt an, nach welchem Platzhalter sortiert werden soll.
- sort gibt an, wie sortiert werden soll, also ASC für aufsteigend, DESC für absteigend

Anschließend folgen die Suchbegriffe.
Wichtig: Diese müssen durchgehend von 1 an nummeriert sein, aber nicht zwingend in dieser Reihenfolge im Formular vorkommen.

Code: Alles auswählen

PLZ:<input type="text" name="p1" id="p1" value="### SEARCH_PHRASE_1 ###" />
<input type="hidden" name="sf1" value="PLZ" /><input type="hidden" name="sm1" value="LIKE '###%'" /><br />
Nachname:<input type="text" name="p2" id="p2" value="### SEARCH_PHRASE_2 ###" />
<input type="hidden" name="sf2" value="Nachname" /><input type="hidden" name="sm2" value="LIKE '###%'" /><br />
...
# steht im folgenden(!) für die durchgehende Nummerierung!
Zuerst das eigentliche Eingabefeld für den Suchbegriff p# (also p1, p2, p3...) mit dem Wert ### SEARCH_PHRASE_# ###, der nach Durchführung der Suche als Vorgabe eingetragen wird.
sf# ist das Suchfeld, in dem gesucht werden soll.
sm# ist die Suchmaske, mit der die Abfrage laufen soll. In dieser steht ### für den eingegebenen Begriff. Für eine exakte Übereinstimmung wäre das value="= '###'", für eine Suche am Anfang value="LIKE '###%'", für eine Volltextsuche value="LIKE '%###%'", also die üblichen aus mySQL bekannten Abfragemöglichkeiten...

Zum Absenden natürlich noch am Ende ein

Code: Alles auswählen

<input type="submit" value="Suche"></form>
Soviel zum Formularteil im Template. Hierzu später noch Details...
Zuletzt geändert von MarkusR am 17.07.2006 19:48, insgesamt 1-mal geändert.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Der Ergebnisbereich ist grundsätzlich so definiert wie beim Such-Modul

Code: Alles auswählen

	### SEARCH_MESSAGE ###
	<br />&nbsp;<br />
	### SEARCH_MATCHES ###
<!-- START_SEARCH_MATCH -->
	<div class="morelink">### SEARCH_NUM ###.) <a href="../_rubric/detail.php?nr=### SEARCH_ARTICLE_ID ###&rubric=Z%FCchter">### SEARCH_TITLE ###</a></div>
	<div class="externallink">### SEARCH_Vorname ### ### SEARCH_Nachname ###<br />
	### SEARCH_PLZ ### ### SEARCH_Ort ###<br />
	<a href="### SEARCH_Homepage ###" target="_blank">### SEARCH_Homepage ###</a></div>
	<hr />
<!-- ENDE_SEARCH_MATCH -->
	<br />&nbsp;<br />
	### SEARCH_PAGES ###
	<br />&nbsp;<br />
	<a href="../_rubric/index.php?rubric=Z%FCchter">Alle Züchter anzeigen</a>
<!-- ENDE_MOD_SEARCH -->
### SEARCH_MESSAGE ### gibt Meldungen aus
### SEARCH_MATCHES ### gibt die Anzahl der gefundenen Treffer aus
### SEARCH_NUM ### ist eine durchgehende Nummerierung
### SEARCH_TITLE ### ist der Artikeltitel
### SEARCH_PAGES ### ist die ggf. notwendige Paginierung

aber nun kommts:
die restlichen Platzhalter im Format ### SEARCH_Platzhaltername ### stehen eben für die Platzhalter, die abgebildet werden sollen, die ja nicht unbedingt der eigentliche Suchbegriff sein müssen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Nun ein "Goodie":

Jede Benutzereingabe kann Fehlerhaft sein, daher ist eine Auswahl ggf. besser. Diese kann man vordefinieren:

Code: Alles auswählen

<select name="sp1" id="sp1">
<option value=''>-- Bitte wählen --</option>
<option value='Airedale Terrier' ### S1_Airedale Terrier ###>Airedale Terrier</option>
<option value='Australian Terrier' ### S1_Australian Terrier ###>Australian Terrier</option>
<option value='Australian Silky Terrier' ### S1_Australian Silky Terrier ###>Australian Silky Terrier</option>
...
<option value='Skye Terrier' ### S1_Skye Terrier ###>Skye Terrier</option>
<option value='Welsh Terrier' ### S1_Welsh Terrier ###>Welsh Terrier</option>
<option value='West Highland White Terrier' ### S1_West Highland White Terrier ###>West Highland White Terrier</option>
<option value='Yorkshire Terrier' ### S1_Yorkshire Terrier ###>Yorkshire Terrier</option>
</select>
<input type="hidden" name="sf1" value="" />
<input type="hidden" name="sm1" value="= '###'" />
sp1 steht für "select phrase". Der gewählte Wert wird automatisch als p1 ausgewertet.
Ist sf1 mit einem Feldnamen versehen, wird dies als zu durchsuchendes Feld benutzt. Ist der Wert leer (wi im Beispiel) wird der Wert von sp1 auch als Feldname verwendet! Wozu das? Die von mir eingeführten Checkboxen können so mittels Select-Feld problemlos angeboten werden. Es werden also viele verschiedene Felder mit gleichen aber auch mit unterschiedlichen Werten durchsucht. Und das nur mit einem(!) select-Feld!
Hierbei wird als Suchmaske sm1 der Wert "= '###'" benutzt, weil es ja durch die Vorgabe eine exakte Übereinstimmung sein kann... muss aber nicht, auch hier ist die Suchmaske freigestellt.

Und was heißt ### S1_Airedale Terrier ### ???
S1_ steht für das Select-Feld 1 und anschließend steht ein möglicher Auswahlwert.
Wird nun ein Wert gewählt, wird der entsprechende Platzhalter durch selected="selected" ersetzt. Die anderen bleiben stehen, werden aber durch den Browser ignoriert.
Solche umfangreichen Optionslisten lassen sich aus einer einfachen Textliste wunderbar mittels Excel oder auch Access mit allen notwendigen HTML-Tags versehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Und hier nun ein bis nächsten Montag gültiger Testschlüssel

MODe00011167034433c33ff13b609434

(das Modul wird nur als kommerzielle oder Test-Lizenz angeboten)

und in der Anlage das Modul selbst.

Bitte wie immer vorher ein Daten- und ein Datenbank-Backup machen.

Das Modul läuft bei mir bestens, ist aber offiziell absolute Beta-Version!
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
mkd
ConPresso-Checker
Beiträge: 114
Registriert: 01.01.1970 01:00
Hat sich bedankt: 1 Mal

Beitrag von mkd »

habe mal ne Frage gibt es na art if abfrage wie in den Templates?
Hab ein paar angaben die auf der ergebiss Seite erscheinen sollen aber nicht immer vorhanden sind, wie z.b. ein Logo
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Nein.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
mkd
ConPresso-Checker
Beiträge: 114
Registriert: 01.01.1970 01:00
Hat sich bedankt: 1 Mal

Beitrag von mkd »

ok, habe ne andere lösung gefunden, ich habe aber mal den script um die bild anzeige erweitert, da ich ja auf der ergebniss seite die logos sehen will.
Benutzeravatar
Eichi
ConPresso-Checker
Beiträge: 133
Registriert: 17.08.2005 13:14
Hat sich bedankt: 24 Mal
Danksagung erhalten: 8 Mal
Kontaktdaten:

Beitrag von Eichi »

Guten Morgen Markus,

ich bin gerade dabei eine Suche für Leerwohnungen zu basteln. Da jedoch die Anforderungen der Chefs höher sind als das was die normale Suche zu stande bringt, bin ich auf dein Modul gestoßen. Ich wollte die ganze Sache jetzt testen und dann vorführen, leider ist die Lizenz weiter oben schon abgelaufen. Wäre es möglich mir eine neue Testlizenz auszustellen ? :)
Markus R hat geschrieben:aber nun kommts:
die restlichen Platzhalter im Format ### SEARCH_Platzhaltername ### stehen eben für die Platzhalter, die abgebildet werden sollen, die ja nicht unbedingt der eigentliche Suchbegriff sein müssen.


Ansonsten denke ich das dein Modul genau das ist, was ich hier brauche.

mfg Eichi
pixel&leben - Er fand einen neuen Kunstbegriff - damals, als er Kunst begriff.
Benutzeravatar
Eichi
ConPresso-Checker
Beiträge: 133
Registriert: 17.08.2005 13:14
Hat sich bedankt: 24 Mal
Danksagung erhalten: 8 Mal
Kontaktdaten:

Beitrag von Eichi »

Kurze Frage: Kann man die Suche auch in den _local_header.php von einer Rubrik einbinden?

Meine ersten Versuche waren weniger Erfolgreich, das hat aber nicht unbedingt was zu sagen. 8) Ansonsten würde es wie gewünscht funzen ...
pixel&leben - Er fand einen neuen Kunstbegriff - damals, als er Kunst begriff.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Du kannst eine Kopie von index.php als index_php.php abspeichern und dort alle Vorkommen von "loadheaders" und loadfooters" auskommentieren.
Diese kann man dann in einer anderen Rubrik per include im header oder footer einbinden ohne daß man diese plötzlich doppelt hat.

Und natürlich kannst Du auch einfach nur den HTML-Code des Suchformulars an einer beliebigen Stelle einbinden und die Ausgabe eben im Modulverzeichnis durchführen lassen...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Eichi
ConPresso-Checker
Beiträge: 133
Registriert: 17.08.2005 13:14
Hat sich bedankt: 24 Mal
Danksagung erhalten: 8 Mal
Kontaktdaten:

Beitrag von Eichi »

So, bin jetzt erst dazu gekommen das zu probieren, jedoch komm ich noch nicht sehr weit. Könnte am fehlenden Kaffee liegen. :roll:
Markus R hat geschrieben:Und natürlich kannst Du auch einfach nur den HTML-Code des Suchformulars an einer beliebigen Stelle einbinden
Das hatte ich schon probiert, leider hat man dann keinen Sucherfolg. Ich meine die Webseite kann ja auch nichts mit den vielen Platzhaltern anfangen.
Markus R hat geschrieben:Du kannst eine Kopie von index.php als index_php.php abspeichern und dort alle Vorkommen von "loadheaders" und loadfooters" auskommentieren.
Hier bekomm ich einfach nur eine Fehlermeldung, entweder hab ich zuviel oder zu wenig auskommentiert:

Code: Alles auswählen

define('CPO', true);
require_once('../_include/common.inc.php');
$directory = basename(dirname($_SERVER['PHP_SELF']));

require(CPO_BASEDIR.'_include/var_category.php');
require(CPO_BASEDIR.'_include/secure.php');

// the includes ***********************************************************************************
require_once(CPO_BASEDIR.$directory.'/includes/inc_search_function.inc.php');
include_once(CPO_BASEDIR.$directory.'/includes/actions.inc.php');
// include(CPO_BASEDIR.$directory.'/loadheaders.php');

if (!array_key_exists($directory, $activeModules)) {
   echo ___('The search is currently disabled.');
//    include(CPO_BASEDIR.$directory.'/loadfooters.php');
    return;
}

if (license($activeModules[$directory]['lkey'],17)!=1 && license($activeModules[$directory]['lkey'],17)!=3) {
    echo ___('The feature search is currently disabled due to missing license.');
//    include(CPO_BASEDIR.$directory.'/loadfooters.php');
   return;
}

$zusatzurl = '';
foreach ($_REQUEST as $key=>$value)
{
	if ($key == 'pos') continue;
	$zusatzurl .= $key.'='.urlencode($value).'&';
}

$pagination = string_next_page($_REQUEST['pos'], count($results), $noOfResults, true, $zusatzurl, '', $tl);

include(CPO_BASEDIR.$directory.'/includes/parser.inc.php');

// include(CPO_BASEDIR.$directory.'/loadfooters.php');
?>
Fehlermeldung ist dann diese hier:
Warning: main(/www/htdocs/w00770b5/domain.de/wohnungsangebote/includes/inc_search_function.inc.php) [function.main]: failed to open stream: No such file or directory in /www/htdocs/w00770b5/domain.de/mod_feature_search/index_php.php on line 37

Fatal error: main() [function.require]: Failed opening required '/www/htdocs/w00770b5/domain.de/wohnungsangebote/includes/inc_search_function.inc.php' (include_path='.:/usr/share/php:..') in /www/htdocs/w00770b5/domain.de/mod_feature_search/index_php.php on line 37
domain.de wurde von mir verfremdet ...
pixel&leben - Er fand einen neuen Kunstbegriff - damals, als er Kunst begriff.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Eichi hat geschrieben:Das hatte ich schon probiert, leider hat man dann keinen Sucherfolg. Ich meine die Webseite kann ja auch nichts mit den vielen Platzhaltern anfangen.
Hä?

Welche Platzhalter?

Rufe doch einfach mal die index-Seite des Moduls auf und kopiere aus dem Quelltext (nicht Quellcode, nicht Backendtemplate) alles von <form ...> bis </form> and die gewünschte Stelle im Header.
Da sind eher keine Platzhalter drin, da diese ja erst für die Ausgabe auf der index-Seite benötigt werden...

Wenn das nicht klappt poste diesen Teil doch mal hier...

Das mit der index_php.php verfolgen wir dann weiter, wenn HTML auf Webseiten wirklich nicht mehr funktionieren sollte :wink:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Eichi
ConPresso-Checker
Beiträge: 133
Registriert: 17.08.2005 13:14
Hat sich bedankt: 24 Mal
Danksagung erhalten: 8 Mal
Kontaktdaten:

Beitrag von Eichi »

*omfg* :wall:

Ich hatte den Quellcode aus dem Backend benutzt, dabei wäre es anders viel einfacher gewesen. Mit Platzhaltern meinte ich zB ### S1_1-Raum ### etc. Die sind jetzt aber nur im <option> enthalten bzw. zu sehen. Kann ich die entfernen ?

Aber danke für den tritt in die richtige Richtung. Mein Motto war einmal mehr: "Warum einfach wenn es auch kompliziert geht?" :roll: Ich werd das jetzt so vorführen und dir dann die Rechnungsdaten zukommen lassen.
pixel&leben - Er fand einen neuen Kunstbegriff - damals, als er Kunst begriff.
Antworten