private string getItemDisplay(IndexableFileInfo fileInfo, string defaultOutputTemplate) { /* * Item Output Template String Format: * {0} = Page's Title * {1} = Page's MenuTitle * {2} = Page's relative URL * {3} = the search string snippet to display for this page * {4} = Page's breadcrumb created using MenuTitle's, concatenated using ' > ' spacers * {5} = "odd" or "even" * */ CmsPage targetPage = getPageFromIndex(fileInfo); // allow per-template ItemTemplates string itemOutputTemplate = CmsControlUtils.getControlParameterKeyValue(CmsContext.currentPage, this, "ItemTemplate_" + targetPage.TemplateName, defaultOutputTemplate); string url = targetPage.Url; if (fileInfo.FilenameParameters != "") { if (url.IndexOf("?") > -1) { url += "&" + fileInfo.FilenameParameters; } else { url += "?" + fileInfo.FilenameParameters; } } string ItemBreadcrumb = getItemBreadcrumbOutput(targetPage); string OddOrEven = "even"; if (oddItem) { OddOrEven = "odd"; } oddItem = !oddItem; try { string ret = String.Format(itemOutputTemplate, targetPage.Title, targetPage.MenuTitle, url, StringUtils.StripHTMLTags(fileInfo.Contents), ItemBreadcrumb, OddOrEven); return(ret); } catch (Exception fEx) { throw new Exception("Search Item Display Template error (url: \"" + url + "\"); template: (" + itemOutputTemplate + ")"); } return(""); }
private static IndexableFileInfo[] indexStandardPage(CmsPage page) { List <IndexableFileInfo> ret = new List <IndexableFileInfo>(); foreach (CmsLanguage lang in CmsConfig.Languages) { string desc = page.getSearchEngineDescription(lang); if (desc.Trim() != "") { // -- use the searchEngineDescription IndexableFileInfo fInfo = new IndexableFileInfo(getPageFilenameForIndex(page), "", page.Title, desc, lang.shortCode, page.LastUpdatedDateTime, true); return(new IndexableFileInfo[] { fInfo }); } else { string content = PageUtils.StripTags(page.renderAllPlaceholdersToString(lang, CmsPage.RenderPlaceholderFilterAction.RunAllPageAndPlaceholderFilters)); IndexableFileInfo fInfo = new IndexableFileInfo(getPageFilenameForIndex(page), "", page.Title, content, lang.shortCode, page.LastUpdatedDateTime, false); ret.Add(fInfo); } } // foreach language return(ret.ToArray()); }
/// <summary> /// if the language is not found, returns the Invalid language (that has .isInvalidLanguage set to TRUE) /// </summary> /// <param name="fi"></param> /// <returns></returns> private CmsLanguage getLanguageFromIndex(IndexableFileInfo fi) { return(CmsLanguage.GetFromHaystack(fi.SectionName, CmsConfig.Languages)); }
private CmsPage getPageFromIndex(IndexableFileInfo fi) { return(CmsContext.getPageById(Convert.ToInt32(fi.Filename))); }
protected override void Render(System.Web.UI.HtmlTextWriter writer) { CmsPage currentPage = CmsContext.currentPage; /* * Item Output Template String Format: * {0} = Page's Title * {1} = Page's MenuTitle * {2} = Page's relative URL * {3} = the search string snippet to display for this page * {4} = Page's breadcrumb created using MenuTitle's, concatenated using ' > ' spacers * {5} = "odd" or "even" * */ string defaultItemTemplate = "<div class=\"SearchResultItem {5}\"><a class=\"SearchResultItemLink\" href=\"{2}\">{0}</a><br/><blockquote class=\"SearchResultInfo\"><div class=\"Snippet\">{3}</div><div class=\"SearchResultItemBreadcrumb\">{4}</div></blockquote></div>"; string itemOutputTemplate = CmsControlUtils.getControlParameterKeyValue(CmsContext.currentPage, this, "ItemTemplate", defaultItemTemplate); string action = PageUtils.getFromForm("action", ""); StringBuilder html = new StringBuilder(); html.Append("<div class=\"SearchResults\">"); if (action == "re-Index All Pages" || action.ToLower() == "reindexall") { ReIndexAllPages(); html.Append("<p><strong>All Pages have been re-indexed</strong><p>"); } string noQuery = Guid.NewGuid().ToString(); string query = PageUtils.getFromForm("q", noQuery); html.Append("<div class=\"SearchBox\">"); // -- output search box string formId = "SearchResults"; html.Append(currentPage.getFormStartHtml(formId)); if (query == noQuery) { html.Append(PageUtils.getInputTextHtml("q", "queryBox", "", 20, 255)); } else { html.Append(PageUtils.getInputTextHtml("q", "queryBox", query, 20, 255)); } html.Append("<input type=\"submit\" value=\"search\">"); // -- output doIndex button if (CmsContext.currentUserIsSuperAdmin) { html.Append(" Admin:<input type=\"submit\" name=\"action\" value=\"re-Index All Pages\">"); } html.Append(currentPage.getFormCloseHtml(formId)); html.Append("</div>"); html.Append("<p>"); LuceneKeywordSearch search = new LuceneKeywordSearch(IndexStorageDirectory, SpellCheckIndexStorageDirectory); if (query != noQuery) { // -- do the search with keyword highlighting IndexableFileInfo[] fileInfos = search.doSearch(query, query); fileInfos = getFileInfosForCurrentLanguage(fileInfos); // -- output the results if (fileInfos.Length < 1) { // -- no results html.Append("<strong>Your search for \"" + query + "\" returned no results</strong>"); // -- get spelling suggestion string spellingSuggestion = search.getSpellingSuggestion(query); if (spellingSuggestion.Trim() != query.Trim()) { NameValueCollection p = new NameValueCollection(); p.Add("q", spellingSuggestion); string newSearchUrl = CmsContext.getUrlByPagePath(CmsContext.currentPage.Path, p); html.Append("<p><font color=\"#cc0000\">Did you mean:</font> \"<a href=\"" + newSearchUrl + "\">" + spellingSuggestion + "</a>\" <font color=\"#cc0000\">?</font></p>"); } } else { html.Append("<strong>Your search for \"" + query + "\" returned " + fileInfos.Length + " results</strong><p>"); html.Append("<p>" + getPagerOutput(fileInfos) + "</p>"); int startAtItemNumber = PageUtils.getFromForm("num", 0); if (startAtItemNumber >= fileInfos.Length) { startAtItemNumber = fileInfos.Length - 1; } int endAt = Math.Min(startAtItemNumber + numItemsPerPage - 1, fileInfos.Length - 1); if (startAtItemNumber == 0 && endAt == 0 && fileInfos.Length == 1) { html.Append(getItemDisplay(fileInfos[0], itemOutputTemplate)); } else { for (int i = startAtItemNumber; i <= endAt; i++) { if (endAt <= 0) { break; } IndexableFileInfo fileInfo = fileInfos[i]; html.Append(getItemDisplay(fileInfo, itemOutputTemplate)); } // for html.Append("<p>" + getPagerOutput(fileInfos) + "</p>"); } // else } } // if query != noQuery html.Append("</div>"); writer.WriteLine(html.ToString()); } // Render