Standardsuche: Bugfixes für 4.8.13?

Gesperrt
Aleksch1893
Beiträge: 38
Registriert: Mo 26. Jul 2010, 09:47
Kontaktdaten:

Standardsuche: Bugfixes für 4.8.13?

Beitrag von Aleksch1893 »

Hallo Contenido-Community,


ich verwende derzeit Contenido 4.8.12 und möchte nun auf 4.8.13 updaten, unter anderem, weil mein Kollege meint, das dort die Ausgabe von Umlauten im Titel der Suchergebnisse korrigiert wäre. Allerdings weiß ich nicht, wie und wo ich jetzt ansetzen soll :?:

Er sagt:
Ein PHP-Skript ("Suchausgabe" oder übergeordnete Klassen) behandelt Überschriften, die den Suchstring enthalten resp. nicht enthalten unterschiedlich. Bei enthaltenem Suchstring wird eine Operation ausgeführt, die die Zeichenkodierung falsch verarbeitet: Der UTF-8-kodierte Text aus der Datenbank wird als ISO-8859-kodiert interpretiert. Die sichtbaren HTML-Umschreibungen stammen aus einer nachfolgenden (korrekten und erforderlichen) Konversion im Modul "Suchausgabe".



Hier ist das Modul, das ich im Einsatz habe:

Sucheingabe:

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
************************************************/

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

#Settings
$template = 'sucheingabe.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['searchterm']!=''){
    $searchterm = $_POST['searchterm'];
}else{
    $searchterm = $_GET['searchterm'];
}

$tpl->set('s', 'SEARCH_TITLE', mi18n("Durchsuchen Sie die Webseite"));  
$tpl->set('s', 'SEARCH_URL', $url); 
$tpl->set('s', 'SEARCH_START', mi18n("Suchen"));
$tpl->set('s', 'SEARCH_DESCR', mi18n("Geben Sie Ihren Suchbegriff ein: "));

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

?>
Suchausgabe:

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('search', 'range');
$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(htmlspecialchars(stripslashes($_GET['searchterm']))));
}
elseif (isset ($_POST['searchterm'])) {
    $searchterm = urldecode(strip_tags(htmlspecialchars(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('front_content.php');

if (strlen(trim($searchterm)) > 0) {
    $sql = "INSERT INTO con_searchstats (zeit, search) VALUES (NOW(), '$searchterm')";
    $db->query($sql);
    #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('<span class="bold">', '</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
        $nextlinks = array();
        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[] = '('.$i.')';
            } else {
                $nextlinks[] = '<a href="'.$nextlink.'" title="'.$i.'. '.mi18n("Ergebnisseite anzeigen").'">['.$i.']</a>';
            }
        }
        $tpl->set('s', 'PAGES', implode(",", $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 .= ',<a href="'.$next.'" title="'.mi18n("nächste Ergebnisseite anzeigen").'">'.mi18n("vor").' &raquo;</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").'">&laquo; '.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, 'HEAD', 10);
                $aSubheadline = $oSearchResults->getSearchContent($key, 'HEAD', 2);

                $text = $oSearchResults->getSearchContent($key, 'HTML', 10);
                $text = capiStrTrimAfterWord($text[0], 200);
                if (empty($text)) {
                    $text = $oSearchResults->getSearchContent($key, 'TEXT', 10);
                    $text = capiStrTrimAfterWord($text[0], 200);
                }
                //$text = str_replace($key, "<span class=\"bold\">$key</span>", $text);
//if ( strip_tags($oArt->getField('summary')) ) $text = "<b>".strip_tags($oArt->getField('summary')) ."</b><br />". $text;
                $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);
                
                if(empty($headline)) {
                    $headline = $sCatName;
                }

                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("Artikel anzeigen"));
                $tpl->set('d', 'NUM', $num);
                $tpl->set('d', 'CATNAME', htmlspecialchars(strip_tags($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', 0, 0);
        }
    } 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', 0, 0);
    }

} else {
    #no searchterm
    $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', 0, 0);
}

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;
        }
    }
}
?> 
Wenn die Datenbank aus welchen Gründen auch immer nicht UTF-8 als Zeichensatz hat, kann ich das ganze "einfach" umstellen über phpmyadmin? Wenn ja, worauf muss ich achten, gehen eventuell Daten verloren oder werden anderweitig zerschossen, bzw. unbrauchbar gemacht?



Freu mich auf eure Hinweise.




Grüßle aus Stuttgart,
Aleksch
Louis
Beiträge: 206
Registriert: Mo 27. Okt 2003, 12:28
Kontaktdaten:

Re: Standardsuche: Bugfixes für 4.8.13?

Beitrag von Louis »

Aleksch1893 hat geschrieben:Wenn die Datenbank aus welchen Gründen auch immer nicht UTF-8 als Zeichensatz hat, kann ich das ganze "einfach" umstellen über phpmyadmin? Wenn ja, worauf muss ich achten, gehen eventuell Daten verloren oder werden anderweitig zerschossen, bzw. unbrauchbar gemacht?
Dazu gibt's bei MySQLDumper einen ausführlichen Artikel: http://forum.mysqldumper.de/die-umlautp ... t2313.html
Wir können den Wind nicht ändern, aber die Segel anders setzen
(Aristoteles)
Gesperrt