我们在 2sxc 内容应用程序中设置了一个链接列表。 我们所经历的是当我们将项目的状态设置为“隐藏所有内容”并保存时。 “注销”用户将看到演示链接。有什么办法可以防止这种行为吗?我们希望模块能够简单地按照它的说明进行操作,并隐藏该项目。
我认为还有 3 种状态:
因此,当我尝试将其设置为隐藏,然后保存并返回时,状态设置为草稿。
这是一个有趣的问题,2sxc 没有按照您的预期进行操作。作为开发人员或编辑者,您可能希望在登录时看到隐藏的项目(可能标记为隐藏,但可见,以便您可以编辑和/或将它们更改回非隐藏)。但作为公众/匿名人士,你不会。
出于某种原因,在这种情况下,2sxc 始终默认从视图中显示占位符(演示)项目。
因此它很容易处理,这只意味着每次您创建或修改视图时,您都希望按照您建议的方式实现行为。
你需要知道
最后一个基于前两个而改变。对于仅显示一项的基本内容项,您可以简单地从视图中检测并存在,不输出任何类似内容:
// if the current user is anonymous and the item is a demo, exit the View w/o displaying anything.
if(!Request.IsAuthenticated) {
if(Content.IsDemoItem ?? false) {
return;
}
}
如果您正在处理一个可能隐藏 1 个或多个项目的列表,那么这取决于您的编码风格。这是一个示例,我在 LINQ 中使用 .Where()...
<p>None of these items are hidden</p>
@foreach (var item in AsList(Data)
.Where(item => !(!Request.IsAuthenticated && !item.IsPublished)
)
{
<div>item.EntityTitle</div>
}
英文中的 .Where() 只是表示当前用户未经过身份验证并且当前项目未发布;所以不要将此项目包含在列表中。
但这只能解决公众的问题。正如我上面所说,编辑和管理员/主持人希望看到这些项目。
因此,不要使用 LINQ,而是将项目保留在列表中,然后在 foreach 中进行测试。如果当前用户未通过身份验证,则跳过显示。如果当前用户已通过身份验证,则显示它。另外,检查一下是否未发布并表明它是隐藏的。
@foreach (var linkItem in AsList(Data["Default"]))
{
if((!Request.IsAuthenticated) && linkItem.IsDemoItem)
{
// don't show Demo Items to anonymous users
}
else
{
<div>@linkItem.Title @(linkItem.IsPublished ? "" : "(hidden)")</div>
}
}
我从旧项目中将这些示例拼凑在一起,并在此处重新输入它们以适应上下文,它们未经测试。如果您尝试此操作并遇到问题,请发布您的代码,应该很容易获得您需要的工作。如果需要,我会更新我的示例。