Как настроить таргетинг на элементы HTML при входе в DNN - PullRequest
1 голос
/ 03 августа 2011

Глупый вопрос, и я надеюсь, что я просто упустил это.В 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]

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Я бы сказал, что это довольно необычная задача, потому что этот тип логики обычно обрабатывается на стороне сервера, а не на стороне клиента. Это потому, что вы обычно не хотите увеличивать полезную нагрузку клиента больше, чем вам нужно - и если пользователь не вошел в систему - он никогда не будет нуждаться в этом контенте. Кроме того, очевидно, что при работе с конфиденциальными данными существуют последствия для безопасности, поскольку информация легко просматривается в базовой разметке.

За исключением всех заявлений об отказе. Если вы действительно хотите это сделать, я думаю, что лучшим решением было бы просто заставить сайт работать так же, как вы привыкли в Sitefinity. В DNN вы должны создать контейнер, который содержит соответствующую логику. Контейнер оборачивает каждый модуль, и внутри контейнера у вас есть возможность написать любой код (сервер или клиент), чтобы сделать ваш контейнер динамическим.

Для этого примера грубой силы я изменил контейнер "Invisible.ascx", который поставляется со скином DarkKnight в 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>

Если вы хотите везде использовать эту логику, я бы просто улучшил каждый из контейнеров, которые вы используете в данный момент, с помощью этого типа логики.

0 голосов
/ 15 августа 2011

В DotNetNuke это контролируется правами доступа, которые можно назначать страницам или отдельным модулям (конкретному контенту).По умолчанию новые страницы будут иметь разрешения VIEW для «Все пользователи», а новое содержимое, созданное на странице, будет наследовать это разрешение.

Чтобы изменить это, выберите настройки для конкретного содержимого, снимите флажок «Inherit View Permissions from Page. Это активирует флажки для всех различных ролей. Затем просто убедитесь, что все пользователи не выбраны, и вместо этого выберите «Registered Users». Это сделает контент видимым для любого пользователя, вошедшего вthe site.

Это сверхмощная модель разрешений, которая фактически контролирует рендеринг, а не просто скрывает видимость.

0 голосов
/ 03 августа 2011

Вы можете использовать SkinObject для этого в dnn. Объект обложки входа поможет вам показать вход / выход из системы ИЛИ Regiter, объект обложки пользователя поможет вам показать пользователя, вошедшего в данный момент. Вы можете использовать любой стиль и Div, который вы хотите.

...