Подтвердите адрес электронной почты на Dotnetnuke Регистрация - PullRequest
0 голосов
/ 17 декабря 2009

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

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

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

ТИА.

Ответы [ 4 ]

2 голосов
/ 18 декабря 2009

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

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

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

1 голос
/ 18 декабря 2009

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

0 голосов
/ 22 декабря 2009

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

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

В версии 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 ), но оно работает, и это быстро и легко.

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

0 голосов
/ 19 декабря 2009

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

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

...