2sxc 中的内容模块(链接列表)问题

问题描述 投票:0回答:1

我们在 2sxc 内容应用程序中设置了一个链接列表。 我们所经历的是当我们将项目的状态设置为“隐藏所有内容”并保存时。 “注销”用户将看到演示链接。有什么办法可以防止这种行为吗?我们希望模块能够简单地按照它的说明进行操作,并隐藏该项目。

我认为还有 3 种状态:

  • 显示/发布所有内容
  • 隐藏一切
  • 草稿/隐藏更改

因此,当我尝试将其设置为隐藏,然后保存并返回时,状态设置为草稿。

dotnetnuke 2sxc
1个回答
0
投票

这是一个有趣的问题,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>
  }
}

我从旧项目中将这些示例拼凑在一起,并在此处重新输入它们以适应上下文,它们未经测试。如果您尝试此操作并遇到问题,请发布您的代码,应该很容易获得您需要的工作。如果需要,我会更新我的示例。

© www.soinside.com 2019 - 2024. All rights reserved.