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
************************************************/
#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;
$cApiClient = new cApiClient($client);
$sSearchRange = $cApiClient->getProperty('searchrange', 'include');
$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 = str_replace(' + ', ' AND ', $searchterm);
$searchterm = str_replace(' - ', ' NOT ', $searchterm);
$searchterm_display = $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('index.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("Ergebnis-Seite").':');
#Build meessage
$message = $sYourSearchFor." '".htmlspecialchars(strip_tags($searchterm_display))."' ".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('index.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm_display.'&page='.$i.$sArtSpecs);
if ($i == $page) {
$nextlinks .= '<nobr> <strong>'.$i.'</strong> </nobr>';
} else {
$nextlinks .= '<nobr> <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('index.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$n.$sArtSpecs);
$next = $sess->url('index.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$n.$sArtSpecs);
$nextpage .= ' <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('index.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$p.$sArtSpecs);
$prevpage .= '<a href="'.$pre.'" title="'.mi18n("vorherige Ergebnisseite anzeigen").'">< '.mi18n("zurück").'</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);
$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("index.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($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;
}
}
}
?>