Standardisierte Einträge mithilfe eines Pulldowns

Gesperrt
casi1969
Beiträge: 71
Registriert: Mi 4. Aug 2004, 16:30
Wohnort: Köln
Kontaktdaten:

Standardisierte Einträge mithilfe eines Pulldowns

Beitrag von casi1969 »

Hallo,

wir haben eine Modul entwickelt, mit dem man standardisierte Einträge mithilfe eines Pulldowns vornehmen kann.

Input:

Code: Alles auswählen

$selected = "CMS_VALUE[0]";
$if[0]= "1. Den Körper wahrnehmen und Bewegungsfähigkeiten ausprägen";
$if[1]= "2. Das Spielen entdecken und Spielräume nutzen";
$if[2]= "3. Laufen, Springen, Werfen - Leichtathletik";
$if[3]= "4. Bewegen im Wasser - Schwimmen";
$if[4]= "5. Bewegen an Geräten - Turnen";
$if[5]= "6. Gestalten, Tanzen, Darstellen - Gymnastik/Tanz, Bewegungskünste";
$if[6]= "7. Spielen in und mit Regelstrukturen - Sportspiele";
$if[7]= "8. Gleiten, Fahren, Rollen - Rollsport, Bootssport, Wintersport";
$if[8]= "9. Ringen und Kämpfen - Zweikampfsport";
$if[9]= "10. Wissen erwerben und Sport begreifen";
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">\n".
"<tr>\n".
"<td>Inhaltsbereich:</td>\n".
"<td align=\"left\">\n".
"<select name=\"CMS_VAR[0]\" size=\"1\">";
foreach ($if as $wert)
{
    if ($wert== $selected) 
       echo "<option value=\"$wert\" selected>$wert</option>";
    else
       echo "<option value=\"$wert\">$wert</option>";
}
echo "</select>";       
echo "</td></tr></table>";  

Output:

Code: Alles auswählen

<?php
$wert= "CMS_VALUE[0]";
echo "<p class=\"inhalt\">$wert</p>";
?>

Das funktioniert auch soweit ganz gut. In der Konfiguration kann man einen Inhaltsbereich auswählen und der wird auf der Webseite wie gewünscht angezeigt.

Auch die Suche von Andreas Lindner haben wir etwas erweitert.

Sucheingabe
Output:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      Sucheingabe
* Author(s)   :     Andreas Lindner
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     09.08.2005
* Modified    :     11.03.2006  Markus Wilmsmeyer
************************************************/

#Includes
cInclude('classes', 'class.template.php');

#Settings
$template = 'sucheingabe2.html';
$cApiClient = new cApiClient($client);
$selected = $cApiClient->getProperty("search","resultpage");

if ( !is_object($tpl) ) {
    $tpl = new Template;
}
$tpl->reset();

$url = $sess->url("front_content.php?idcat=".$selected);

if($_POST['searchterm1']!=''){
	$searchterm1 = $_POST['searchterm1'];
}else{
	$searchterm1 = $_GET['searchterm1'];
}

if($_POST['searchterm2']!=''){
	$searchterm2 = $_POST['searchterm2'];
}else{
	$searchterm2 = $_GET['searchterm2'];
}

if($_POST['searchterm3']!=''){
	$searchterm3 = $_POST['searchterm3'];
}else{
	$searchterm3 = $_GET['searchterm3'];
}

if($_POST['searchterm4']!=''){
	$searchterm4 = $_POST['searchterm4'];
}else{
	$searchterm4 = $_GET['searchterm4'];
}


$tpl->set('s', 'SEARCH_TITLE', mi18n("Stellen Sie Ihr Suchraster ein"));	
$tpl->set('s', 'SEARCH_URL', $url);	
$tpl->set('s', 'SEARCH_START', mi18n("Suche starten"));	

$tpl->generate('templates/'.$template);

?>

Suchausgabe
Output:

Code: Alles auswählen

<?php
/***********************************************
* Suchausgabe Output
*
* Author      :     Willi Man
* Copyright   :     four for business AG
* Created     :     05-04-2004
* Modified    :     12-07-2005, Andreas Lindner
* Modified    :     20-01-2006, Carsten Peters
* Modified    :     20-03-2006, Markus Wilmsmeyer
************************************************/

#System properties in use:
#Type: searchrange, Name: include
#Contains comma-separated list of cats to be included into search (sub-cats are included automatically)

#Logical combination of search terms with AND or OR

#Includes
cInclude('classes', 'class.search.php');
cInclude('classes', 'class.artspec.php');
cInclude('classes', 'class.template.php');
cInclude('includes', 'functions.api.string.php');
cInclude("frontend", "includes/functions.navigation.php");
cInclude('classes', 'class.article.php');
cInclude('classes', 'contenido/class.client.php');


#Initiliaze template object
if (!is_object($tpl)) {
	$tpl = new Template;
}
$tpl->reset();

#Settings
$oArticleProp = new Article_Property(& $db, & $cfg);
$iArtspecReference = 2;

$cApiClient = new cApiClient($client);
$sSearchRange = $cApiClient->getProperty('searchrange', 'include');
$aSearchRange = explode(',', $sSearchRange);

#Multilingual settings
$sYourSearchFor = mi18n("Ihre Suche nach");
$sMore = mi18n("weiter");
$searchterm = "";
$add = "";
#Get search term and pre-process it
if ( !empty($_GET['searchterm1'])) {
        $searchterm = $_GET['searchterm1'];
        $add = " + ";
}
elseif ( !empty($_POST['searchterm1'])) {
	$searchterm = $_POST['searchterm1'];
        $add = " + ";
}

if ( !empty($_GET['searchterm2']) ) {
	$searchterm = $searchterm."$add".$_GET['searchterm2'];
        $add = " + ";
}
elseif ( !empty($_POST['searchterm2']) ) {
	$searchterm = $searchterm."$add".$_POST['searchterm2'];
        $add = " + ";
}

if ( !empty($_GET['searchterm3']) ) {

	$searchterm =$searchterm."$add".$_GET['searchterm3'];
        $add = " + ";
}
elseif (!empty($_POST['searchterm3'])) {
	$searchterm = $searchterm."$add".$_POST['searchterm3'];
        $add = " + ";
}

if ( !empty($_GET['searchterm4']) ) {
	$searchterm = $searchterm."$add".$_GET['searchterm4'];
        $add = " + ";
}

elseif ( !empty($_POST['searchterm4']) ) {
	$searchterm = $searchterm."$add".$_POST['searchterm4'];
        $add = " + ";
}

$searchterm = str_replace(' + ', ' AND ', $searchterm);
$searchterm = str_replace(' - ', ' NOT ', $searchterm);
$searchtermdisplay = $searchterm;

#Get all article specs
$sql = "SELECT
		idartspec, artspec
	FROM
		".$cfg['tab']['art_spec']."
	WHERE
		client=$client AND
		lang=$lang AND
		online=1";

$db->query($sql);
$rows = $db->num_rows();
$aArtspecOnline = array ();
$aArtSpecs = array ();
$c = 1;
$d = 1;
$e = 1;
while ($db->next_record()) {
	$aArtSpecs[] = $db->f('idartspec');
}
$aArtSpecs[] = 0;

$action = $sess->url('front_content.php');

if (strlen(trim($searchterm)) > 0) {

	#Parse search term and set search options
	$searchterm = html_entity_decode($searchterm);

	if (stristr($searchterm, ' or ') === FALSE) {
		$combine = 'and';
	} else {
		$combine = 'or';
	}
	$searchterm = str_replace(' and ', ' ', strtolower($searchterm));
	$searchterm = str_replace(' or ', ' ', strtolower($searchterm));

		$options = array ('db' => 'regexp', // use db function regexp
		'combine' => $combine, // combine searchterms with and
		'exclude' => false, // => searchrange specified in 'cat_tree', 'categories' and 'articles' is excluded, otherwise included (exclusive)
		'cat_tree' => $aSearchRange, // searchrange 
		'artspecs' => $aArtSpecs, // array of article specifications => search only articles with these artspecs
	'protected' => true); // => do not search articles or articles in categories which are offline or protected

	$search = new Search($options);

	$cms_options = array ("head", "html", "htmlhead", "htmltext", "text"); // search only in these cms-types
//	$cms_options = array ();
$search->setCmsOptions($cms_options);

	#Execute search
	$aSearchResults = $search->searchIndex($searchterm, ''); 

	#Build results page
	if (count($aSearchResults) > 0) {
		$tpl->set('s', 'result_page', mi18n("Ergebnis-Seite").':');

		#Build meessage
		$message = $sYourSearchFor." '".htmlspecialchars(strip_tags($searchtermdisplay))."' ".mi18n("hat $$$ Treffer ergeben").":";
		$message = str_replace('$$$', count($aSearchResults), $message);
		$tpl->set('s', 'MESSAGE', $message);

		#Number of results per page
		$number_of_results = 10;
		$oSearchResults = new SearchResult($aSearchResults, $number_of_results);

		$num_res = $oSearchResults->getNumberOfResults() + $pdf_count;
		$num_pages = $oSearchResults->getNumberOfPages();
		$oSearchResults->setReplacement('<strong>', '</strong>'); // html-tags to emphasize the located searchterms

		#Get current result page
		if (isset ($_GET['page']) AND is_numeric($_GET['page']) AND $_GET['page'] > 0) {
			$page = $_GET['page'];
			$res_page = $oSearchResults->getSearchResultPage($page);
		} else {
			$page = 1;
			$res_page = $oSearchResults->getSearchResultPage($page);
		}

		#Build links to other result pages
		for ($i = 1; $i <= $num_pages; $i ++) {
			$nextlink = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$i.$sArtSpecs);
			if ($i == $page) {
				$nextlinks .= '<nobr>&nbsp<strong>'.$i.'</strong>&nbsp;</nobr>';
			} else {
				$nextlinks .= '<nobr>&nbsp;<a href="'.$nextlink.'" title="'.$i.'. '.mi18n("Ergebnisseite anzeigen").'">'.$i.'</a>&nbsp;</nobr>';
			}
		}
		$tpl->set('s', 'PAGES', $nextlinks);

		#Build link to next result page
		if ($page < $num_pages) {
			$n = $page +1;
			$next = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$n.$sArtSpecs);
			$nextpage .= '&nbsp;<a href="'.$next.'" title="'.mi18n("nächste Ergebnisseite anzeigen").'">'.mi18n("vor").' ></a>';
			$tpl->set('s', 'NEXT', $nextpage);
		} else {
			$tpl->set('s', 'NEXT', '');
		}

		#Build link to previous result page
		if ($page > 1) {
			$p = $page -1;
			//$pre = $sess->url('index-c-'.$idcat.'-'.$p.'-0.html');
			$pre = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$p.$sArtSpecs);
			$prevpage .= '<a href="'.$pre.'" title="'.mi18n("vorherige Ergebnisseite anzeigen").'">< '.mi18n("zurück").'</a>&nbsp;';
			$tpl->set('s', 'PREV', $prevpage);
		} else {
			$tpl->set('s', 'PREV', '');
		}

		if (count($res_page) > 0) {
			$i = 1;
			#Build single search result on result page
			foreach ($res_page as $key => $val) {
				$num = $i + (($page -1) * $number_of_results);
				$oArt = new Article($key, $client, $lang);
				#Get publishing date of article
				$pub_system = $oArt->getField('published');
				$pub_user = trim(strip_tags($oArt->getContent('HEAD', 90)));
				if ($pub_user != '') {
					$show_pub_date = "[".$pub_user."]";
				} else {
					$show_pub_date = '';
					if ($pub_system[8] != '0') {
						$show_pub_date .= $pub_system[8];
					}
					$show_pub_date .= $pub_system[9].'.';
					if ($pub_system[5] != '0') {
						$show_pub_date .= $pub_system[5];
					}
					$show_pub_date .= $pub_system[6].".".$pub_system[0].$pub_system[1].$pub_system[2].$pub_system[3]."]";
					$show_pub_date = "[".$show_pub_date;
				}
			
				#Get text and headline of current article
				$iCurrentArtSpec = $oArticleProp->getArticleSpecification($key, $lang);
				$aHeadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 1);
				$aSubheadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 2);
				$text = $oSearchResults->getSearchContent($key, 'HTML', 1);
				$text = capiStrTrimAfterWord($text[0], 200);
				$headline = capiStrTrimAfterWord($aHeadline[0], 200); # conflict with capiStrTrimAfterWord and setReplacement('<strong>', '</strong>')
				$subheadline = capiStrTrimAfterWord($aSubheadline[0], 200);

				$cat_id = $oSearchResults->getArtCat($key);
				$sCatName = getCategoryName($cat_id, & $db);
				$similarity = $oSearchResults->getSimilarity($key);

				ob_start();
				printf("%.0f", $similarity);
				$similarity = ob_get_contents();
				ob_end_clean();

				#Send output to template
				$href = $sess->url("front_content.php?idcat=$cat_id&idart=$key");
				$tpl->set('d', 'more', $sMore);
				$tpl->set('d', 'HREF', $href);
				$tpl->set('d', 'TITLE', mi18n("Link zu Suchergebnis").' '.$i);
				$tpl->set('d', 'NUM', $num);
				$tpl->set('d', 'CATNAME', $headline);
				$tpl->set('d', 'HEADLINE', $text);
				$tpl->set('d', 'SUBHEADLINE', $subheadline);
				$tpl->set('d', 'SIMILARITY', $similarity);
				$tpl->set('d', 'TARGET', '_self');
				$tpl->set('d', 'PUB_DATE', $show_pub_date);
				$tpl->next();
				$i ++;

			}
			$tpl->generate('templates/suchausgabe.html');
		}
	} else {
		#No results
		$tpl->set('s', 'MESSAGE', $sYourSearchFor." '".htmlspecialchars(strip_tags($searchtermdisplay))."' ".mi18n("hat leider keine Treffer ergeben").".");
		$tpl->set('s', 'NEXT', '');
		$tpl->set('s', 'PREV', '');
		$tpl->set('s', 'PAGES', '');
		$tpl->set('s', 'result_page', '');
		$tpl->generate('templates/suchausgabe.html');
	}

}

class Article_Property {
	var $globalConfig;
	var $oDBInstance;

	/**
	 * Constructor
	 * Hint: Call constructor with Article_Property(&$db, &$cfg);
	 * @param  oDBInstance instance of class DB_Contenido
	 * @param  globalConfig 
	 */
	function Article_Property($oDBInstance, $globalConfig) {
		$this->globalConfig = $globalConfig;
		$this->oDBInstance = $oDBInstance;
	}

	/**
	 * Get specification of an article
	 * 
	 * @param  	$iArticleId
	 * @return  id of article specification 
	 */
	function getArticleSpecification($iArticleId, $iLangId) {

		$sqlString = "   
			  		SELECT 
		            	artspec
		            FROM 
		            	".$this->globalConfig['tab']['art_lang']."
		            WHERE
		            	idart = '".$iArticleId."' AND
						idlang = '".$iLangId."'
		            ";

		#echo "<pre>$sqlString</pre>";
		$this->oDBInstance->query($sqlString);

		if ($this->oDBInstance->next_record()) {
			return $this->oDBInstance->f('artspec');
		} else {
			return false;
		}
	}
}
?> 

Das Problem besteht darin, dass die über das obere Modul eingetragenen Inhaltsbereiche nicht gefunden werden. Ein Blick in die Tabelle "con_keywords" zeigt, dass die eingetragenen Inhaltsbereiche dort auch nicht indexiert sind.

Wie kommt man zu einer funktionierenden Suche?

Wir benutzen Contenido 4.6.8 mit PHP 4.3.11
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Falls Du eine Contenido-Version kleiner als 4.6.8.5 einsetzt, solltest du auf diese Community-Version 4.6.8.5 updaten.

Ansonsten auf die neue Version warten, da wird mehr indiziert. Ob das auch Dein Problem löst, vermag ich nicht zu sagen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
casi1969
Beiträge: 71
Registriert: Mi 4. Aug 2004, 16:30
Wohnort: Köln
Kontaktdaten:

Beitrag von casi1969 »

Hallo HerrB,

die Version 4.6.8.5 löst das Problem leider auch nicht.

Kann das Problem in der Zeile:

Code: Alles auswählen

$cms_options = array ("head", "html", "htmlhead", "htmltext", "text");
liegen? Bei der Eingabe über unser Modul wird keiner dieser cms-types erzeugt. Wie kann man dort ansetzen.

Sollte man in dieser Richtung weiterdenken: http://contenido.org/forum/viewtopic.php?t=7423 ?
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Das Modul speichert die Daten in CMS_VALUE/CMS_VAR. Diese Daten werden vermutlich niemals indiziert, da sie eigentlich der Übergabe zwischen Eingabe, Ausgabe bzw. der Konfiguration dienen.

Du hast IMHO zwei Möglichkeiten:
1. Du änderst die Suche so, dass sie auch einen Blick in con_container_conf wirft (müsste die Tabelle sein, denke ich) oder
2. Du verwendest bereits die integrierten Artikelspezifikationsfunktion (siehe Administration -> Mandanten -> Artikel Spezifikationen und nach dem Anlegen unter Artikeleigenschaften) und gibst nur die Artikelspezifikation auch via Modul aus (ich weiß gerade nicht, ob die Suche in der Form auch nach der Spezifikation an sich sucht - sie beachtet zumindest als Kriterium).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Gesperrt