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(),$mysearchso, 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>";
}
}
?>