Hướng dẫn này sẽ giúp bạn tạo chức năng Đăng ký nhanh cho diễn đàn, người dùng sau khi điền đủ thông tin đăng ký, tài khoản sẽ được kích hoạt và tự đăng nhập ngay sau đó.
ACP >> General >> Forum >> Security >> Security Administration
Giới hạn số tài khoản có thể tạo trong 24h cho một IP:
IP address accounts creation limit, for each 24 hours : 10
ACP >> Users & Groups >> Users >> Users options
Cho phép tự kích hoạt tài khoản:
New accounts activation : No activation
Bỏ yêu cầu nhập mã captcha:
Confirmation code : No
Cho phép đăng ký thành viên:
Allow new members : Yes
ACP >> Users & Groups >> Users >> Profiles >> Profile fields >> [You must be registered and logged in to see this image.]Modify
Bỏ hết các field bắt buộc khi đăng ký:
Necessarily filled ? No
ACP >> Display >> Templates >> General >> overall_footer_begin
Tìm:
Đặt trước nó:
Tạo file javascript, lấy liên kết (Không check Placement) thay vào vị trí {Js} ở cuối code trong bước 3
ACP >> Display >> Pictures and Colors >> Colors >> CSS Stylesheet
Cập nhật ngày 19/04/2015
Tags: [You must be registered and logged in to see this link.]
Chức năng
- Đăng ký thành viên nhanh.
- Tự đăng nhập sau khi đăng ký.
- Quay trở lại trang đang xem.
- Không cần kích hoạt tài khoản.
- Giới hạn số lần đăng ký theo IP.
- Áp dụng cho tất cả liên kết đăng ký.
- Giao diện gọn, đẹp.
- Hỗ trợ ngôn ngữ Anh - Việt.
Demo
[You must be registered and logged in to see this image.]
Hướng dẫn
Bước 1
Tùy chỉnhACP >> General >> Forum >> Security >> Security Administration
Giới hạn số tài khoản có thể tạo trong 24h cho một IP:
IP address accounts creation limit, for each 24 hours : 10
ACP >> Users & Groups >> Users >> Users options
Cho phép tự kích hoạt tài khoản:
New accounts activation : No activation
Bỏ yêu cầu nhập mã captcha:
Confirmation code : No
Cho phép đăng ký thành viên:
Allow new members : Yes
ACP >> Users & Groups >> Users >> Profiles >> Profile fields >> [You must be registered and logged in to see this image.]Modify
Bỏ hết các field bắt buộc khi đăng ký:
Necessarily filled ? No
Bước 3
Sửa TemplateACP >> Display >> Templates >> General >> overall_footer_begin
Tìm:
- Code:
<div id="pun-foot">
Đặt trước nó:
- Code:
<!-- Quick register by Zzbaivong - devs.forumvi.com -->
<!-- BEGIN switch_user_logged_out -->
<div id="qick_reg_overlay" style="z-index:99999;"></div>
<div id="qick_reg" style="z-index:999999;">
<div id="reg_loder">Đang kiểm tra dữ liệu...</div>
<p id="reg_tip">Bạn phải điền đầy đủ thông tin đăng ký.</p>
<a href="javascript:void(0)" class="modal_close"></a>
<form onsubmit="submit_reg(); return false" action="/register?agreed=true&step=2" method="post" name="post" id="ucp">
<div class="main-content frm" style="border: 0px none;">
<fieldset class="frm-set multi" style="border: 0px none; margin:0;background-color: #FFF;">
<dl>
<dt>
<label>Tên tài khoản :</label>
</dt>
<dd>
<input autocomplete="off" type="text" id="username_reg" name="username" value="" size="25" maxlength="25" required />
<div id="name_reg" class="check_reg">
<div class="pwd_img reg_er kytu">Số ký tự phải từ 3 trở lên</div>
<div class="pwd_img reg_er loi">Hãy chọn tài khoản khác</div>
<div class="pwd_img reg_ok">Có thể dùng tài khoản này</div>
</div>
</dd>
</dl>
<dl>
<dt>
<label>Địa chỉ E-mail :</label>
</dt>
<dd>
<input autocomplete="off" class="ltr" type="email" id="email" name="email" value="" size="25" maxlength="64" required />
<div id="email_reg" class="check_reg">
<div class="pwd_img reg_er">Không sử dụng địa chỉ này</div>
<div class="pwd_img reg_wa">E-mail sẽ được kiểm sau</div>
</div>
</dd>
</dl>
<dl>
<dt>
<label>Mật khẩu :</label>
</dt>
<dd>
<input autocomplete="off" class="ltr" type="password" id="password_reg" name="password" value="" size="25" maxlength="25" required />
<div class="check_reg" id="cont_pwd">
<div class="pwd_img reg_er kytu">Số ký tự phải từ 3 trở lên</div>
<div class="pwd_img reg_er trung">Trùng tên đăng nhập</div>
<div class="pwd_img" id="pwd_bad" style="display: none;">Quá đơn giản</div>
<div class="pwd_img" id="pwd_middle" style="display: none;">Tạm ổn</div>
<div class="pwd_img" id="pwd_good" style="display: none;">Vãi</div>
</div>
</dd>
</dl>
<dl>
<dt>
<label>Gõ lại mật khẩu :</label>
</dt>
<dd>
<input autocomplete="off" type="password" id="password_confirm" size="25" maxlength="25" name="password_confirm" class="inputbox narrow" required />
<div id="pass_co" class="check_reg">
<div class="pwd_img reg_er">Chưa đúng</div>
<div class="pwd_img reg_ok">Chính xác</div>
</div>
</dd>
</dl>
<dl class="frm-buttons">
<p style="padding: 10px 0px 0px; text-align: center;">
<input class="button2" type="submit" name="submit" value="Đăng ký" />
<input class="button2" type="reset" name="reset" value="Làm mới" />
</p>
</dl>
</fieldset>
</div>
</form>
</div>
<script type="text/javascript" src="{Js}"></script>
<!-- END switch_user_logged_out -->
Bước 4
ACP >> Modules >> HTML & JAVASCRIPT >> Javascript codes managementTạo file javascript, lấy liên kết (Không check Placement) thay vào vị trí {Js} ở cuối code trong bước 3
- Code:
/* Quick register by Zzbaivong - devs.forumvi.com */
var shortPass = "bad",
badPass = "bad",
goodPass = "good",
strongPass = "strong";
function passwordStrength(a, b) {
score = 0;
if ("" == a) return null;
if (4 > a.length) return shortPass;
if (void 0 != b && a.toLowerCase() == b.toLowerCase()) return badPass;
score += 4 * a.length;
score += 1 * (checkRepetition(1, a).length - a.length);
score += 1 * (checkRepetition(2, a).length - a.length);
score += 1 * (checkRepetition(3, a).length - a.length);
score += 1 * (checkRepetition(4, a).length - a.length);
a.match(/(.*[0-9].*[0-9].*[0-9])/) && (score += 5);
a.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/) && (score += 5);
a.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/) &&
(score += 10);
a.match(/([a-zA-Z])/) && a.match(/([0-9])/) && (score += 15);
a.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && a.match(/([0-9])/) && (score += 15);
a.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && a.match(/([a-zA-Z])/) && (score += 15);
if (a.match(/^\w+$/) || a.match(/^\d+$/)) score -= 10;
0 > score && (score = 0);
100 < score && (score = 100);
return 34 > score ? badPass : 68 > score ? goodPass : strongPass
}
function checkRepetition(a, b) {
res = "";
for (i = 0; i < b.length; i++) {
repeated = !0;
for (j = 0; j < a && j + i + a < b.length; j++) repeated = repeated && b.charAt(j + i) == b.charAt(j + i + a);
j < a && (repeated = !1);
repeated ? (i += a - 1, repeated = !1) : res += b.charAt(i)
}
return res
}
function submit_reg() {
$("#reg_tip").text("Đang kiểm tra dữ liệu...");
$("#qick_reg .reg_er").each(function() {
"block" == $(this).css("display") && $(this).parent().parent().addClass("error")
});
$("#qick_reg input").each(function() {
"" == $(this).val() && $(this).parent().addClass("error")
});
$("#qick_reg .error").length ? $("#reg_tip").text("Lỗi thông tin đăng ký.") : ($("#reg_loder").show(), $.ajax({
type: "POST",
url: "/register?agreed=true&step=2",
data: {
username: $("#username_reg").val(),
email: $("#email").val(),
"profile_field_3_-10": $("#profile_field_3_-10").val(),
password: $("#password_reg").val(),
submit: "Save"
},
success: function(a) {
if ($(a).find("p.message").length) $("#reg_tip").text("Quản trị viên đã giới hạn số lần tạo tài khoản hôm nay."), $("#reg_loder").fadeOut(500), $("#ucp").hide();
else if ($("#reg_tip").text("Đang kiểm tra tài khoản, mật khẩu..."),
$(a).find("#form_confirm").length) $("#qick_reg .frm-buttons input[name='confirm_pass'], #qick_reg .frm-buttons input[name='auth[]']").remove(), $(a).find("input[name='confirm_pass'], input[name='auth[]']").prependTo("#qick_reg .frm-buttons"), $("#reg_tip").text("Đang kiểm tra E-mail..."), $.ajax({
type: "POST",
url: "/register?agreed=true&step=2",
data: {
password_confirm: $("#password_confirm").val(),
"auth[]": $("#qick_reg input[name='auth[]']:first").val(),
username: $("#username_reg").val(),
email: $("#email").val(),
"profile_field_3_-10": $("#profile_field_3_-10").val(),
password: $("#password_reg").val(),
confirm_pass: $("#qick_reg input[name='confirm_pass']").val(),
submit: "Save"
},
success: function(a) {
if ($(a).find("p.message a").length) $("#reg_tip").text("Đăng ký thành công."), $.ajax({
type: "POST",
url: "/login",
data: {
username: $("#username_reg").val(),
password: $("#password_reg").val(),
login: "true"
},
success: function() {
window.location.reload()
}
});
else if (-1 != $(a).find("p.center:first span").text().indexOf("e-mail address") || -1 != $(a).find("p.center:first span").text().indexOf("địa chỉ email")) $("#reg_tip").text("Địa chỉ E-mail không hợp lệ hoặc đã được sử dụng."), $("#reg_loder").fadeOut(500), $("#email").parent().addClass("error"), $("#email_reg .reg_er").show().next().hide()
}
});
else if (-1 != $(a).find("#main-content p.center:first span").text().indexOf("username has") ||
-1 != $(a).find("p.center:first span").text().indexOf("ên truy cập")) $("#reg_tip").text("Tài khoản đã được sử dụng hoặc bị cấm."), $("#reg_loder").fadeOut(500), $("#username_reg").parent().addClass("error"), $("#name_reg div").hide(), $("#name_reg .reg_er.loi").show();
else if (0 == $(a).find("p.center:first span").text().indexOf("Your password") || 0 == $(a).find("p.center:first span").text().indexOf("Mật khẩu")) $("#reg_tip").text("Mật khẩu phải từ 6 - 32 ký tự và không được trùng tài khoản."),
$("#reg_loder").fadeOut(500), $("#password_reg, #password_confirm").val("").parent().addClass("error"), $("#cont_pwd div, #pass_co div").hide()
}
}))
}
function conpass() {
"" != $("#password_confirm").val() ? ($("#password_confirm").parent().removeClass("error"), $("#password_reg").val() != $("#password_confirm").val() ? $("#pass_co .reg_er").show().next().hide() : $("#pass_co .reg_er").hide().next().show()) : $("#pass_co div").hide()
}
function isEmail(a) {
return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/.test(a)
}
$(function() {
"/register" != location.pathname ? ($("a[href='/register']").click(function(a) {
a.preventDefault();
$("#qick_reg, #qick_reg_overlay").fadeIn()
}), $("#qick_reg_overlay, .modal_close").click(function() {
$("#qick_reg, #qick_reg_overlay").fadeOut()
}), $("#qick_reg input[name='reset']").click(function() {
$("#reg_tip").text("Bạn phải điền đầy đủ thông tin đăng ký.");
$("#qick_reg dd").removeClass("error");
$("#qick_reg .pwd_img").hide()
}), $("#username_reg").on("blur",
function() {
"" != $("#username_reg").val() ? ($("#username_reg").parent().removeClass("error"), 3 > $("#username_reg").val().length ? ($("#name_reg .reg_er.kytu").show(), $("#name_reg .reg_er.loi, #name_reg .reg_ok").hide()) : $.ajax({
type: "GET",
url: "/search?mode=searchuser&fieldname=username",
data: {
search_username: $("#username_reg").val(),
time: timestamp()
},
success: function(a) {
$("#name_reg div").hide();
$(a).find("#username_list").val() == $("#username_reg").val() ?
$("#name_reg .reg_er.loi").show() : $("#name_reg .reg_ok").show()
}
})) : $("#name_reg div").hide()
}), $("#email").on("blur", function() {
"" != $("#email").val() ? ($("#email").parent().removeClass("error"), isEmail($("#email").val()) ? $("#email_reg .reg_er").hide().next().show() : $("#email_reg .reg_er").show().next().hide()) : $("#email_reg div").hide()
}), $("#password_confirm").on("input", function() {
conpass()
}), $("#password_reg, #username_reg").on("input",
function() {
if ("" != $("#password_reg").val())
if ($("#password_reg").parent().removeClass("error"), 3 > $("#password_reg").val().length) $("#cont_pwd div").hide(), $("#cont_pwd .reg_er.kytu").show();
else if ($("#cont_pwd .reg_er.kytu").hide(), $("#password_reg").val() == $("#username_reg").val()) $("#cont_pwd div").hide(), $("#cont_pwd .reg_er.trung").show();
else switch ($("#cont_pwd .reg_er.trung").hide(), passwordStrength($("#password_reg").val(), $("#username_reg").val())) {
case "bad":
$("#pwd_middle,#pwd_good").hide();
$("#pwd_bad").show();
break;
case "good":
$("#pwd_good,#pwd_bad").hide();
$("#pwd_middle").show();
break;
case "strong":
$("#pwd_middle,#pwd_bad").hide(), $("#pwd_good").show()
} else $("#cont_pwd div, #pass_co div").hide(), $("#password_confirm").val("");
"" != $("#password_confirm").val() && conpass()
})) : $("#qick_reg, #qick_reg_overlay").remove()
});
Bước 5
Thêm vào CSSACP >> Display >> Pictures and Colors >> Colors >> CSS Stylesheet
- Code:
/* Quick register by Zzbaivong - devs.forumvi.com */
#qick_reg_overlay{background:#000;position:fixed;left:0;top:0;width:100%;height:100%;display:none;opacity:0.8}
#qick_reg, #qick_reg *{box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}
#qick_reg{background-color:#FFF;border:1px solid rgba(0,0,0,0.333);box-shadow:0 4px 16px rgba(0,0,0,0.2);color:#000;outline:0 none;position:fixed;width:500px;display:none;left:50%;top:50%;margin-left:-250px;margin-top:-200px;padding:40px}
#qick_reg input{width:100%}
#qick_reg fieldset.frm-set dl dd,#qick_reg fieldset.frm-set dl dt{padding:0}
#qick_reg fieldset.frm-set dl dt{width:13em}
#qick_reg fieldset.frm-set dl dd{margin-left:14em}
#qick_reg #cont_pwd, #qick_reg .check_reg{float:none;height:24px;width: 100%;padding:2px 0!important}
#pwd_bad, .reg_er{background: url(http://i15.servimg.com/u/f15/16/58/89/73/001_3010.png) no-repeat scroll left center/16px 16px transparent;color:red}
#pwd_middle, .reg_wa{background:url(http://i15.servimg.com/u/f15/16/58/89/73/alert_10.png) no-repeat scroll left center/16px 16px transparent;color:blue}
#pwd_good, .reg_ok{background:url(http://i15.servimg.com/u/f15/16/58/89/73/001_0610.png) no-repeat scroll left center/16px 16px transparent;color:green}
#qick_reg .pwd_img{float:left;height:24px;line-height:24px;text-align:left;width: 100%;padding: 0 0 0 20px;}
#reg_tip{background-color:#FCF8E3;color:#C09853;border-color:#FBEED5;border:1px solid;padding:5px 7px}
#qick_reg form{margin-top:20px}
#reg_loder{background:url(http://i15.servimg.com/u/f15/16/58/89/73/ajax-l11.gif) no-repeat scroll center 130px rgba(255, 255, 255, 0.65);color:#086CC5;display:none;font-family:Comic Sans MS;font-weight:700;height:100%;left:0;line-height:350px;position:absolute;text-align:center;top:0;width:100%}
.modal_close{background:url(http://i40.servimg.com/u/f40/17/70/81/78/close-10.png) repeat scroll 0 0 transparent;content:"";height:11px;position:absolute;right:17px;top:17px;width:11px}
.error input{border:1px solid #F5A7A7;background-color:#F2DEDE}
#qick_reg .button2{background:#055fff;border:1px solid #DDD;color:#FFF;padding:7px 15px}
#qick_reg .button2:hover{background:#666;cursor:pointer}
#qick_reg .button2[name="reset"]{background:url(http://i15.servimg.com/u/f15/16/58/89/73/reload10.png) no-repeat center scroll green;text-indent:-9999px}
Ghi chú
Áp dụng cho phiên bản PunBB.Cập nhật ngày 19/04/2015
Nguồn
Zzbaivong (devs.forumvi.com)Tags: [You must be registered and logged in to see this link.]