Здраствуйте, товарищи! У меня некоторая проблема. Решил я создать небольшой сайтик на движке Stacey (https://github.com/kolber/stacey). В последней версии этого движка автор прикрутил возможность поиска по сайту. Движок без БД использует текстовые файлы для хранения информации (flat file), использует шаблонизатор Twig. Поиск работает, но если на сайте нет соответствий с запросом никак не сообщает об этом пользователю (т. е., просто выводит страницу без контента). Хочется конечно, чтобы в подобном случае выводилось сообщение вроде «По вашему запросу ничего не найдено». Все, что мне удалось найти связанное с поиском это вот такой кусок кода: Код (Text): # # search # public function search($search, $limit = false) { $result = Cache::get_full_cache(); if (preg_match('/^\s*$/', $search)) return array(); $search = preg_replace(array('/\//', '/\s+/'), array('\/', '.+?'), $search); $search = preg_replace(array('/o/i', '/a/i'), array('(o|ø|ö)', '(a|æ|å|ä)'), $search); $json = json_decode($result, true); $results = array(); foreach ($json as $page) { foreach ($page as $key => $value) { if (preg_match('/\/404\//', $page['url'])) continue; if ($key == 'file_path' || $key == 'url') continue; $clean_value = (is_string($value)) ? strip_tags($value) : ''; if (preg_match('/.{0,90}'.$search.'.{0,90}/i', $clean_value, $matches)) { if (isset($matches[0])) { $page['search_match'] = '...'.preg_replace('/('.$search.')/ui', '<mark>$1</mark>', $matches[0]).'...'; $results[] = $page; if ($limit && count($results) >= $limit) return $results; break; } } } } return $results; } и шаблон страницы с результатами поиска: Код (Text): {% include 'partials/tpl/header.html' %} <div id="content" class="col eight"> <p class="date col one"><!-- ¶ --></p> <div class="description col seven"> <h2 class="col seven">{{ page.title }} <i>«{{ page.query.q }}»</i></h2> <!-- <form class="logo-bottom three" action="/search"> <input type="text" value="{{ page.query.q }}" name="q" id="search-field" autocomplete="off" spellcheck="false" /> </form> --> {% set results = search(page.query.q) %} <ol> {% for result in results %} <li><a href="{{ result.url }}">{{ result.title }}</a> <p>{{ result.search_match }}</p> </li> {% endfor %} </ol> </div> </div> <script src="{{ page.root_path }}/public/docs/js/jquery-1.3.2.js" type="text/javascript" charset="utf-8"></script> {% include 'partials/tpl/footer.html' %} Мне кажется, нужно добавить, что-то вроде «else бла-бла-бла (типа, страницы на сайте нет) … то — echo '<p>По Вашему запросу ничего не найдено</p>'; В PHP я слабоват, по-этому сам не справлюсь. подскажите кто-нибудь как все-таки это сделать! Заранее благодарен.
Смотрите в документации Твига, как проверить условие, что results пустое, и вставляете после блока {%for result in results %}...{% endfor %}
Огромное спасибо! Разобрался. Действительно, копать нужно было в Twig-е: после вывода результатов — {else}, а потом просто текст «ничего не найдено…».