Suche - Bestimmte Artikel werden nicht gefunden

Gesperrt
timgroth
Beiträge: 42
Registriert: Do 6. Okt 2005, 15:28
Kontaktdaten:

Suche - Bestimmte Artikel werden nicht gefunden

Beitrag von timgroth » Mo 28. Apr 2008, 15:13

Ich verwende auf einer Seite das Suchmodul, welches ich etwas angepasst habe, da ich auch noch auf bestimmte Daten der Artikelkonfiguration zurückgreifen muss. Grundsätzlich funktioniert das Modul einwandfrei, nur werden leider einige Artikel einfach nicht gefunden....

Sie befinden sich ebenso - wie die anderen, welche gefunden werden - in der gleichen Kategorie und die Einstellungen und Konfigurationen sind die gleichen.

Hat vielleicht einer von Euch eine Idee, woran es noch liegen könnte?
Ich bin mit einem Latein leider am Ende...

Code: Alles auswählen

<?php
/***********************************************
* Suchausgabe Output
*
* Author      :     Willi Man
* Copyright   :     four for business AG
* Created     :     20080418 1420
************************************************/

#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');

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

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

$sSearchRange = "3,4,20,21,22";
$aSearchRange = explode(',', $sSearchRange);

#Multilingual settings
$sYourSearchFor = mi18n("Ihre Suche nach");
$sMore = mi18n("weiter");

#Get search term and pre-process it
if (isset ($_GET['searchterm'])) {
	$searchterm = urldecode(strip_tags(htmlentities(stripslashes($_GET['searchterm']))));
}
elseif (isset ($_POST['searchterm'])) {
	$searchterm = urldecode(strip_tags(htmlentities(stripslashes($_POST['searchterm']))));
}

$searchterm_display = $searchterm;
$searchterm = str_replace(' ', ' AND ', $searchterm);
$searchterm = str_replace(' - ', ' NOT ', $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
	$search->setCmsOptions($cms_options);

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

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

		#Build meessage
		$message = $sYourSearchFor." '".htmlspecialchars(strip_tags($searchterm_display))."' ".mi18n("hat folgende 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('<span class="beFund">', '</span>'); // 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_display.'&page='.$i.$sArtSpecs);
			if ($i == $page) {
				$nextlinks .= '<nobr>&nbsp<span style="color:#f00">'.$i.'</span> > </nobr>';
			} else {
				$nextlinks .= '<nobr>&nbsp;<a href="'.$nextlink.'" title="'.$i.'. '.mi18n("Ergebnisseite anzeigen").'">'.$i.'</a> > </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&auml;chste Ergebnisseite anzeigen").'">'.mi18n("N&auml;chste Seite").' ></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("Vorherige Seite").'</a> ';
			$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);
				
				// NEW 20080418 1348
				$tplCfg = new templateConfig($oArt->get("idart"));
				$arrConf = $tplCfg->getData(100);
				$id = $arrConf[1];
				$titel = str_replace("\\","",$arrConf[3]);
				$beschreibung = StringCutting(str_replace("\\","",$arrConf[6]),"250","true");
				$kurzinfo = str_replace("\\","",$oSearchResults->getSearchContent($key, 'HTML', 108));
	

				$cat_id = $oSearchResults->getArtCat($key);
				$sCatName = getCategoryName($cat_id, & $db);
				$similarity = $oSearchResults->getSimilarity($key);
				
				
				if(($cat_id == "20") || ($cat_id == "21") || ($cat_id == "22"))
					{
					$teaser = "upload/fincas/" . strtoupper($id) . "/" . $arrConf[8];
					}
				if($cat_id == "3")
					{
					$teaser = "upload/landhotels/" . strtoupper($id) . "/" . $arrConf[8];
					}
				if($cat_id == "4")
					{
					$teaser = "upload/apartments/" . strtoupper($id) . "/" . $arrConf[8];
					}
				

				ob_start();
				printf("%.0f", $similarity);
				$similarity = ob_get_contents();
				ob_end_clean();
				
				if($beschreibung)
					{
				#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', str_pad($num,2,"0",STR_PAD_LEFT));
				$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->set('d', 'BESCHREIBUNG', $beschreibung);
				$tpl->set('d', 'TITEL', $titel);
				$tpl->set('d', 'ID', $id);
				$tpl->set('d', 'KURZINFO', $kurzinfo[0]);
				$tpl->set('d', 'TEASER', $teaser);
				$tpl->next();
					}
				$i ++;

			}
			$tpl->generate('templates/suchausgabe.html');
		}
	} else {
		#No results
		$tpl->set('s', 'MESSAGE', $sYourSearchFor." '".htmlspecialchars(strip_tags($searchterm))."' ".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;
		}
	}
}


function StringCutting($scString,$scMaxlength,$atspace='true')
{
  if (strlen($scString)>$scMaxlength)
  {
    $output="";
    $scString=substr($scString,0,$scMaxlength-4);
    if (strtolower($atspace)=='true')
    {
      $scStrexp=split(" ",$scString);
      for ($scI=0; $scI<count($scStrexp)-1; $scI++) $output.=$scStrexp[$scI]." ";
    }
    else $output=$scString;
    return $output."...";
  }
  else return $scString;
}
?> 

micha667
Beiträge: 143
Registriert: Di 4. Mai 2004, 11:54
Kontaktdaten:

Beitrag von micha667 » Di 29. Apr 2008, 11:41

möglicherweise hatte ich dasselbe problem...

diese lösung (am ende des threads):
http://forum.contenido.org/viewtopic.php?t=21051
hat bei mir dann funktioniert.

gruß
micha

timgroth
Beiträge: 42
Registriert: Do 6. Okt 2005, 15:28
Kontaktdaten:

Beitrag von timgroth » Di 29. Apr 2008, 14:35

Danke für den Tipp Micha, mit Similarity hatte ich auch schon probiert, aber daran liegt es nicht.
Die Suchbegriffe tauchen auch exakt in den Artikeln auf...

micha667
Beiträge: 143
Registriert: Di 4. Mai 2004, 11:54
Kontaktdaten:

Beitrag von micha667 » Mi 30. Apr 2008, 13:10

mh, haben die kategorien mit den nicht gefundenen artikeln eine höhere idcat als die übergeordnete kategorie? dann könnte es dieser bug sein...:

http://forum.contenido.org/viewtopic.ph ... =bug+suche

zur lösung mal nach dem im thread angesprochenen "conDeeperCategoriesArray" suchen.

gruß
micha

Gesperrt