2009-12-17 3 views
0

У меня есть страница регистрации в Dotnetnuke. Я хочу получить подтверждение по электронной почте, потому что многие наши пользователи ошибочно вводят свой адрес электронной почты.Подтвердить адрес электронной почты на Dotnetnuke Регистрация

Я просмотрел эти семь способов в воскресенье и не могу понять, как это осуществить. Я прорыл круговую логику для отображения формы (я думаю), и я не могу найти подходящее место для захвата. Конечно, было бы неплохо, если бы был простой «registration.ascx», я мог бы его закодировать, но если есть, я не могу его найти.

Любая помощь была бы принята с благодарностью.

TIA.

ответ

0

Я хотел задокументировать решение, которое я преследовал для этого, для всех, кто пришел.

Прежде всего это хрупкий клоч; я имею в виду, что любые изменения в регистрации, сделанные через соответствующие каналы в DNN, могут нарушить это. Любые изменения стиля могут разбить его. Это хрупкий клоч ... что ты собираешься делать. С другой стороны, это был очень небольшой объем усилий, и конечный пользователь понятия не имел, что это kludge.

В версии DNN, с которой я работал, файлы регистрации пользователя хранятся в пользовательском элементе управления под admin/users/user.ascx. Фактический код испускается из вложенного пользовательского элемента управления. Я не мог зацепиться за это, не врываясь в источник для DNN (это, конечно же, еще один вариант), но в итоге все, что я хотел сделать, это поместить другое текстовое поле сразу после него и убедиться, что адреса электронной почты соответствует.

Так что это именно то, что я сделал:

<dnn:propertyeditorcontrol id="UserEditor" runat="Server" 
    enableClientValidation = "true" 
    sortmode="SortOrderAttribute" 
    labelstyle-cssclass="SubHead" 
    helpstyle-cssclass="Help" 
    editcontrolstyle-cssclass="NormalTextBox" 
    labelwidth="200px" 
    editcontrolwidth="200px" 
    width="400px" 
    editmode="Edit" 
    errorstyle-cssclass="NormalRed"/> 
    <!-- new code starts here --> 
    <span id="spanEmailConfirm" style="display: inline-block; width: 400px;"> 
     <table cellpadding="0" style="margin-left:3px" cellspacing="0" border="0"> 
      <tr> 
       <td> 
        <div style="width: 400px;"> 
         <div style="border:0px solid black; float: left; width: 200px;"> 
          <img onclick="toggleDisplay('divHelpConfirmEmailAddress');" style="border-width: 0px;" alt="Enter a valid confirmation Email address" src="/images/help.gif" title="Enter a valid confirmation Email address" tabindex="-1" id="imgConfirmEmail"/> 
          <asp:Label runat="server" ID="lblConfirmEmail" class="SubHead"> 
           Confirm Email Address: 
          </asp:Label> 
         </div> 
         <div style="float: right; width: 200px;"> 
          <asp:TextBox class="NormalTextBox" onblur="validateEmail();" runat="server" id="txtConfirmEmail" /><img style="border-width: 0px;" alt="Email confirmation is required" src="/images/required.gif" title="Email confirmation is required"/> 
         </div> 
        </div>    
       </td> 
      </tr> 
      <tr> 
       <td> 
        <asp:RequiredFieldValidator runat="server" ID="reqEmailConfirm" CssClass="NormalRed" ControlToValidate="txtConfirmEmail" ErrorMessage="You must enter a valid confirmation email address." Display="Dynamic"></asp:RequiredFieldValidator> 
        <asp:CustomValidator runat="server" ID="reqEmailsMatch" CssClass="NormalRed" ControlToValidate="txtConfirmEmail" ValidateEmptyText="false" ClientValidationFunction="validateEmail" Display="Dynamic" ErrorMessage="Email confirmation value must match the email value."></asp:CustomValidator> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <div style="width:200px; display:none" class="Help" id="divHelpConfirmEmailAddress"> 
         <span id="spanConfirmEmail">Confirm your email address.</span> 
        </div> 
       </td> 
      </tr> 
     </table> 
    </span> 
    <!-- new code ends here --> 

Это вызывает следующий JavaScript, который я внедренный в другом месте в ASCX:

<script type="text/javascript"> 
    function validateEmail(sender, args) { 
     var emailControlName; 
     emailControlName = "dnn$ctr459$ManageUsers$User$UserEditor$ctl04$Email"; 

     var emailControl = document.getElementsByName(emailControlName)[0]; 

     args.IsValid = (emailControl.value == args.Value); 
    } 

    function toggleDisplay(controlId) { 
     var control = document.getElementById(controlId); 

     if (control.style["display"] == "block") { 
      control.style["display"] = "none"; 
     } else { 
      control.style["display"] = "block"; 
     } 
    } 

</script> 

Очевидно, что уродливая часть здесь имя управления электронной почты , но каждое исследование, которое я смог найти на идентификаторе управления, указывает, что это детерминировано, т. е. оно будет таким же, если только что-то не изменится на стороне ввода.

Итак, это решение, которое заставляет разработчика принимать душ после написания (или купить Code Offsets), но он работает, и это быстро и просто.

Осторожно: этот код имеет странное поведение, которое, если NOTHING заполнено в форме, будет подтверждено подтверждение, а не остальные. ValidationGroup настроен неправильно, не так ли? Насколько я мог сказать, это было неправильно. В конечном счете, это не стоило отслеживать, поскольку остальная часть проверки была выпущена после того, как были заполнены другие поля, так что вы там. Если кто-нибудь знает, что это за проблема, пожалуйста, обновите этот вопрос.

2

Как вы видели, нет простого способа настроить встроенную регистрацию с помощью DNN.

Однако вы можете игнорировать встроенную регистрацию и использовать свои собственные. Есть a few 3rd party modules, которые созданы для того, чтобы вы могли настроить процесс больше, чем DNN. Dynamic Registration - это модуль, о котором я чаще всего слышу, но я не использовал его лично, поэтому я не могу ручаться, будет ли он делать то, что вы хотите.

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

1

BDukes имеет лучший ответ здесь я как встроенные и использовать 3rd сторонних модулей для регистрации и управления пользователями - Динамическая регистрация по DataSprings является наиболее полезным - (я не люблю интерфейс, но он работает)

0

Другое решение может быть использование параметра «Проверено» в разделе «Настройки сайта» в разделе «Дополнительные настройки/параметры безопасности для регистрации пользователей» - таким образом они должны получить электронное письмо и использовать код для подтверждения своего адреса электронной почты

Не дружелюбный способ сделать это, но это еще один вариант.