如何在登录到DNN时瞄准html元素



愚蠢的问题,我希望我只是忽略了这一点。在Sitefinity中,一旦你登录了,就有一个包装div,只有当你登录时,你才能使用它来定位某些html标签。

我在DNN中没有看到这样的东西,想知道是否有人知道这个问题的解决方案?

我想要的是这样的:

[div class="dnn-logged-in"] 
   [div class="my-content-wrapper"] 
      [div class="elements-i-would-like-to-show-or-hide] 
         Hide or show this if I am logged in or not 
      [/div] 
   [/div] 
[/div]

多谢!

我想说这是一个相当罕见的任务,因为这种类型的逻辑通常是在服务器端处理的,而不是在客户端。这是因为您通常不希望增加超出您需要的客户端负载—如果用户没有登录—他们将永远不需要这些内容。此外,如果处理敏感数据,显然存在安全隐患——因为这些信息很容易在底层标记中查看。

撇开所有的免责声明不谈,如果你真的想这样做,我认为最好的解决方案就是让网站像你在Sitefinity中习惯的那样工作。在DNN中,您将创建包含适当逻辑的容器。容器包装了每个模块,在容器中,你可以编写任何代码(服务器端或客户端)来使你的容器动态。

对于这个蛮力示例,我修改了"Invisible"。在DNN 6中与黑暗骑士皮肤一起发货的容器:

<%@ Control language="C#" AutoEventWireup="false" Inherits="DotNetNuke.UI.Containers.Container" %>
<%
  var isLoggedIn = HttpContext.Current.User.Identity.IsAuthenticated;
  if (isLoggedIn)
  {
%>
<div class="dnn-logged-in">
<% } %>
<div class="Invisible"><div id="ContentPane" runat="server"></div></div>
<% if (isLoggedIn) { %>
</div>
<% } %>

这将在未验证时产生以下HTML:

<div class="DnnModule DnnModule-DNN_HTML DnnModule-364">
  <a name="364"></a>
  <div class="Invisible">
    <div id="dnn_ctr364_ContentPane">
      [Dynamic Content Here]
    </div>
  </div>
</div>

,当您通过身份验证时:

<div class="DnnModule DnnModule-DNN_HTML DnnModule-364">
  <a name="364"></a>
  <div class="dnn-logged-in">
    <div class="Invisible">
      <div id="dnn_ctr364_ContentPane">
      [Dynamic Content Here]
      </div>
    </div>
  </div>
</div>

如果你想要这种逻辑无处不在,我只是增强每个容器,你目前使用这种类型的逻辑。

您可以在dnn中使用SkinObject来这样做。登录皮肤对象将帮助您显示登录/注销或注册,用户皮肤对象将帮助您显示当前登录的用户。你可以使用任何你想要的样式和div。

在DotNetNuke中,这是由权限控制的,可以分配给页面或单个模块(特定内容)。默认情况下,新页面将具有"All Users"的VIEW权限,并且在该页面上创建的新内容将继承该权限。

要更改此设置,请选择特定内容的设置,取消选中"从页面继承视图权限"。这将为所有不同的角色启用复选框。然后只需确保未选中"所有用户",而选择"注册用户"。这将使任何登录到该站点的用户都可以看到该内容。

这是一个超级强大的权限模型,它实际上可以控制渲染,而不仅仅是模糊可见性。

最新更新