最近我一直在试验EPiServerFind,我试图弄清楚如何使用通配符查询.
我遇到了以下困难:
我的一位同事用EPiServerFind建立了一个POC,遗憾的是这只搜索了整个单词.例如:如果您搜索"applepie",您将找到该页面,但搜索"apple"或"pie"将找不到该页面.我已经研究过通配符查询来解决这个问题,但是当我使用它时会得到意想不到的结果.
细节 就像我之前指出的那样,每当我查询EPiServerFind时,我只得到全字匹配.
var basicSearch = _client.Search<IContent>()
.For(q)
.InFields(x => x.Name, x => x.SearchTitle(), x => x.SearchText())
.InAllField()
.ExcludeContainerPages()
.ExcludeContentFolders()
.ExcludeDeleted()
.GetContentResult()
.Select(CreateSearchHitViewModel)
.Where(x => x != null);
Run Code Online (Sandbox Code Playgroud)
我使用了Joel Abrahamsson的一篇文章来帮助我实现通配符查询:
var wildcardSearch = _client.Search<IContent>()
.WildCardQuery(String.Format("*{0}*", q), x => x.Name)
.WildCardQuery(String.Format("*{0}*", q), x => x.SearchTitle())
.WildCardQuery(String.Format("*{0}*", q), x => x.SearchText())
.ExcludeContainerPages()
.ExcludeContentFolders()
.ExcludeDeleted()
.GetContentResult()
.Select(CreateSearchHitViewModel)
.Where(x => x != null);
Run Code Online (Sandbox Code Playgroud)
我用过这个博客:http://joelabrahamsson.com/wildcard-queries-with-EPiServer-find/
可悲的是,当我使用它时,我得到意想不到的结果 我得到了一些不相关的结果,但更多的相关结果被完全忽略了.
我不知道这个失败的地方,我希望有人能告诉我.
先感谢您.
我想实现以下目标 -
构建一个包含3个不同ContentArea的页面类型,并且用户只能在每个区域中放置特定的块类型.
例如 - ContentArea1只能接受块类型"BlockType1",ContentArea2只能接受"BlockType2"等等.(它不需要是通用的,我可以指定硬编码哪种类型应该适合每个内容区域.
有可能实现吗?也许有另一种方式?(我知道你可以用块类型创建一个属性,但我想在不同的地方使用相同的块)
ps:使用EPI-SERVER 8
我是EPiServer的初学者.我们使用EPiServer版本9.12.EPiServer.Core.ContentArea过去有一个目录列表,现在已经过时了,请参阅:http://world.episerver.com/documentation/Class-library/?documentId = cms /7.5/2843232A
图片http://jweschenfelder.de/download/Untitled.png
内容列表在过去具有以下优点:您可以读取块的名称,因为它读取了ContentArea的完整内容.检索名称会很棒,因为如果在那里创建新块,可以在CMS中对其进行配置.如果我使用现在建议的Items集合,我无法读取包含Link items集合的块的名称,我只能读取块内的Link items集合.
我已经看到了这个例子:
IContentLoader contentLoader = ServiceLocator.Current.GetInstance< IContentLoader >();
OnSiteLinkBlock itemBlock = contentLoader.Get(item.ContentLink, new LoaderOptions() { LanguageLoaderOption.MasterLanguage() });
我能够编辑OnSiteLinkBlock,但是其他属性保持为null并且不由EPiServer的ContentLoader填充(IContentLoader是EPiServer的接口).
有关类层次结构的更多信息:
- (在EPiServer.Core中)
- (BlockBase是一个自己的类)
- (OnSiteLinkBlock是一个自己的类)[AvailableContentTypes(Availability = Availability.None)]
public class BlockData : ContentData, IReadOnly< BlockData >, IReadOnlypublic abstract class BlockBase : BlockDatapublic class OnSiteLinkBlock : BlockBase
有人知道这里的解决方案吗?如何阅读ContentArea的更多属性?或者确实存在ContentArea的替代方案?非常感谢!
我正在ASP .net 4.0平台上使用EpiServer CMS 6.我可以在管理模式下创建一个属性,但有没有办法在Visual Studio中创建属性?(不一定是自定义属性,现在只是一个简单的String属性).我是否正确地说,这样做的唯一方法是使用Page Type Builder?
我正在构建一个动态页面类型,我想根据加载到特定 ContentArea 中的块加载不同的脚本。
这是区域:
[AllowedTypes(new[] { typeof(Types.SomeBlockType)})]
public virtual ContentArea SomeArea { get; set; }
Run Code Online (Sandbox Code Playgroud)
在我的页面视图中,我正在渲染内容和脚本:(脚本渲染是通过布局)
@Html.PropertyFor(...)
.
.
@section Scripts {
...//some scripts loaded
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是 SomeArea 内容块内的脚本在脚本部分之前运行。我希望在我的布局脚本和页面脚本加载后执行块脚本...
感谢任何帮助。
我需要检查内容区域是否为空,但出现错误“对象引用未设置为实例”,这是我的页面控制器,我也尝试过currentPage.TabContentArea.IsEmpty,仍然是相同的错误。内容区域是空的,这是我第一次尝试运行它,所以我需要在执行 if 语句中的代码之前检查它是否为空。
public class StandardPageController : PageController<StandardPage>
{
// GET: StandardPage
public ActionResult Index( StandardPage currentPage)
{
// this collection should be used in foreach loops
var tabItems = new List<TabViewModel>();
//this is where I get error
if(currentPage.TabContentArea.FilteredItems.Any())
{
var contentAreaItems = currentPage.TabContentArea.FilteredItems.ToList();
var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
foreach (var contentAreaItem in contentAreaItems)
{
// get an instance of Tab Block
// If you didn't set any restrictions, ContentArea can contain anything.
// We need to check if …Run Code Online (Sandbox Code Playgroud) 我打电话FindPagesWithCriteria(PageReference pageLink, PropertyCriteriaCollection criterias)的注入DataFactory,我得到一个NullReferenceException在DefaultPageCriteriaQueryService.GetProviderQueryService():
[NullReferenceException:对象引用未设置为对象的实例.]
EPiServer.Core.DefaultPageCriteriaQueryService.GetProviderQueryService(ContentProvider provider)+44
EPiServer.Core.DefaultPageCriteriaQueryService.FindPagesWithCriteriaInternal(PageReference pageLink,PropertyCriteriaCollection criterias,String languageBranch,ILanguageSelector selector,FindPagesWithCriteriaDelegate findPagesDelegate )+293
EPiServer.Core.DefaultPageCriteriaQueryService.FindPagesWithCriteria(PageReference pageLink,PropertyCriteriaCollection Criterias,String languageBranch,ILanguageSelector selector)+124
EPiServer.DataFactory.FindPagesWithCriteria(PageReference pageLink,PropertyCriteriaCollection standarderias)+115
...
我已经连接了Episerver符号服务器并逐步完成了代码,深入了解DefaultPageCriteriaQueryService我可以看到ContentProvider传入的GetProviderQueryService()是null,导致NRE.调用此方法的行是这样的:
case TypeOfSearch.Local:
return findPagesDelegate(pageLink, tempCriteria, languageBranch, selector, this.GetProviderQueryService(this._providerManager.ProviderMap.GetDefaultProvider()));
Run Code Online (Sandbox Code Playgroud)
罪魁祸首是_providerManager.ProviderMap.GetDefaultProvider()返回null因为_providerManager.ProviderMap是空的.我之前从未遇到过这个问题,如果应该初始化,我找不到有关ProviderMap的任何相关信息.
为什么我会遇到这个问题?为什么我的ProviderMap为空?我的ProviderMap应该有默认提供商吗?
我实际上并不确定这是c#本身,但我正在使用.cshtml文件(在episerver中).
我正在设置一个包含引号的字符串变量.这是一个简化版本:
@{
var backgroundcontent = "class='background' data-transition='mytransition'";
if (Model.CurrentBlock.Photo) {
backgroundcontent = "class='photo' data-transition='none'";
}
}
Run Code Online (Sandbox Code Playgroud)
当它在页面中呈现时,'如果我在标记内部渲染它,那么我会得到很好的效果,但是当我在标记本身中需要它时,我就会得到它.
我是否坚持使用html引号(并且必须做一些更复杂的事情,比如为属性设置两个变量),还是有办法覆盖它们?
所以我试图创建一个自定义登录页面而不是EPi Server.现在我使用这个tutoiral创建了一个自定义控制器和模型和页面
https://world.episerver.com/blogs/Daniel-Ovaska/Dates/2016/6/creating-a-custom-login-page/
问题是当我在浏览器窗口中键入http:// localhost:53067/LoginPage/Index时,我在下面的代码中为currenPage获取null
public ActionResult Index(LoginPage currentPage, [FromUri]string ReturnUrl)
{
/* Implementation of action. You can create your own view model class that you pass to the view or
* you can pass the page type for simpler templates */
var model = new LoginModel(currentPage);
model.LoginPostbackData.ReturnUrl = ReturnUrl;
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我在这里失踪了什么?
我刚刚在我的网站上更新了EPiServer.随着更新来了新的TinyMCE.我有一个关于如何更改格式列表内容的问题.
昨天发布了这个很好的指南(https://world.episerver.com/documentation/developer-guides/CMS/add-ons/customizing-the-tinymce-editor-v2/),它展示了如何做很多事情.但我需要知道的是如何调整格式列表的内容.例如,<h1>从format下拉列表中删除选项.
这是在JavaScript中的方法:https: //www.tinymce.com/docs/configure/editor-appearance/#menu
tinymce.init({
selector: 'textarea', // change this value according to your HTML
menu: {
format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'}
}
});
Run Code Online (Sandbox Code Playgroud)
但是我如何在TinyMCE的EPiServer C#版本中执行此操作?
toolbarSmall是我的cusom配置,它现在看起来像这样.
public void ConfigureContainer(ServiceConfigurationContext context)
{
var toolbarsSmall = new[]
{
"epi-link unlink | cut copy paste pastetext pasteword searchreplace | table",
"bold | bullist numlist hr | formatselect undo redo | | fullscreen …Run Code Online (Sandbox Code Playgroud) 在Episerver后台,我有一个内容参考,有一个PDF文件作为其数据.
在前端(Razor视图)我使用此代码输出PDF
<a href="@Url.ContentUrl(Model.PdfMedia)" class="btn btn-primary" tabindex="-1">@Model.CurrentBlock.DownloadPdfText</a>
Run Code Online (Sandbox Code Playgroud)
当用户单击此链接时,PDF将在浏览器中打开,我希望浏览器下载PDF而不是在浏览器中打开它.
我注意到的一件事是生成的URL是/ globalassets/PDF-File-Name ........但是这个URL不是PDF文件实际位置的URL,我该如何获得这个URL?我如何强制浏览器下载PDF而不是打开它?
如何在 Episerver cms 10 中获取用户请求的页面的属性值...
public string GetContent(string pageType, string propertyName)
{
Type type = Type.GetType(pageType); //target type
object o = Activator.CreateInstance(type);
var pageLink = new ContentReference();
var contentLoader= ServiceLocator.Current.GetInstance<IContentLoader>();
var content = contentLoader.Get<type>(pageLink);
var vals = content.GetPropertyValue(propertyName);
return vals;
}
Run Code Online (Sandbox Code Playgroud)
在上面的方法中,我从 url 中获取了页面名称和属性名称...因此,在此我将变量 pageType (即页面名称)转换为类并在 Get<> 方法中使用它...但它不是工作...一些机构请告诉我解决方案...或者还有其他方法可以在请求的页面中查找用户请求的属性的属性值......
episerver ×12
c# ×7
asp.net-mvc ×3
asp.net ×2
episerver-8 ×2
.net-4.0 ×1
episerver-6 ×1
episerver-7 ×1
format ×1
tinymce ×1