Batuhan
06/06/2024, 5:11 PMBatuhan
06/06/2024, 5:11 PMnamespace YOURNAMSPACE.Controllers
{
using Examine;
using Umbraco.Cms.Core.Web;
public class SearchController : Controller
{
private readonly IUmbracoContextFactory _umbracoContextFactory;
private readonly IExamineManager _examineManager;
public SearchController(IUmbracoContextFactory umbracoContextFactory, IExamineManager examineManager)
{
_umbracoContextFactory = umbracoContextFactory;
_examineManager = examineManager;
}
[HttpPost]
[Route("umbraco/surface/Search/Search")]
public IActionResult Search([FromForm] string query)
{
var searchResults = PerformSearch(query);
return new JsonResult(new {
query = query,
count = searchResults.Count(),
results = searchResults.Select(result => new {
primary = result.Name,
secondary = result.Url
})
});
}
private IEnumerable<IPublishedContent> PerformSearch(string query)
{
using (var umbracoContextReference = _umbracoContextFactory.EnsureUmbracoContext())
{
var examineManager = umbracoContextReference.UmbracoContext.ScopeProvider.Resolve<IExamineManager>();
var searchProvider = examineManager.TryGetIndex(Constants.UmbracoIndexes.ExternalIndexName);
var searcher = searchProvider.GetSearcher();
var results = searcher.Search(query);
return results.Select(result =>
{
var umbracoHelper = umbracoContextReference.UmbracoContext.UmbracoHelper;
return umbracoHelper.Content.GetById(int.Parse(result.Id));
}).Where(result => result != null);
}
}
}
}
Batuhan
06/06/2024, 5:11 PM$(document).ready(function() {
$('#searchInput').on('input', function() {
var query = $(this).val();
if (query.length >= 3) { // Minimum 3 karakterle arama başlasın
$.ajax({
type: "POST",
url: "/umbraco/surface/controllers/Search",
data: { query: query },
success: function(response) {
$('#searchTerm').text('“' + response.query + '”');
$('#searchResultCount').text(response.count);
if (response.count > 0) {
var resultsHtml = '';
$.each(response.results, function(index, result) {
resultsHtml += '<div class="search-result-item">';
resultsHtml += '<span class="item-primary">' + result.primary + '</span>';
resultsHtml += '<span class="item-secondary">' + result.secondary + '</span>';
resultsHtml += '</div>';
});
$('#searchResultsList').html(resultsHtml);
$('#searchResults').removeClass('d-none');
$('#searchNotFound').addClass('d-none');
} else {
$('#searchResults').addClass('d-none');
$('#searchNotFound').removeClass('d-none');
}
$('#searchInfoArea').removeClass('d-none');
}
});
} else {
$('#searchInfoArea').addClass('d-none');
$('#searchResults').addClass('d-none');
$('#searchNotFound').addClass('d-none');
}
});
});
`
Batuhan
06/06/2024, 5:11 PM0>SearchController.cs(40,21): Error CS0828 : Cannot assign 'method group' to anonymous type property
0>SearchController.cs(49,77): Error CS1061 : 'IUmbracoContext' does not contain a definition for 'ScopeProvider' and no accessible extension method 'ScopeProvider' accepting a first argument of type 'IUmbracoContext' could be found (are you missing a using directive or an assembly reference?)
0>SearchController.cs(57,80): Error CS1061 : 'IUmbracoContext' does not contain a definition for 'UmbracoHelper' and no accessible extension method 'UmbracoHelper' accepting a first argument of type 'IUmbracoContext' could be found (are you missing a using directive or an assembly reference?)
0>SearchController.cs(58,68): Error CS1503 : Argument 1: cannot convert from 'method group' to 'System.ReadOnlySpan<byte>'
Batuhan
06/06/2024, 5:11 PMA hub and casual space for you to interact with fellow community members and learn more about Umbraco!
Powered by