За последние 24 часа нас посетили 50850 программистов и 1747 роботов. Сейчас ищут 875 программистов ...

Вывод результатов поиска PHP. Как реализовать?

Тема в разделе "PHP для новичков", создана пользователем Linne, 19 июл 2014.

  1. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Здраствуйте, товарищи!

    У меня некоторая проблема. Решил я создать небольшой сайтик на движке Stacey (https://github.com/kolber/stacey). В последней версии этого движка автор прикрутил возможность поиска по сайту. Движок без БД использует текстовые файлы для хранения информации (flat file), использует шаблонизатор Twig. Поиск работает, но если на сайте нет соответствий с запросом никак не сообщает об этом пользователю (т. е., просто выводит страницу без контента). Хочется конечно, чтобы в подобном случае выводилось сообщение вроде «По вашему запросу ничего не найдено». Все, что мне удалось найти связанное с поиском это вот такой кусок кода:

    Код (Text):
    1.  
    2.   #
    3.   #   search
    4.   #
    5.  
    6.   public function search($search, $limit = false) {
    7.     $result = Cache::get_full_cache();
    8.  
    9.     if (preg_match('/^\s*$/', $search)) return array();
    10.     $search = preg_replace(array('/\//', '/\s+/'), array('\/', '.+?'), $search);
    11.     $search = preg_replace(array('/o/i', '/a/i'), array('(o|ø|ö)', '(a|æ|å|ä)'), $search);
    12.     $json = json_decode($result, true);
    13.  
    14.     $results = array();
    15.     foreach ($json as $page) {
    16.       foreach ($page as $key => $value) {
    17.         if (preg_match('/\/404\//', $page['url'])) continue;
    18.         if ($key == 'file_path' || $key == 'url') continue;
    19.         $clean_value = (is_string($value)) ? strip_tags($value) : '';
    20.         if (preg_match('/.{0,90}'.$search.'.{0,90}/i', $clean_value, $matches)) {
    21.           if (isset($matches[0])) {
    22.             $page['search_match'] = '...'.preg_replace('/('.$search.')/ui', '<mark>$1</mark>', $matches[0]).'...';
    23.             $results[] = $page;
    24.             if ($limit && count($results) >= $limit) return $results;
    25.             break;
    26.           }
    27.         }
    28.       }
    29.     }
    30.     return $results;
    31.   }
    и шаблон страницы с результатами поиска:

    Код (Text):
    1.  
    2. {% include 'partials/tpl/header.html' %}
    3.   <div id="content" class="col eight">
    4.     <p class="date col one"><!-- &para; --></p>
    5.     <div class="description col seven">
    6.       <h2 class="col seven">{{ page.title }} <i>&laquo;{{ page.query.q }}&raquo;</i></h2>
    7.       <!-- <form class="logo-bottom three" action="/search">
    8.         <input type="text" value="{{ page.query.q }}" name="q" id="search-field" autocomplete="off" spellcheck="false" />
    9.       </form> -->
    10.       {% set results = search(page.query.q) %}
    11.       <ol>
    12.         {% for result in results %}
    13.         <li><a href="{{ result.url }}">{{ result.title }}</a>
    14.           <p>{{ result.search_match }}</p>
    15.         </li>
    16.       {% endfor %}
    17.       </ol>
    18.     </div>
    19.   </div>
    20.     <script src="{{ page.root_path }}/public/docs/js/jquery-1.3.2.js" type="text/javascript" charset="utf-8"></script>
    21. {% include 'partials/tpl/footer.html' %}
    Мне кажется, нужно добавить, что-то вроде «else бла-бла-бла (типа, страницы на сайте нет) … то — echo '<p>По Вашему запросу ничего не найдено</p>'; :) В PHP я слабоват, по-этому сам не справлюсь. подскажите кто-нибудь как все-таки это сделать! Заранее благодарен.
     
  2. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Смотрите в документации Твига, как проверить условие, что results пустое, и вставляете после блока {%for result in results %}...{% endfor %}
     
  3. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Огромное спасибо! Разобрался. Действительно, копать нужно было в Twig-е: после вывода результатов — {else}, а потом просто текст «ничего не найдено…».