Findet die Suche Treffer und im Suchwort ist ein Umlaut steht da:
Ihre Suche nach 'für' hat 6 Treffer ergeben.
Dann folgen die Treffer, hier ist für richtig.
Findet die Suche keine Treffer ist der Umlaut richtig:
Ihre Suche nach 'ändern' hat leider keine Treffer ergeben.
Was muss man im Output ändern? Jemand eine Idee?
Code: Alles auswählen
<?php
/**
 * Module-Output: Search_Output
 *
 * NOTES:
 * System properties in use:
 * - Type: searchrange, Name: include, contains comma-separated list of categories to be included into search (sub-cats are included automatically)
 * - Type: searchrange, Name: include_categories, contains additional comma-separated list of categories to be included into search (sub-cats are not included automatically)
 * - Type: searchrange, Name: include_articles, contains additional comma-separated list of articles to be included into search
 * - Type: searchrange, Name: searchable_articles, contains comma-separated list of articles to use for search (note: overwrites 'include', 'include_categories' and 'include_articles')
 * Logical combination of search terms with AND or OR
 *
 * @author     Willi Man, Murat Purc <murat@purc.de>
 * @copyright  four for business AG <www.4fb.de>
 * @version    1.0.1
 *
 * $Id: Search_Output_output.php 14 2013-01-03 16:08:10Z murat $
 */
// #################################################################################################
// INITIALIZATION
cInclude('includes', 'functions.api.string.php');
if (!is_object($tpl)) {
    $tpl = new Template();
}
$tpl->reset();
$modContext = new stdClass();
$modContext->oApiClient = new cApiClient($client);
$modContext->oUrl = Contenido_Url::getInstance();
$modContext->dbSearchOptions = array('regexp', 'like', 'exact');
$modContext->combineOptions = array('and', 'or', '');
$modContext->defaultCmsOptions = 'head,html,htmlhead,htmltext,text';
$modContext->defaultEmphasizeWith = '<strong>,</strong>';
// Some simple templates
$modContext->tplPageNavItemCurrent = '<span style="white-space:nowrap;"> <strong>%s</strong> </span>';
$modContext->tplPageNavItem = '<span style="white-space:nowrap;"> <a href="%s" title="%s. ' . mi18n("Ergebnisseite anzeigen") . '">%s</a> </span>';
$modContext->tplNextPage = ' <a style="margin-left:30px;" href="%s" title="' . mi18n("nächste Ergebnisseite anzeigen") . '">' . mi18n("vor") . '</a>';
$modContext->tplPreviousPage = '<a style="margin-right:30px;" href="%s" title="' . mi18n("vorherige Ergebnisseite anzeigen") . '">' . mi18n("zurück") . '</a> ';
// #################################################################################################
// SETTINGS
// (bool) Enable debugging
$modContext->debug = false;
// (array) List of category tree ids to limit the search
$modContext->cfgCategoryTree = $modContext->oApiClient->getProperty('searchrange', 'include');
if (!empty($modContext->cfgCategoryTree)) {
    $modContext->cfgCategoryTree = explode(',', $modContext->cfgCategoryTree);
} else {
    $modContext->cfgCategoryTree = null;
}
// (array) List of additional category ids to limit the search (in addition to 'cfgCategoryTree')
$modContext->cfgCategories = $modContext->oApiClient->getProperty('searchrange', 'include_categories');
if (!empty($modContext->cfgCategories)) {
    $modContext->cfgCategories = explode(',', $modContext->cfgCategories);
} else {
    $modContext->cfgCategories = null;
}
// (array) List of additional articles ids to limit the search (in addition to 'cfgCategoryTree')
$modContext->cfgArticles = $modContext->oApiClient->getProperty('searchrange', 'include_articles');
if (!empty($modContext->cfgArticles)) {
    $modContext->cfgArticles = explode(',', $modContext->cfgArticles);
} else {
    $modContext->cfgArticles = null;
}
// (array) List of article ids which should be searchable.
//         NOTE: Overwrites settings 'cfgCategoryTree', 'cfgCategories' and 'cfgArticles'
$modContext->cfgSearchableArticles = $modContext->oApiClient->getProperty('searchrange', 'searchable_articles');
if (!empty($modContext->cfgSearchableArticles)) {
    $modContext->cfgSearchableArticles = explode(',', $modContext->cfgSearchableArticles);
} else {
    $modContext->cfgSearchableArticles = null;
}
// (int) Number of search results to display per page
$modContext->cfgItemsPerPage = "CMS_VALUE[1]";
if ((int) $modContext->cfgItemsPerPage < 1) {
    $modContext->cfgItemsPerPage = 10;
}
// (int) Max length of text to display (headline, subheadline and teasertext)
$modContext->cfgMaxLengthTeasertext = "CMS_VALUE[2]";
if ((int) $modContext->cfgMaxLengthTeasertext < 1) {
    $modContext->cfgMaxLengthTeasertext = 200;
}
// (string) Type of db search, feasible values are 'regexp', 'like' or 'exact'
$modContext->cfgDbSearchOption = "CMS_VALUE[3]";
if (!in_array($modContext->dbSearchOption, $modContext->dbSearchOptions)) {
    $modContext->cfgDbSearchOption = 'regexp';
}
// (string) Specify and/or search, if searchterm contains more than one word.
$modContext->cfgCombine = "CMS_VALUE[4]";
if (!in_array($modContext->combine, $modContext->combineOptions)) {
    $modContext->cfgCombine = '';
}
// (bool) Searchrange specified in 'categoryTree', 'cfgCategories' and 'cfgArticles' is excluded, otherwise included (exclusive)
$modContext->cfgExclude = ("CMS_VALUE[5]" == "1") ? true : false;
// (bool) Search offline articles or articles in categories which are offline.
//        If eanbled, it searches only in items with active 'visible' and 'online' state.
$modContext->cfgDontShowOfflineArticles = ("CMS_VALUE[6]" == "1") ? true : false;
// (bool) Don't search articles or articles in categories which are offline or protected.
//        If eanbled, it overwrites the setting 'dontShowOfflineArticles'.
$modContext->cfgProtected = ("CMS_VALUE[7]" == "1") ? true : false;
// (array) Search only in these cms-types (entries in lower case and without the 'cms_' prefix)
$modContext->cfgCmsOptions = "CMS_VALUE[8]";
if (empty($modContext->cfgCmsOptions)) {
    $modContext->cfgCmsOptions = $modContext->defaultCmsOptions;
}
$modContext->cfgCmsOptions = explode(',', $modContext->cfgCmsOptions);
// (array) HTML tags (start and end) to emphasize the located searchterm in search results
$modContext->cfgEmphasizeWith = "CMS_VALUE[9]";
if (empty($modContext->cfgEmphasizeWith)) {
    $modContext->cfgEmphasizeWith = $modContext->defaultEmphasizeWith;
}
$modContext->cfgEmphasizeWith = explode(',', $modContext->cfgEmphasizeWith);
// #################################################################################################
// MISC
if (!function_exists('module_searchOutput_getArticleSpecification')) {
    /**
     * Get specification of an article
     * @param  int  $articleId  Article id
     * @param  int  $langId  Language id
     * @return  int|bool  Id of article specification or false
     */
    function module_searchOutput_getArticleSpecification($articleId, $langId) {
        global $db, $cfg;
        $sql = "SELECT artspec FROM " . $cfg['tab']['art_lang'] . " WHERE"
             . " idart = " . (int) $articleId . " AND idlang = " . (int) $langId;
        $db->query($sql);
        return ($db->next_record()) ? $db->f('artspec') : false;
    }
}
// #################################################################################################
// PROCESSING / OUTPUT
if ($modContext->debug) {
    echo '<pre>Settings: ';
    foreach ($modContext as $var => $value) {
        if (0 === strpos($var, 'cfg')) {
            echo "$var: " . print_r($value, true) . "\n";
        }
    }
    echo '</pre>';
}
// Get search term and pre-process it
$searchTerm = '';
if (!empty($_GET['searchterm'])) {
    $searchTerm = urldecode(conHtmlentities(strip_tags(stripslashes($_GET['searchterm']))));
} elseif (!empty($_POST['searchterm'])) {
    $searchTerm = urldecode(conHtmlentities(strip_tags(stripslashes($_POST['searchterm']))));
}
$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);
$aArtSpecs = array();
while ($db->next_record()) {
    $aArtSpecs[] = $db->f('idartspec');
}
$aArtSpecs[] = 0;
if (strlen(trim($searchTerm)) > 0) {
    // Parse search term and set search options
    $searchTerm = conHtmlEntityDecode($searchTerm);
    if (empty($modContext->cfgCombine)) {
        $modContext->cfgCombine = (stristr($searchTerm, ' or ') === false) ? 'and' : 'or';
    }
    $searchTerm = str_replace(' and ', ' ', strtolower($searchTerm));
    $searchTerm = str_replace(' or ', ' ', strtolower($searchTerm));
    // Instantiate search with some options
    $options = array(
        'db' => $modContext->cfgDbSearchOption,
        'combine' => $modContext->cfgCombine,
        'exclude' => $modContext->cfgExclude,
        'cat_tree' => $modContext->cfgCategoryTree,
        'categories' => $modContext->cfgCategories,
        'articles' => $modContext->cfgArticles,
        'searchable_articles' => $modContext->cfgSearchableArticles,
        'artspecs' => $aArtSpecs, // array of article specifications => search only articles with these artspecs
        'protected' => $modContext->cfgProtected,
        'dontshowofflinearticles' => $modContext->cfgDontShowOfflineArticles
    );
    $search = new Search($options);
    $search->setCmsOptions($modContext->cfgCmsOptions);
    // Execute search
    $aSearchResults = $search->searchIndex($searchTerm, '');
    // Build results page
    if (count($aSearchResults) > 0) {
        $tpl->set('s', 'result_page', mi18n("Ergebnis-Seite") . ':');
        // Build meessage
        $message = sprintf("%s '%s' %s:", mi18n("Ihre Suche nach"), conHtmlSpecialChars(strip_tags($searchTermDisplay)), mi18n("hat $$$ Treffer ergeben"));
        $message = str_replace('$$$', count($aSearchResults), $message);
        $tpl->set('s', 'MESSAGE', $message);
        // Get search results, number of results per page and pages
        $oSearchResults = new SearchResult($aSearchResults, $modContext->cfgItemsPerPage);
        $iNumberOfResults = $oSearchResults->getNumberOfResults();
        $iNumberOfPages = $oSearchResults->getNumberOfPages();
        $oSearchResults->setReplacement($modContext->cfgEmphasizeWith[0], $modContext->cfgEmphasizeWith[1]);
        // Get current result page
        $page = (!empty($_GET['page']) && (int) $_GET['page'] > 0) ? $_GET['page'] : 1;
        $aResPage = $oSearchResults->getSearchResultPage($page);
        // Build result pages navigation
        $pagesNav = '';
        for ($i = 1; $i <= $iNumberOfPages; $i++) {
            // This is just for sample client - modify to your needs!
            if ($cfg['url_builder']['name'] == 'front_content' || $cfg['url_builder']['name'] == 'MR') {
                $aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchTermDisplay, 'page' => ($i . $sArtSpecs));
            } else {
                $aParams = array(
                    'search' => array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchTermDisplay, 'page' => ($i . $sArtSpecs)),
                    'idcat' => $idcat, // needed to build category path
                    'lang' => $lang, // needed to build category path
                    'level' => 1 // needed to build category path
                );
            }
            try {
                $url = $modContext->oUrl->build($aParams);
            } catch (InvalidArgumentException $e) {
                $url = $sess->url('front_content.php?idcat=' . $idcat . '&idart=' . $idart . '&searchterm=' . $searchTermDisplay . '&page=' . $i . $sArtSpecs);
            }
            if ($i == $page) {
                $pagesNav .= sprintf($modContext->tplPageNavItemCurrent, $i);
            } else {
                $pagesNav .= sprintf($modContext->tplPageNavItem, $url, $i, $i);
            }
        }
        $tpl->set('s', 'PAGES', $pagesNav);
        // Build link to next result page
        if ($page < $iNumberOfPages) {
            $n = $page + 1;
            // This is just for sample client - modify to your needs!
            if ($cfg['url_builder']['name'] == 'front_content' || $cfg['url_builder']['name'] == 'MR') {
                $aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchTermDisplay, 'page' => ($n . $sArtSpecs));
            } else {
                $aParams = array(
                    'search' => array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchTermDisplay, 'page' => ($n . $sArtSpecs)),
                    'idcat' => $idcat, // needed to build category path
                    'lang' => $lang, // needed to build category path
                    'level' => 1 // needed to build category path
                );
            }
            try {
                $url = $modContext->oUrl->build($aParams);
            } catch (InvalidArgumentException $e) {
                $url = $sess->url('front_content.php?idcat=' . $idcat . '&idart=' . $idart . '&searchterm=' . $searchTerm . '&page=' . $n . $sArtSpecs);
            }
            $nextpage .= sprintf($modContext->tplNextPage, $url);
            $tpl->set('s', 'NEXT', $nextpage);
        } else {
            $tpl->set('s', 'NEXT', '<span style="color:#4989C4; margin-left:30px;">›</span>');
        }
        // Build link to previous result page
        if ($page > 1) {
            $p = $page - 1;
            // This is just for sample client - modify to your needs!
            if ($cfg['url_builder']['name'] == 'front_content' || $cfg['url_builder']['name'] == 'MR') {
                $aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchTermDisplay, 'page' => ($p . $sArtSpecs));
            } else {
                $aParams = array(
                    'search' => array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchTermDisplay, 'page' => ($p . $sArtSpecs)),
                    'idcat' => $idcat, // needed to build category path
                    'lang' => $lang, // needed to build category path
                    'level' => 1 // needed to build category path
                );
            }
            try {
                $url = $modContext->oUrl->build($aParams);
            } catch (InvalidArgumentException $e) {
                $url = $sess->url('front_content.php?idcat=' . $idcat . '&idart=' . $idart . '&searchterm=' . $searchTerm . '&page=' . $p . $sArtSpecs);
            }
            $prevpage .= sprintf($modContext->tplPreviousPage, $url);
            $tpl->set('s', 'PREV', $prevpage);
        } else {
            $tpl->set('s', 'PREV', '<span style="color:#4989C4; margin-right:30px;">‹</span>');
        }
        if (count($aResPage) > 0) {
            $i = 1;
            // Build single search result on result page
            foreach ($aResPage as $key => $val) {
                $num = $i + (($page - 1) * $modContext->cfgItemsPerPage);
                $oArt = new Article($key, $client, $lang);
                // Get publishing date of article
                $sPublished = $oArt->getField('published');
                $sPublishedBy = trim(strip_tags($oArt->getContent('HEAD', 90)));
                if ($sPublishedBy != '') {
                    $sPublishedDate = '[' . $sPublishedBy . ']';
                } else {
                    $sPublishedDate = '';
                    if ($sPublished[8] != '0') {
                        $sPublishedDate .= $sPublished[8];
                    }
                    $sPublishedDate .= $sPublished[9] . '.';
                    if ($sPublished[5] != '0') {
                        $sPublishedDate .= $sPublished[5];
                    }
                    $sPublishedDate .= $sPublished[6] . '.' . $sPublished[0] . $sPublished[1] . $sPublished[2] . $sPublished[3] . ']';
                    $sPublishedDate = '[' . $sPublishedDate;
                }
                // Get text and headline of current article
                $iCurrentArtSpec = module_searchOutput_getArticleSpecification($key, $lang);
                $aHeadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 1);
                $aSubheadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 2);
                $aText = $oSearchResults->getSearchContent($key, 'HTML', 1);
                $sText = capiStrTrimAfterWord($aText[0], $modContext->cfgMaxLengthTeasertext);
                $sHeadline = capiStrTrimAfterWord($aHeadline[0], $modContext->cfgMaxLengthTeasertext); # lars conflict with capiStrTrimAfterWord and setReplacement('<strong>', '</strong>')
                $sSubHeadline = capiStrTrimAfterWord($aSubheadline[0], $modContext->cfgMaxLengthTeasertext);
                $iCategoryId = $oSearchResults->getArtCat($key);
                $fSimilarity = sprintf('%.0f', $oSearchResults->getSimilarity($key));
                // Send output to template
                // This is just for sample client - modify to your needs!
                if ($cfg['url_builder']['name'] == 'front_content' || $cfg['url_builder']['name'] == 'MR') {
                    $aParams = array('lang' => $lang, 'idcat' => $iCategoryId, 'idart' => $key);
                } else {
                    $aParams = array(
                        'search' => array('lang' => $lang, 'idcat' => $iCategoryId, 'idart' => $key),
                        'idcat' => $idcat, // needed to build category path
                        'lang' => $lang, // needed to build category path
                        'level' => 1  // needed to build category path
                    );
                }
                try {
                    $sHref = $modContext->oUrl->build($aParams);
                } catch (InvalidArgumentException $e) {
                    $sHref = $sess->url("front_content.php?idcat=$iCategoryId&idart=$key");
                }
                $tpl->set('d', 'more', mi18n("mehr"));
                $tpl->set('d', 'HREF', $sHref);
                $tpl->set('d', 'TITLE', mi18n("Link zu Suchergebnis") . ' ' . $i);
                $tpl->set('d', 'NUM', $num);
                $tpl->set('d', 'CATNAME', $sHeadline);
                $tpl->set('d', 'HEADLINE', $sText);
                $tpl->set('d', 'SUBHEADLINE', $sSubHeadline);
                $tpl->set('d', 'SIMILARITY', $fSimilarity);
                $tpl->set('d', 'TARGET', '_self');
                $tpl->set('d', 'PUB_DATE', $sPublishedDate);
                $tpl->next();
                $i++;
            }
            $tpl->generate('templates/search_output.html');
        }
    } else {
        // No results
        $tpl->set('s', 'MESSAGE', mi18n("Ihre Suche nach") . " '" . conHtmlSpecialChars(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/search_output.html');
    }
} else {
    echo '<div id="searchResults">';
    echo '<h1>' . mi18n("Keine Suchergebnisse - Bitte suchen Sie über das Sucheingabefeld!") . '</h1>';
    echo '</div>';
}
unset($modContext);
?>lunsen_de