T.M. SoftStudio

feci quod potui, faciant meliora potentes

Vosao CMS: Сервис поиска по сайту

 

Изначально WAR-файл Vosao CMS уже содержит плагин сервиса поиска по сайту. Однако при первоначальном развертывании сайта данный плагин не работает.

 

При вводе строки поиска будет выдаваться сообщение:

 

Для включения плагина поиска необходимо зайти в Vosao-консоль и открыть меню Конфигурация, вкладку Настройки сайта и нажать кнопку Создать поисковый индекс.

После этого сервис поиска по сайту заработает.

Для использования плагина поиска на странице нужно включить JavaScript-код:

<script type="text/javascript">

$(function() {

$('#quick-search').submit(function(){onSearch(); return false;});

$('#search').focus(function(){

if ($('#search').val() == 'Search...') {

$('#search').val('');

}

});

$('#search').blur(function(){

if (!$('#search').val()) {

$('#search').val('Search...');

}

});

});

function onSearch() {

var query = $('#search').val();

if (query) {

location.href = '/search?query=' + query;

}

}

</script>

Форму ввода строки поиска:

<form id="quick-search" method="get">

<fieldset class="search">

<label for="qsearch">Search:</label>

<input class="tbox" id="search" type="text" name="qsearch" value="Search..." title="Start typing and hit ENTER" />

<button type="submit" class="btn" title="Submit Search">Search</button>

</fieldset>

</form>

И страницу вывода результатов поиска:

<h2>Search</h2>

<form id="searchForm">

<input type="text" id="query"/>

<select id="pageSize">

<option selected="selected" value="10">10</option>

<option value="25">25</option>

<option value="50">50</option>

<option value="100">100</option>

</select>

<input type="submit" value="Search"/>

<div id="searchFilter">

Search options:<br/>

<input type="checkbox" value="/" checked="checked"/>Whole site

<input type="checkbox" value="/blog"/>Blog

<input type="checkbox" value="/support" />Support

<input type="checkbox" value="/about" />About

</div>

</form>

<div id="searchCount"></div>

<div class="searchPaginator"></div>

<div id="searchResults"></div>

<div class="searchPaginator"></div>

<script type="text/javascript">

var searchPage = 0;

var searchResult = null;

var searchCount = 0;

$(function() {

try {

searchPage = Number(Vosao.getQueryParam('page'));

if (searchPage > 0) {

searchPage--;

}

} catch (e) {}

$('#searchForm').submit(function() {

searchPage = 0;

onSearch();

return false;

});

Vosao.initJSONRpc(checkQuery);

});

function checkQuery() {

var query = decodeURI(Vosao.getQueryParam('query')).replace('+', ' ');

if (query) {

$('#query').val(query);

onSearch();

}

}

function onSearch() {

$('#searchResults').html('<img src="/static/images/ajax-loader.gif" />');

$('#searchCount, .searchPaginator').html('');

var query = $('#query').val();

var pageSize = Number($('#pageSize').val());

var filter = new Array();

$('#searchFilter input[type=checkbox]:checked').each(function() {

filter.push(this.value);

});

var start = searchPage * pageSize;

Vosao.jsonrpc.searchFrontService.searchFilter(function(r) {

searchResult = r.hits.list;

searchCount = r.count;

showSearchResults();

}, Vosao.javaList(filter), query, start, pageSize, 256);

}

function showSearchResults() {

var h = '';

if (searchCount == 0) {

$('#searchCount').html('Nothing found.');

$('#searchResults, .searchPaginator').html('');

return;

}

jQuery.each(searchResult, function(i, hit) {

h += '<div class="searchItem"><div class="searchTitle">'

+ hit.localTitle

+ '</div><a href="' + hit.url + '">'

+ hit.content + '</a>'

+'</div>';

});

$('#searchResults').html(h);

$('#searchCount').html('Found ' + searchCount + ' results.');

showPaginator();

}

function showPaginator() {

var pageSize = Number($('#pageSize').val());

var query = $('#query').val();

var pagesCount = searchCount / pageSize;

var h = '';

for (var i = 0; i < pagesCount; i++) {

var href = 'href="/search?query=' + query + '&page=' + (i+1) + '"';

if (searchPage == i) {

href = 'class="current"';

}

h += '<a ' + href + ' >' + (i + 1) + '</a>';

}

$('.searchPaginator').html(h);

}

</script>