76

Re: search plugin

Well, i made a support for cyrillic haracters to search engine posted here.

What was the issue?

First of all - $_POST filtering in search-results page:
this should look like 

preg_match('/^[\w\dа-яА-ЯёЁ]+$/iu', $searchcriteria)

Second - using mb_string functions:

mb_stristr($mychild.$child->content(),$mysearch

so, sitesearch snippet now looks like this

<?php
function is_in_array($str, $array) {
    return preg_grep('/^' . preg_quote($str, '/') . '$/i', $array);
}
function snippet_sitesearch($parent){
    $exclude = array("search-results");
    $mysearch = htmlentities($_POST['search_txt']);
        $childs = $parent->children();
        if (count($childs) > 0){        
            foreach ($childs as $child) {
                if(!in_array($child->parent->slug,$exclude)){        
                    $myparent = snippet_sitesearch($child);
                    $mylink = $child->link();
                    $url_segments = explode('/', $child->url);
                    $url_seg_count = count($url_segments);
                    if($url_seg_count > '1'){
                        $mycrumb = ucfirst(str_replace('-',' ',$child->parent->breadcrumb)).' / '.$child->breadcrumb;
                    } else {
                        $mycrumb = $child->breadcrumb;
                    }
                    if(mb_stristr($mychild.$child->content(),$mysearch) || mb_stristr($mychild.$child->title(),$mysearch) || is_in_array($mysearch,$child->tags())){
                        $out .= '<li><strong><a href="'.$child->url.URL_SUFFIX.'">'.$mycrumb.'</a></strong></li>';
                    }
                    $out .= snippet_sitesearch($child);
                }
            }
        }
        $out = str_replace("<li><li>", "<li>", $out);
        $out = str_replace("</li></li>", "</li>", $out);
        return $out;
}
?>
<div id="listing">
<?php
$searchdata = "";
$searchdata .= snippet_sitesearch($this->find('/'));
$occurrences = substr_count($searchdata,"<li>");
if($searchdata != NULL){
    if($occurrences > '1'){$results="pages";}else{$results="page";}
    echo "<p>Искомая фраза , <strong>" . $_POST['search_txt'] . "</strong>, была найдена на след. страницах $results:</p>";
    echo "<ol>";
    echo $searchdata;
    echo "</ol>";
} else {
    echo "<p>Вы искали: <strong>" . $_POST['search_txt'] . "</strong></p>";
    echo "<p>По данному запросу ничего не найдено.</p>";
}
?>
</div>

and the results page:

<?php
if (isset($_POST['search_txt'])){    
    $searchcriteria = $_POST['search_txt'];
    if($searchcriteria != NULL && preg_match('/^[\w\dа-яА-ЯёЁ]+$/iu', $searchcriteria)){
        $this->includeSnippet('sitesearch');
    }else{
        echo "<p>Пожалуйста введите что-нибудь в строку поиска.</p>";
    }
}
?>

Thumbs up