- Readding Orchard.Search

--HG--
branch : dev
This commit is contained in:
Suha Can 2010-09-15 15:31:24 -07:00
parent 10e8cdff67
commit a0175b5129
13 changed files with 82 additions and 66 deletions

View File

@ -1,15 +1,20 @@
using System.Web.Mvc;
using Orchard.Mvc.Filters;
using Orchard.Mvc.ViewModels;
using Orchard.Search.ViewModels;
namespace Orchard.Search.Filters {
public class SearchFilter : FilterProvider, IResultFilter {
public void OnResultExecuting(ResultExecutingContext filterContext) {
var viewModel = filterContext.Controller.ViewData.Model as BaseViewModel;
private readonly IWorkContextAccessor _workContextAccessor;
if (viewModel != null)
viewModel.Zones.AddRenderPartial("search", "SearchForm", viewModel is SearchViewModel ? viewModel : new SearchViewModel());
public SearchFilter(IWorkContextAccessor workContextAccessor) {
_workContextAccessor = workContextAccessor;
}
public void OnResultExecuting(ResultExecutingContext filterContext) {
dynamic search = filterContext.Controller.ViewData.Model;
var workContext = _workContextAccessor.GetContext(filterContext);
if (search != null)
workContext.Page.Search.Add(search);
}
public void OnResultExecuted(ResultExecutedContext filterContext) {

View File

@ -49,7 +49,7 @@
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
@ -90,14 +90,16 @@
<Content Include="Module.txt" />
<Content Include="Styles\admin.css" />
<Content Include="Styles\search.css" />
<Content Include="Views\EditorTemplates\Parts\Search.SiteSettings.ascx" />
<Content Include="Views\SearchForm.ascx" />
<Content Include="Views\Search\Index.ascx" />
<Content Include="Views\Web.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Web.config" />
</ItemGroup>
<ItemGroup>
<None Include="Views\EditorTemplates\Parts\Search.SiteSettings.cshtml" />
<None Include="Views\SearchForm.cshtml" />
<None Include="Views\Search\Index.cshtml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@ -1,9 +1,9 @@
using Orchard.Indexing;
using Orchard.Mvc.ViewModels;
using Orchard.ContentManagement;
using Orchard.Indexing;
namespace Orchard.Search.ViewModels {
public class SearchResultViewModel {
public ISearchHit SearchHit { get; set; }
public ContentItemViewModel Content { get; set; }
public IContent Content { get; set; }
}
}

View File

@ -1,8 +1,7 @@
using Orchard.Mvc.ViewModels;
using System.Collections.Generic;
using System.Collections.Generic;
namespace Orchard.Search.ViewModels {
public class SearchSettingsViewModel : BaseViewModel {
public class SearchSettingsViewModel {
public IList<SearchSettingsEntry> Entries { get; set; }
}

View File

@ -1,8 +1,7 @@
using Orchard.Collections;
using Orchard.Mvc.ViewModels;
namespace Orchard.Search.ViewModels {
public class SearchViewModel : BaseViewModel {
public class SearchViewModel {
public string Query { get; set; }
public int DefaultPageSize { get; set; }
public IPageOfItems<SearchResultViewModel> PageOfResults { get; set; }

View File

@ -1,23 +0,0 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<SearchSettingsViewModel>" %>
<%@ Import Namespace="Orchard.Search.ViewModels"%>
<fieldset>
<legend><%: T("Search")%></legend>
<%-- TODO: (sebros) Implementation details after Alpha
<div>
<%: Html.EditorFor(m => m.FilterCulture) %>
<label class="forcheckbox" for="SearchSettings_FilterCulture"><%: T("Search results must be filtered with current culture")%></label>
<%: Html.ValidationMessage("FilterCulture", "*")%>
</div>
--%>
<div>
<%
for(var i=0; i<Model.Entries.Count; i++) {
var j = i;%>
<input type="checkbox" value="true" <% if(Model.Entries[j].Selected ) { %> checked="checked" <% } %>
name="<%:Html.FieldNameFor(m => m.Entries[j].Selected)%>" id="<%:Html.FieldIdFor(m => m.Entries[j].Selected)%>"/>
<%: Html.HiddenFor(m => m.Entries[j].Field)%>
<label class="forcheckbox" for="<%:Html.FieldIdFor(m => m.Entries[j].Selected)%>"><%: Model.Entries[j].Field%></label>
<%
}%>
</div>
</fieldset>

View File

@ -0,0 +1,22 @@
@model Orchard.Search.ViewModels.SearchSettingsViewModel
@using Orchard.Search.ViewModels
<fieldset>
<legend>@T("Search")</legend>
<div>
@{var entryIndex = 0;}
@if (Model.Entries != null) {
foreach(var modelEntry in Model.Entries) {
if(Model.Entries[entryIndex].Selected) {
<input type="checkbox" value="true" checked="checked" name="@Html.FieldNameFor(m => m.Entries[entryIndex].Selected)" id="@Html.FieldIdFor(m => m.Entries[entryIndex].Selected)"/>
}
else {
<input type="checkbox" value="true" name="@Html.FieldNameFor(m => m.Entries[entryIndex].Selected)" id="@Html.FieldIdFor(m => m.Entries[entryIndex].Selected)"/>
}
@Html.HiddenFor(m => m.Entries[entryIndex].Field)
<label class="forcheckbox" for="@Html.FieldIdFor(m => m.Entries[entryIndex].Selected)">@Model.Entries[entryIndex].Field</label>
entryIndex = entryIndex + 1;
}
}
</div>
</fieldset>

View File

@ -1,17 +0,0 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Search.ViewModels.SearchViewModel>" %>
<% Html.RegisterStyle("search.css"); %>
<h1><%:Html.TitleForPage(T("Search").Text)%></h1><%
Html.Zone("search");
if (!string.IsNullOrWhiteSpace(Model.Query)) {
if (Model.PageOfResults.Count() == 0) { %>
<p class="search-summary"><%=T.Plural("the <em>one</em> result", "<em>zero</em> results", Model.PageOfResults.Count()) %></p><%
}
else { %>
<p class="search-summary"><%=T.Plural("the <em>one</em> result", "<em>{1} - {2}</em> of <em>{0}</em> results", Model.PageOfResults.TotalItemCount, Model.PageOfResults.StartPosition, Model.PageOfResults.EndPosition)%></p><%
}
}
if (Model.PageOfResults != null && Model.PageOfResults.Count() > 0) { %>
<%=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}) %><%
} %>

View File

@ -0,0 +1,15 @@
@model Orchard.Search.ViewModels.SearchViewModel
<h1>@Html.TitleForPage(T("Search").Text)</h1>
@Html.Zone("search")
@if (!string.IsNullOrWhiteSpace(Model.Query)) {
@if (Model.PageOfResults.Count() == 0) {
<p class="search-summary">@T.Plural("the <em>one</em> result", "<em>zero</em> results", Model.PageOfResults.Count())</p>
} else {
<p class="search-summary">@T.Plural("the <em>one</em> result", "<em>{1} - {2}</em> of <em>{0}</em> results", Model.PageOfResults.TotalItemCount, Model.PageOfResults.StartPosition, Model.PageOfResults.EndPosition)</p>
}
}
@if (Model.PageOfResults != null && Model.PageOfResults.Count() > 0) {
@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})
}

View File

@ -1,8 +0,0 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<SearchViewModel>" %>
<%@ Import Namespace="Orchard.Search.ViewModels" %><%
using(Html.BeginForm("index", "search", new { area = "Orchard.Search" }, FormMethod.Get, new { @class = "search" })) { %>
<fieldset>
<%: Html.TextBox("q", Model.Query) %>
<button type="submit"><%: T("Search") %></button>
</fieldset><%
} %>

View File

@ -0,0 +1,9 @@
@model Orchard.Search.ViewModels.SearchViewModel
@using Orchard.Search.ViewModels
@using(Html.BeginForm("index", "search", new { area = "Orchard.Search" }, FormMethod.Get, new { @class = "search" })) {
<fieldset>
@Html.TextBox("q", Model.Query)
<button type="submit">@T("Search")</button>
</fieldset>
}

View File

@ -74,6 +74,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.ArchiveLater", "Orc
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Indexing", "Orchard.Web\Modules\Orchard.Indexing\Orchard.Indexing.csproj", "{EA2B9121-EF54-40A6-A53E-6593C86EE696}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Search", "Orchard.Web\Modules\Orchard.Search\Orchard.Search.csproj", "{4BE4EB01-AC56-4048-924E-2CA77F509ABA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
CodeCoverage|Any CPU = CodeCoverage|Any CPU
@ -383,6 +385,16 @@ Global
{EA2B9121-EF54-40A6-A53E-6593C86EE696}.FxCop|Any CPU.Build.0 = Release|Any CPU
{EA2B9121-EF54-40A6-A53E-6593C86EE696}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EA2B9121-EF54-40A6-A53E-6593C86EE696}.Release|Any CPU.Build.0 = Release|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.CodeCoverage|Any CPU.Build.0 = Release|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.Coverage|Any CPU.Build.0 = Release|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.FxCop|Any CPU.ActiveCfg = Release|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.FxCop|Any CPU.Build.0 = Release|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4BE4EB01-AC56-4048-924E-2CA77F509ABA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -404,6 +416,7 @@ Global
{14C049FD-B35B-415A-A824-87F26B26E7FD} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{1C981BB3-26F7-494C-9005-CC27A5144233} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{EA2B9121-EF54-40A6-A53E-6593C86EE696} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{4BE4EB01-AC56-4048-924E-2CA77F509ABA} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{ABC826D4-2FA1-4F2F-87DE-E6095F653810} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}
{F112851D-B023-4746-B6B1-8D2E5AD8F7AA} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}
{6CB3EB30-F725-45C0-9742-42599BA8E8D2} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}