Установка настройка поиска [JS & PHP]

Тема в разделе "PHP", создана пользователем xoff, 12 авг 2014.

  1. xoff

    xoff

    Регистрация:
    2 сен 2013
    Сообщения:
    72
    Симпатии:
    13
    Вообщем голову сломал не понимаю почему не работает....

    Структура:

    search.php
    search/results.php
    search/search.css
    search/search.js

    В файле search.php:

    Подключен:
    HTML:
        <script type="text/javascript" src="js/jquery.js"></script>
        <script type="text/javascript" src="search/search.js"></script>
    
    
    и в body:
    HTML:
      <div class="container">
        <div class="row">
            <div class="span12">          
                 <h3>Результаты поиска:</h3>
                <div id="search-results"></div>
            </div>      
       </div>
      </div>
    
    
    В search.js:
    Код:
    $(function(){
        var s=location.search.replace(/^\?.*s=([^&]+)/,'$1')
            ,form=$('#search-form')
            ,input=$('input[type=text]',form)
            ,results=$('#search-results').height(0)
            ,src='search/results.php'
            ,ifr=$('<iframe width="100%" height="100%" frameborder="0" marginheight="0" marginwidth="0" allowTransparency="true"></iframe>')
       
        if(results.length)       
            ifr       
                .attr({
                    src:src+'?s='+s
                })
                .appendTo(results)
            ,input
                .val(decodeURI(s))
       
        window._resize=function(h){       
            results
                .height(h)
        }
    })
    
    В results.php:
    PHP:
    <?php

    if(!isset($_GET['s'])) {
        die(
    'You must define a search term!');
    }

    $highlight true;//highlight results or not
    $search_in = array('html''htm');//allowable filetypes to search in
    $search_dir '../';//starting directory
    $recursive true;//should it search recursively or not
    define('SIDE_CHARS'80);
    $file_count 0;
    $search_term mb_strtolower($_GET['s'], 'UTF-8');
    //$search_term = $_GET['s'];
    $search_term_length strlen($search_term);
    $final_result = array();

    $files list_files($search_dir);

    foreach(
    $files as $file){
        
    $contents file_get_contents($file);
        
    preg_match("/\<title\>(.*)\<\/title\>/"$contents$page_title); //getting page title
        
    if (preg_match("#\<body.*\>(.*)\<\/body\>#si"$contents$body_content)){ //getting content only between <body></body> tags
            
    $clean_content strip_tags($body_content[0]); //remove html tags
            
    $clean_content preg_replace'/\s+/'' '$clean_content ); //remove duplicate whitespaces, carriage returns, tabs, etc
       
        //$found = strpos_recursive($clean_content, $search_term);
        
    $found strpos_recursive(mb_strtolower($clean_content'UTF-8'), $search_term);
        
    $final_result[$file_count]['page_title'][] = $page_title[1];
        
    $final_result[$file_count]['file_name'][] = $file;
    }
        if(
    $found && !empty($found)) {
            for (
    $z 0$z count($found[0]); $z++){
                
    $pos $found[0][$z][1];
                
    $side_chars SIDE_CHARS;
                if (
    $pos SIDE_CHARS){
                    
    $side_chars $pos;
                    
    $pos_end SIDE_CHARS $search_term_length;
                }else{
                    
    $pos_end SIDE_CHARS*$search_term_length;
                }

                
    $pos_start $pos $side_chars;
                
    $str substr($clean_content$pos_start$pos_end);
                
    $result preg_replace('#'.$search_term.'#ui''<span class="search">\0</span>'$str);
                
    //$result = preg_replace('#'.$search_term.'#ui', '<span class="search">'.$search_term.'</span>', $str);
                
    $final_result[$file_count]['search_result'][] = $result;
            }
        } else {
            
    $final_result[$file_count]['search_result'][] = '';
        }
        
    $file_count++;
    }
    ?>
    <!DOCTYPE HTML>
    <html lang="en-US" class="iframe">
    <head>
        <title>Результаты поиска</title>   
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
        <link rel="stylesheet" href="search.css" type="text/css" media="screen">

    </head>
    <body>
    <script type="text/javascript">
    ;(function(){   
        document.body.onload=resize
        window.onresize=resize
       
        function resize(){
            parent._resize(document.getElementById('search-results').offsetHeight)
        }
    })()
    </script>

        <div id="search-results">
            <ol class="search_list">
        <?php
            $match_count 
    0;
            for (
    $i=0$i count($final_result); $i++){
                if (!empty(
    $final_result[$i]['search_result'][0]) || $final_result[$i]['search_result'][0] !== ''){
                    
    $match_count++;
        
    ?>
                <li>
                    <h4 class="search_title"><a target="_top" href="<?php echo $final_result[$i]['file_name'][0]; ?>" class="search_link"> <?php echo $final_result[$i]['page_title'][0]; ?> </a></h4>
                    ...<?php echo $final_result[$i]['search_result'][0]; ?>...
                    <span class="match">Совпадений: <?php echo count($final_result[$i]['search_result']); ?> - URL: <?php echo $final_result[$i]['file_name'][0]; ?></span>
                </li>
        <?php
                
    }
            }
            if (
    $match_count == 0) {
                echo 
    '<h4>No results found for <span class="search">'.$search_term.'</span></h4>';
            }
        
    ?>
            </ol>
        </div>

    </body>
    </html>


    <?php
    //lists all the files in the directory given (and sub-directories if it is enabled)
    function list_files($dir){
        global 
    $recursive$search_in;

        
    $result = array();
        if(
    is_dir($dir)){
            if(
    $dh opendir($dir)){
                while ((
    $file readdir($dh)) !== false) {
                    if(!(
    $file == '.' || $file == '..')){
                        
    $file $dir.'/'.$file;
                        if(
    is_dir($file) && $recursive == true && $file != './.' && $file != './..'){
                            
    $result array_merge($resultlist_files($file));
                        }
                        else if(!
    is_dir($file)){
                            if(
    in_array(get_file_extension($file), $search_in)){
                                
    $result[] = $file;
                            }
                        }
                    }
                }
            }
        }
        return 
    $result;
    }

    //returns the extention of a file
    function get_file_extension($filename){
        
    $result '';
        
    $parts explode('.'$filename);
        if(
    is_array($parts) && count($parts) > 1){
            
    $result end($parts);
        }
        return 
    $result;
    }

    function 
    strpos_recursive($haystack$needle$offset 0, &$results = array()) {              
        
    $offset stripos($haystack$needle$offset);
        if(
    $offset === false) {
            return 
    $results;          
        } else {
            
    $pattern '/'.$needle.'/ui';
        
    preg_match_all($pattern$haystack$resultsPREG_OFFSET_CAPTURE);
            return 
    $results;
        }
    }
    ?>

    В итоге выходит вот что:

    HTML:
    <div id="search-results" style="height: 0px;">
         <iframe width="100%" height="100%" frameborder="0" marginheight="0" marginwidth="0" allowtransparency="true" src="search/results.php?s=%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE">
         </iframe>
    </div>
    
    И не выводит ничего, в чем может быть проблема? Может в кодировке что-то не так? Или в размещении файлов? Я уже не знаю куда рыть.
    --- Добавлено, 12 авг 2014 ---
    Понятно почему... не выполняется results.php потому что походу у хостинга не включен php. На другом сайте все ок.
     
    Последнее редактирование: 12 авг 2014
  2. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    жесть то какая, просто форму поиска создать с посылкой данные на result.php?