support 447 Posted January 15, 2018 Report Share Posted January 15, 2018 В данной небольшой заметке расскажу как сделать вывод результатов поиска товаров прямо рядом со строкой поиска. Без перезагрузки страницы, через ajax. Вот как это будет выглядеть, смотрите скриншоты: При вводе ключевых слов для поиска в форме, результат отображается сразу, без перезагрузки страницы в браузере. Как это сделать?! 1. Открываем основной шаблон магазина в Админке - Оформление - Шаблоны - Основной шаблон и ищем код формы поиска: <form class="navbar-form navbar-left" role="search" action="{base_path}/page/search-result{config value=url_extension}" method="get" id="search"> <div class="input-group"> <input type="text" class="form-control" placeholder="{lang}Search{/lang}" name="keyword" id="search-keywords"> <div class="input-group-btn"> <button class="btn btn-primary" type="submit"><i class="fa fa-search"></i></button> </div> </div> <div id="searchPreview"></div> </form> меняем его на: <form class="navbar-form navbar-left" role="search" action="{base_path}/page/search-result{config value=url_extension}" method="get" id="search"> <div class="input-group"> <input type="text" class="form-control" placeholder="{lang}Search{/lang}" name="keyword" id="search-keywords"> <div class="input-group-btn"> <button class="btn btn-primary" type="submit"><i class="fa fa-search"></i></button> </div> </div> <div id="searchPreview"></div> </form> Что изменилось: Мы добавили атрибут id="search" в саму форму. Добавили атрибут id="search-keywords" input полю. Добавили блок с id="searchPreview" для вывода результатов поиска. 2. Открываем файл /app/webroot/js/vamshop.js и ищем строку: // Ajax cart добавляем НАД этой строкой следующий код: // Search Preview $("#search-keywords").keyup(function(){ var action = $("#search").attr("action"); var searchString = $("#search-keywords").val(); $.ajax({ url: "/site/search_preview", dataType : "html", type: "POST", data: "keyword="+searchString, success: function(msg){$("#searchPreview").html(msg);} }); }); 3. Открываем файл /app/Controller/SiteController.php и внизу, НАД последней скобкой } добавляем следующий код: public function search_preview () { // Clean up the post App::uses('Sanitize', 'Utility'); $clean = new Sanitize(); $clean->paranoid($_POST); $_GET['keyword'] = $_POST['keyword']; if ($this->RequestHandler->isAjax()) { $this->Smarty->display("{search_result}"); die(); } } 4. Открываем файл стилей /app/webroot/css/vamshop.css и внизу добавляем: #searchPreview { position: absolute; z-index: 999999; width: 50%; height: auto; overflow-y: hidden; overflow-x: hidden; background: #fff; } Всё. Теперь у нас результаты поиска выводятся прямо под строкой поиска, без перезагрузки страницы. Как на скриншотах: Link to post Share on other sites
Recommended Posts