Modul Feature-Suche

Diskussion zu nicht so umfangreichen Modulen und Start-Up für neue Module. Ansonsten bitte die speziellen Kategorien benutzen!
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Ich hätte noch eine kleine Frage:

Wie bereits weiter oben (von MarkusR) erwähnt, kann man die Suchergebnisse sehr schön ausgeben lassen, sodass sie weitgehend dem originalen Artikel entsprechen, aber die Suchtreffer werden eben nicht geparst.

Da es in meinen Artikeln Teile gibt, die eben doch geparst werden müssten, wollte ich einfach einen link zum originalen Artikel einbauen (der ja auch schon in der Vorlage des Moduls enthalten ist), was auch funktioniert, nur verschwindet auf der Detailseite dann leider die Suche...

Ich habe schon versucht, etwas mit

Code: Alles auswählen

$pagetype == "index"
zu tricksen, hat aber nicht funktioniert :oops:

Gibt es hierfür eine Lösung?

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Zum Verständnis:

Du leitest mit dem Link zur Detailseite ja auf das Rubrikverzeichnis, daher wird auch dort wie gehabt die Detailseite ausgegeben.

Oder hast Du den Link so zurechtbastelt, dass er auf die detail.php des Modulverzeichnisses verlinkt?

Dann könnte man die detail.php so umbauen, dass sie wie die index.php funktioniert.

Falls Du CPO 4.1.6 benutzt könnte man auch versuchen im Modul statt des Modulparsers den CPO-Parser zu benutzen. Da dieser aber für tabellarische Darstellungen nicht so geeignet ist habe ich den Modulparser entwickelt. Dann darf auch die Anzahl der Suchergebnisse pro Seite nicht zu groß sein, weil der Server in die Knie geht.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Bei mir ist das Modulverzeichnis das Rubrikverzeichnis. Der Link geht also zur detail.php des Modulverzeichnisses.

Wie müsste ich denn die detail.php anpassen, dass sie wie die index.php die Suchfunktion ebenfalls ausgibt?

Ich habe einfach mal ganz dreist den Teil hier in die detail.php hineinkopiert:

Code: Alles auswählen

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

ob_start();
if (
	(!array_key_exists($directory, $activeModules)) || 
	(license($activeModules[$directory]['lkey'],$activeModules[$directory]['mod_id'])!=1 && license($activeModules[$directory]['lkey'],$activeModules[$directory]['mod_id'])!=3)
	) {
    $message[] = ___('The form is currently disabled.');
	include(CPO_BASEDIR.'_include/message.php');
} else {
	if (
			( $activeModules[$directory]['hideArticles'] == "no" && $activeModules[$directory]['showArticles'] == "before" ) ||
			( $_REQUEST['action'] != 'feature_search' && $cpoRubric['id'] && $activeModules[$directory]['showArticles'] == "before" )
		) require(CPO_BASEDIR.'_includesite/i_index.php');

	$zusatzurl = '';
	foreach ($_REQUEST as $key=>$value)
	{
		if ($key == session_name()) continue;
		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');

	if (
			( $activeModules[$directory]['hideArticles'] == "no" && $activeModules[$directory]['showArticles'] == "after" ) ||
			( $_REQUEST['action'] != 'feature_search' && $cpoRubric['id'] && $activeModules[$directory]['showArticles'] == "after" )
		) require(CPO_BASEDIR.'_includesite/i_index.php');
}
$showForm = ob_get_clean();
Aber leider geht das wohl nicht so... :lol:

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Wenn Du Header und Footer benutzt fehlt jetzt noch

Code: Alles auswählen

    include(CPO_BASEDIR.$directory.'/loadheaders.php');
    echo $showForm;
    require(CPO_BASEDIR.'_includesite/i_detail.php');
    include(CPO_BASEDIR.$directory.'/loadfooters.php');
Ist aber nur Theorie...
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Die Zeilen waren eigentlich schon mit drin. Das hier ist meine ganze detail.php:

Code: Alles auswählen

<?php /* _\|/_              vim: set et ts=4 sw=4 sts=4 nowrap fdm=marker:
         (o o)                         
+-----oOO-{_}-OOo--------------------------------------------------------+
| ConPresso - Foolproof Content Management                               |
+------------------------------------------------------------------------+
| Copyright (c) Bartels Schoene GmbH & Co. KG, 48149 Muenster, Germany   |
+------------------------------------------------------------------------+
| This source file is subject to ConPresso license version 2002-11-16    |
| that is bundled with this package in the files LICENSE_EN.TXT or       |
| LICENSE_DE.TXT, and is available through the world-wide-web at         |
|     http://www.conpresso.de/license/LICENSE_EN-2002-11-16.TXT or       |
|     http://www.conpresso.de/license/LICENSE_DE-2002-11-16.TXT          |
|                                                                        |
| If you did not receive a copy of the ConPresso license and are unable  |
| to obtain it through the world-wide-web, please send a note to         |
| <license@conpresso.de> so we can e-mail you a copy immediately.        |
+------------------------------------------------------------------------+
| Authors: ConPresso development and support team <support@conpresso.de> |
+------------------------------------------------------------------------+
  $Id$ */
define('CPO', true);
require_once('../_include/common.inc.php');

$pagetype = 'detail';
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');

ob_start();
if (
	(!array_key_exists($directory, $activeModules)) || 
	(license($activeModules[$directory]['lkey'],$activeModules[$directory]['mod_id'])!=1 && license($activeModules[$directory]['lkey'],$activeModules[$directory]['mod_id'])!=3)
	) {
    $message[] = ___('The form is currently disabled.');
	include(CPO_BASEDIR.'_include/message.php');
} else {
	if (
			( $activeModules[$directory]['hideArticles'] == "no" && $activeModules[$directory]['showArticles'] == "before" ) ||
			( $_REQUEST['action'] != 'feature_search' && $cpoRubric['id'] && $activeModules[$directory]['showArticles'] == "before" )
		) require(CPO_BASEDIR.'_includesite/i_index.php');

	$zusatzurl = '';
	foreach ($_REQUEST as $key=>$value)
	{
		if ($key == session_name()) continue;
		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');

	if (
			( $activeModules[$directory]['hideArticles'] == "no" && $activeModules[$directory]['showArticles'] == "after" ) ||
			( $_REQUEST['action'] != 'feature_search' && $cpoRubric['id'] && $activeModules[$directory]['showArticles'] == "after" )
		) require(CPO_BASEDIR.'_includesite/i_index.php');
}
$showForm = ob_get_clean();

// header and footer mechanism
if ($cpoRubricSettings['pagetemplate_'.$pagetype]==0) {
    include(CPO_BASEDIR.$directory.'/loadheaders.php');
    require(CPO_BASEDIR.'_includesite/i_detail.php');
    include(CPO_BASEDIR.$directory.'/loadfooters.php');
    exit;
}

// fetch pagetemplate from database and build page
$db = new DB;
$db->query('SELECT pagetemplate FROM '.CPO_PAGETEMPLATES.' '
    .'WHERE id='.(int)$cpoRubricSettings['pagetemplate_'.$pagetype].' '
);
$db->next_record();
$pageTemplate = $db->v('pagetemplate');
require CPO_BASEDIR.'_include/buildpage.inc.php';
Ich habe es dann auchg nochmal ohne die if-Anweisung versucht, also so:

Code: Alles auswählen


// header and footer mechanism

    include(CPO_BASEDIR.$directory.'/loadheaders.php');
    require(CPO_BASEDIR.'_includesite/i_detail.php');
    include(CPO_BASEDIR.$directory.'/loadfooters.php');

Aber das hilft auch nicht...

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Warum sind bei Dir nur drei Zeilen von den vier Zeilen? :gruebel: :rofl:
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

... wohl zu viel am Computer gesessen heute :wall:

Damit wäre jetzt also (natürlich!) das Suchform auch in de detail.php vorhanden :lol:

Leider werden dort jetzt aber alle Artikel ausgegeben (halt wie in der index.php) und am Ende dann nochmal der gewünschte Artikel...
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Ich glaube jetzt hab ich es geschafft!

Habe noch das Folgende weggelassen:

Code: Alles auswählen

if (
			( $activeModules[$directory]['hideArticles'] == "no" && $activeModules[$directory]['showArticles'] == "after" ) ||
			( $_REQUEST['action'] != 'feature_search' && $cpoRubric['id'] && $activeModules[$directory]['showArticles'] == "after" )
		) require(CPO_BASEDIR.'_includesite/i_index.php');
Jetzt wird alles wir gewünscht ausgegeben!


Danke für die Hilfe, Markus!! :)

Gruß,
dutch
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Ich komme doch nochmal auf eine Frage von mir von weiter oben zurück, da der Kunde es eben doch gerne so hätte...

Es geht darum, dass ich (wie oben erwähnt) eigentlich die Volltextsuche von mod_search (also über alle Felder) mit den Ausgabemöglichkeiten von mod_feature_search kombinieren würde.

MarkusR hatte bereits dazu geschrieben:
MarkusR hat geschrieben:Im Grunde geht es ja darum nach spezifischen Informationen in einem spezifischen Feld zu suchen.
Will man mit dem gleichen Suchbegriff in mehreren Feldern suchen, dann müsste man ihn theoretisch entweder beim Absenden in die anderen Felder übernehmen (JavaScript) oder vor Beginn der Suche die Parameter gleichsetzen (PHP z.B. in actions.inc.php).
Mit konkreten Angaben kann man das konkretisieren.

Für die unspezifische Suche ist ja mod_search gedacht.
Ich würde also gerne probieren die actions.inc.php anzupassen.
Habe es mir auch angeschaut aber... öh... :shock: :oops: wo anfangen?

Ich habe in den Artikeln (momentan) 5 Textfelder, die alle mit dem gleichen Suchbegriff durchsucht werden sollen.

Ich nehme an, die Antwort steckt irgendwo hierin verborgen?

Code: Alles auswählen

for ($z=1;$z<=100;$z++)  {
		if (!array_key_exists('p'.$z,$_REQUEST) && !array_key_exists('sv'.$z,$_REQUEST) && !array_key_exists('sf'.$z,$_REQUEST) && !array_key_exists('sp'.$z,$_REQUEST)) continue;
		if (array_key_exists('sp'.$z,$_REQUEST))
		{
			$_REQUEST['p'.$z] = $_REQUEST['sp'.$z];
			$selects[$z] = $_REQUEST['sp'.$z];
		}
		// die Suchfelder vorbereiten, um später zu prüfen, ob auch jedes gefüllte Feld berücksichtigt wurde
		if ($_REQUEST['p'.$z] != '' && $_REQUEST['sf'.$z] != '') $searchFields[$_REQUEST['sf'.$z]]=Array();
		if ($_REQUEST['p'.$z] != '' && $_REQUEST['sv'.$z] != '') $searchFields['value']=Array();
		// für Select und Optionsfelder bei denen sf=p sein soll!
		if ($_REQUEST['sf'.$z] == '' || (!isset($_REQUEST['sf'.$z]) && !isset($_REQUEST['sv'.$z]))) 
		{
			$_REQUEST['sf'.$z] = $_REQUEST['p'.$z];
			if ($_REQUEST['p'.$z] != '' && !isset($_REQUEST['sv'.$z])) $searchFields[$_REQUEST['sf'.$z]]=Array();
		}
//		$z++;
	}

An welchen Zeilen müsste ich denn schrauben? :roll:

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Wenn dann passiert das in der Zeile vor der for-Schleife oder nach

Code: Alles auswählen

if ($_REQUEST['action'] == 'feature_search')  {
Du hast also fünf Felder, nennen wir sie Feld1 bis Feld5.
Und Du hast ein Suchbegriff, der in das Feld p1 eingetragen wird.

Ich weiß jetzt natürlich nicht was Du schon über das Formular an Parametern übergibst, daher definiere ich sie mal alle.

Dann setzt Du vor die Schleife:

Code: Alles auswählen

$_REQUEST['sf1'] = 'Feld1';
$_REQUEST['sf2'] = 'Feld2';
$_REQUEST['sf3'] = 'Feld3';
$_REQUEST['sf4'] = 'Feld4';
$_REQUEST['sf5'] = 'Feld5';
$_REQUEST['p2'] = $_REQUEST['p1'];
$_REQUEST['p3'] = $_REQUEST['p1'];
$_REQUEST['p4'] = $_REQUEST['p1'];
$_REQUEST['p5'] = $_REQUEST['p1'];
So wird in allen fünf Feldern nach dem Wert von p1 gesucht.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Markus,

danke für den Code.

Ich habe es gerade getestet, aber leider wird damit nichts gefunden...
Im Modul-template habe ich es erst mit nur einem Eingabefeld (p1) versucht und anschließend noch einmal mit allen 5 Eingabefeldern. Aber leider wird nichts gefunden...
Ich sehe zwar, dass der Suchbegriff, der in p1 eingetragen wird, in die anderen 4 Suchfelder übernommen wird, aber die Suche liefert eben keine Ergebnisse.

Das Suchfeld im Modutemplate (bei nur einem Eingabefeld) sieht bei mir so aus:

Code: Alles auswählen

<tr>
    <td><label for="p1">Suche</label><br>
      <input type="text" name="p1" id="p1" value="### SEARCH_PHRASE_1 ###" />
      <input type="hidden" name="sf1" value="Feld1" />
    </td>
  </tr>
Der Feldname 'Feld1' stimmt natürlich mit dem entsprechenden Template-Feldnamen überein.

Wenn ich es ohne deine Codeerweiterung teste, funktionieren alle 5 Suchfelder. Die Suchfelder scheinen also wohl ok zu sein.

Woran könnte es noch liegen? :roll:

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Hast Du die Suchmethode auf AND oder OR?
(siehe geheim gehaltener Teil Deines Formulars)
Default ist eigentlich OR wenn man nichts angibt.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Habe nichts daran geändert, also OR.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Wenn Du NICHTS geändert hast steht in Deinem Template folgendes:

Code: Alles auswählen

<input type="hidden" name="results" value="AND" />
Nur wenn NICHTS angegeben ist gilt OR.

Und das Standardmuster steht noch auf "LIKE '%###%'"?
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hahaha!
Ich weiß schon, warum ich kein Programmierer geworden bin :lol:

Also: Ich habe nichts geändert, darum stand es bei mir natürlich (noch) wie folgt:

Code: Alles auswählen

 <input type="hidden" name="results" value="AND" />
Habe ich also geändert auf 'OR' und funzt!

Vielen Dank mal wieder!!

Und noch meine - wenn auch stark verspäteten - Komplimente zum mod_feature_search. Tolles Teil!

Gruß,
dutch