AjaxMegaSearch – живой поиск по сайту
- Дополнения
- AjaxMegaSearch
Поддержать: USDT TRC20: TBGKTYDs4yzU17vQbobbUB8epFFtFb6PKh
3484
AjaxMegaSearch – живой поиск по сайту
Создаёте плагин AJAX на событие OnPageNotFound с кодом
switch($_GET['q']){ case 'ajaxmegasearch': echo $modx->runSnippet('ajaxMegaSearch'); die(); break; }
как видно по коду, плагин выводит содержимое сниппета ajaxMegaSearch.
Дальше создаём сниппет ajaxMegaSearch с кодом
<?php $out = ''; $text = isset($_POST['text']) ? $_POST['text'] : ''; // текст запроса $fields = isset($_POST['fields']) ? $_POST['fields'] : 'pagetitle'; // поля для поиска через запятую - pagetitle,longtitle $length = isset($_POST['text']) ? strlen($_POST['text']) : 0; // количество символов в запросе $minlength = isset($_POST['minlength']) ? (int) $_POST['minlength'] : 3; // минимальное количество в запросе $maxlength = isset($_POST['maxlength']) ? (int) $_POST['maxlength'] : 50; // максимальное количество в запросе $limit = isset($_POST['limit']) ? (int) $_POST['limit'] : 50; // количество выводимых результатов поиска $empty = '<span>ничего не нашлось</span>'; // вывод пустого ответа поиска $template = 'template=4 AND'; // шаблон документов для поиска // 4 - можно поменять на свой шаблон либо весь $template удалить. $like = addcslashes($text, '\%_'); $like = $modx->db->escape($like); $like = '%' . $like . '%'; $fields = explode(',', $fields); $fields_array = explode(',', 'pagetitle,longtitle,description,alias,introtext,content'); // разрешённые поля через запятую $fields = array_intersect($fields_array, $fields); $fields_where = array(); foreach($fields as $v) { $fields_where[] = $v . " LIKE '" . $like . "'"; } $fields_where = implode(' OR ', $fields_where); if($minlength <= $length && $maxlength >= $length) { $res = $modx->db->query(" SELECT * FROM modx_site_content WHERE " . $template . " (" . $fields_where . ") ORDER BY pagetitle ASC LIMIT " . $limit . " "); foreach($modx->db->makeArray($res) as $doc) { if(!$modx->config['use_alias_path']) { $url = $modx->config['friendly_url_prefix'] . $doc['alias'] . $modx->config['friendly_url_suffix']; } else { $url = $modx->makeUrl($doc['id']); } $out .= '<a href="' . $url . '">' . str_ireplace($text, '<b>'.$text.'</b>', $doc['pagetitle']) . '</a>'; } $out = $out ? $out : $empty; } return $out;
Обработка запросов готова!
Далее, ставим поле ввода и вывода результата поиска на странице сайта.
<input type="text" id="search" name="search" value="" placeholder="поиск по сайту"> <div id="search-result"><div class="search-inner"></div></div>
и далее добавляем код js в теге HEAD на странице
<script type="text/javascript"> $(document).ready(function() { function LiveAjaxMegaSearch(as) { if (as['minlength'] > as['text'].length) { $('#search-result .search-inner').empty(); $('#search-result').hide(); return false; } $.ajax({ url: 'ajaxmegasearch', type: 'post', data: { text: as['text'], minlength: as['minlength'], fields: as['fields'] }, success: function(data) { if (data) { $('#search-result .search-inner').html(data); $('#search-result').show(); } } }); } var as = []; as['minlength'] = 3; as['fields'] = 'pagetitle,longtitle'; as['text'] = $('input#search').val(); $('#search').keyup(function() { as['text'] = $(this).val(); LiveAjaxMegaSearch(as); }); }); </script>
Потом уже меняете под себя css для поля ввода поиска и показа результатов.