Поддержать Проект

USDT TRC20

TBGKTYDs4yzU17vQbobbUB8epFFtFb6PKh

Обратная связь

[MODX] Guru
  • Информация
  • Разработчикам
  • Дополнения
    • DocLister
    • DLMenu
    • DLCrumbs
    • DLBuildMenu
    • DLLastViews
    • DLSiblings
    • DLRequest
    • DLglossary
    • DLSitemap
    • DocInfo
    • FormLister
    • Wayfinder
    • phpthumb
    • LikeDislike
    • eForm
    • Ditto
    • multiTV
    • AjaxMegaSearch
    • AjaxSearch
    • WebLoginPE
    • Breadcrumbs
    • CodeMirror
    • AnythingRating
    • Easy Newsletter
    • FirstChildRedirect
    • OpenGraphTags
    • ddTypograph
    • TagSaver
    • BlackList
    • CfgTv
    • ModxAccount
    • Forgot Manager Login
    • GetField
    • if
    • Jot
    • ListChild
    • ListIndexer
    • ManagerManager
    • ddMMEditor
    • MaxiGallery
    • MemberCheck
    • ddGetMultipleField
    • MetaX
    • MODxBB и phpBB
    • Yams
    • Personalize
    • PHx
    • Reflect
    • tagLinks
    • TransAlias
    • TvTagCloud
    • UltimateParent
    • WebSignup
    • WebLogin
    • countViews
    • thumb
    • imageCaptor
    • optimizeJPG
    • Preview Next
    • Shopkeeper
    • SiteMap
    • Sass
    • Selector
    • SimpleGallery
    • SimpleTube
    • SimpleFiles
    • Star Rating
    • MinifyX
    • adminNav
    • SimplePolls
    • CResource
    • MODxAPI
    • customTables
    • HtmlInLine
    • HtmlMinModxEvo
    • SHKUserProfile
    • PickDocsInTree
    • evoSearch
    • editDocs
    • PageBuilder
    • HybridAuth
    • Compare
    • alterTitle
  • Виджеты
  • Уроки
  • Разработчики
  • Готовые примеры
  • Блог
  • Конфиги
  • HTML коды
© [MODX] Guru
  • Дополнения
  • avatar
    • Автор: 64j

AjaxMegaSearch – живой поиск по сайту

  • Дополнения
  • AjaxMegaSearch
Поддержать: USDT TRC20: TBGKTYDs4yzU17vQbobbUB8epFFtFb6PKh
4044

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 для поля ввода поиска и показа результатов.