From 06bc8f688827af3efc8d9389db6eae07ac82eb32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Ros?= <> Date: Tue, 27 Jul 2010 19:44:39 -0700 Subject: [PATCH 1/2] When a content item is modified the indexing events are fired --HG-- branch : dev --- .../Handlers/CreateIndexingTaskHandler.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs b/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs index 48eea68d1..ac81239d5 100644 --- a/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs @@ -2,6 +2,7 @@ using Orchard.ContentManagement; using Orchard.Core.Common.Models; using Orchard.Tasks.Indexing; +using System.Collections.Generic; namespace Orchard.Indexing.Handlers { /// @@ -9,9 +10,14 @@ namespace Orchard.Indexing.Handlers { /// is published, and to delete them when the content item is unpublished. /// public class CreateIndexingTaskHandler : ContentHandler { + private const string SearchIndexName = "Search"; private readonly IIndexingTaskManager _indexingTaskManager; + private readonly IEnumerable _indexNotifierHandlers; - public CreateIndexingTaskHandler(IIndexingTaskManager indexingTaskManager) { + public CreateIndexingTaskHandler( + IIndexingTaskManager indexingTaskManager, + IEnumerable indexNotifierHandlers + ) { _indexingTaskManager = indexingTaskManager; OnPublishing>(CreateIndexingTask); @@ -26,5 +32,10 @@ namespace Orchard.Indexing.Handlers { _indexingTaskManager.CreateDeleteIndexTask(context.ContentItem); } + private void UpdateIndex() { + foreach (var handler in _indexNotifierHandlers) { + handler.UpdateIndex(SearchIndexName); + } + } } } From 999369225ea9b308a88469a5a07c4faac7398b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Ros?= <> Date: Tue, 27 Jul 2010 19:46:07 -0700 Subject: [PATCH 2/2] When a search result doesn't exist, it is not displayed - Might occur when a deleted content is searched before the index is updated (short time), eventually when the search is triggered on another server of a farm --HG-- branch : dev --- .../Modules/Orchard.Search/Controllers/SearchController.cs | 1 + src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx | 2 +- src/Orchard/ContentManagement/DefaultContentManager.cs | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs index eb6bbfb43..8d1c11747 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs @@ -5,6 +5,7 @@ using Orchard.Search.Services; using Orchard.Search.ViewModels; using Orchard.Settings; using Orchard.Search.Models; +using System.Linq; using System; namespace Orchard.Search.Controllers { diff --git a/src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx b/src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx index d51a45cfe..fd5b331c8 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx +++ b/src/Orchard.Web/Modules/Orchard.Search/Views/Search/Index.ascx @@ -12,6 +12,6 @@ if (!string.IsNullOrWhiteSpace(Model.Query)) { } } if (Model.PageOfResults != null && Model.PageOfResults.Count() > 0) { %> -<%=Html.UnorderedList(Model.PageOfResults, (r, i) => Html.DisplayForItem(r.Content) , "search-results contentItems") %> +<%=Html.UnorderedList(Model.PageOfResults.Where(hit => hit.Content != null), (r, i) => Html.DisplayForItem(r.Content), "search-results contentItems")%> <%=Html.Pager(Model.PageOfResults, Model.PageOfResults.PageNumber, Model.DefaultPageSize, new {q = Model.Query}) %><% } %> \ No newline at end of file diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index af8338985..f30e1e566 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -385,6 +385,9 @@ namespace Orchard.ContentManagement { } public ContentItemViewModel BuildDisplayModel(TContentPart content, string displayType) where TContentPart : IContent { + if (content == null) + return null; + var displayModel = new ContentItemViewModel(content); var context = new BuildDisplayModelContext(displayModel, displayType); foreach (var handler in Handlers) {