[TUTs] Việt hóa URL

  Bài viết hay nhất1
Mặc dù Forumtion đã câp nhật URL theo tiêu đề từ rất lâu, tuy nhiên đến nay vẫn không hỗ trợ Tiếng Việt.
Cách thường dùng nhất hiện nay là cài đặt ngôn ngữ hệ thống về Tiếng Anh, cách này không tiện với những diễn đàn mà thành viên ít dùng Tiếng Anh, hơn nữa URL cũng không hiển thị tốt với Tiếng Việt có dấu (lỗi mất chữ đ).
Bài viết này, mình sẽ hướng dẫn cách tạo URL theo tiêu đề mà không phụ thuộc vào ngôn ngữ diễn đàn.

Demo


URL theo tiêu đề ở diễn đàn Tiếng Việt


Phần 1

Sửa URL trên thanh địa chỉ trình duyệt

ACP >> Display >> Templates >> QLTT >> overall_header
Tìm:
Code:
<title>{SITENAME_TITLE}{PAGE_TITLE}</title>
Thêm vào bên dưới:
Code:
<script type="text/javascript">
//<![CDATA[
function lang_vi(a) {
    a = a.toLowerCase();
    a = a.replace(/\u00e0|\u00e1|\u1ea1|\u1ea3|\u00e3|\u00e2|\u1ea7|\u1ea5|\u1ead|\u1ea9|\u1eab|\u0103|\u1eb1|\u1eaf|\u1eb7|\u1eb3|\u1eb5/g, "a");
    a = a.replace(/\u00e8|\u00e9|\u1eb9|\u1ebb|\u1ebd|\u00ea|\u1ec1|\u1ebf|\u1ec7|\u1ec3|\u1ec5/g, "e");
    a = a.replace(/\u00ec|\u00ed|\u1ecb|\u1ec9|\u0129/g, "i");
    a = a.replace(/\u00f2|\u00f3|\u1ecd|\u1ecf|\u00f5|\u00f4|\u1ed3|\u1ed1|\u1ed9|\u1ed5|\u1ed7|\u01a1|\u1edd|\u1edb|\u1ee3|\u1edf|\u1ee1/g, "o");
    a = a.replace(/\u00f9|\u00fa|\u1ee5|\u1ee7|\u0169|\u01b0|\u1eeb|\u1ee9|\u1ef1|\u1eed|\u1eef/g,
        "u");
    a = a.replace(/\u1ef3|\u00fd|\u1ef5|\u1ef7|\u1ef9/g, "y");
    a = a.replace(/\u0111/g, "d");
    a = a.replace(/\W+/g, "-");
    a = a.replace(/^\-+|\-+$/g, "");
    a = a.replace(/(-group)$/, "");
    return a.replace(/(-page-\d+)$/, "")
}
var path = location.pathname,
    canonical = path + location.search + location.hash;
/(\-category|\-forum|\-topic|\-group)/.test(path) && history.replaceState(null, null, canonical.slice(1).replace(/(\-category|\-forum|\-topic|\-group)/, "-" + lang_vi(document.title)));
//]]>
</script>


Phần 2

Sửa URL liên kết (tùy chọn)

Tạo file javascript, đặt In all the pages.

Code:
$(function() {
    $("a[href^='/c'], a[href^='/f'], a[href^='/t']").attr({
        href: function() {
            var a = $.trim($(this).text());
            if ("" != a) return this.href.replace(location.origin, "").replace(/(\-category|\-forum|\-topic)/, "-" + lang_vi(a.replace(/Re:\s/i, "")))
        }
    });
});


Ngoài lề

ligerv từng bàn về Việt hóa URL có tốt cho SEO không, vì ở đây là dùng javascript, mình cũng không chắc về vụ SEO nhưng xem trên Google analytics thì nó hiển thị URL Tiếng Việt, có vẻ là chỉ cần chạy trước mã theo dõi của Google là được.


Nguồn

Zzbaivong (devs.forumvi.com)
Tags: #mod #tutorial #việt-hóa #permarklink
  Bài viết hay nhất2
em làm theo cái này (dù không biết tác dụng của nó cụ thể là như thế nào)
rồi e quay lại index thì mất hết ảnh ở cái box dạng hộp :(
là sao thế ad
  Bài viết hay nhất3
Code này chỉ ảnh hưởng tới URL chuyên mục, diễn đàn con, bài viết, nhóm và liên kết tương ứng.
Tức là nó chỉ ảnh hưởng đến thuộc tính location của trang và href của liên kết, không liên quan gì đến ảnh.
Có thể là trong lúc chèn, bạn xóa nhầm phần nào đấy, hoặc là một trong các lệnh javascript đặt In all the pages chưa đóng, gây lỗi toàn bộ.
  Bài viết hay nhất4
e phải tắt cái này, k để nó ở in all page mới được đấy ạ
Code:
$(function () {
  $("a[href^='/c'], a[href^='/f'], a[href^='/t']").attr({
      href: function () {
        var a = $.trim($(this).text());
        if ("" != a) return this.href.replace(location.origin, "").replace(/(\-category|\-forum|\-topic)/, "-" + lang_vi(a.replace(/Re:\s/i, "")))
      }
  });
});
nhưng theo hướng dẫn của anh thì code trên phải đặt in all page
vậy nghĩa là e không làm đc hả a :(
  Bài viết hay nhất5
Mình đã ghi ở trên:
Một trong các lệnh javascript đặt In all the pages chưa đóng, gây lỗi toàn bộ.
Chức năng tạo file javascript của diễn đàn, khi script được tạo ra, nó sẽ được nén lại, loại bỏ tất cả các dấu tab, ngắt dòng và chú thích trong javascript.
Nếu là script đặt in all the pages, thì tất cả chúng sẽ được nối lại vào 1 file duy nhất, nếu bạn xem mã nguồn thì file này thường bắt đầu là /99xxx.js.
Lỗi thường xảy ra là do một trong các script đó chưa được đóng bằng dấu chấm phẩy ;, hoặc bị lỗi, nó sẽ kéo theo tất cả script in all the pages bị lỗi.
Script trong hướng dẫn này hoàn toàn không lỗi, nên bạn cần kiểm tra lại các script của forum bạn.
  Bài viết hay nhất6
code ngon ~~
  Bài viết hay nhất7

Admin wrote:Mình đã ghi ở trên:
Một trong các lệnh javascript đặt In all the pages chưa đóng, gây lỗi toàn bộ.
Chức năng tạo file javascript của diễn đàn, khi script được tạo ra, nó sẽ được nén lại, loại bỏ tất cả các dấu tab, ngắt dòng và chú thích trong javascript.
Nếu là script đặt in all the pages, thì tất cả chúng sẽ được nối lại vào 1 file duy nhất, nếu bạn xem mã nguồn thì file này thường bắt đầu là /99xxx.js.
Lỗi thường xảy ra là do một trong các script đó chưa được đóng bằng dấu chấm phẩy ;, hoặc bị lỗi, nó sẽ kéo theo tất cả script in all the pages bị lỗi.
Script trong hướng dẫn này hoàn toàn không lỗi, nên bạn cần kiểm tra lại các script của forum bạn.
HAY LẮM, CỨ NHƯ THẾ NÀY THÌ E PRO MẤT, HỌC VẦY NHÀNH HIỂU BÀI :)
  Bài viết hay nhất8
:'( forum e phpbb3 làm theo như hướng dẫn nhưng không nhúc nhích gì chọn In all the pages trong mục Placement mới đk
ad chỉ em cách cho URL sẽ được chạy sớm nhất, trước cả CSS và Javascript của diễn đàn cái
  Bài viết hay nhất9
bucnong1 wrote: :'( forum e phpbb3 làm theo như hướng dẫn nhưng không nhúc nhích gì chọn In all the pages trong mục Placement mới đk
ad chỉ em cách cho URL sẽ được chạy sớm nhất, trước cả CSS và Javascript của diễn đàn cái
Phần đó mình ghi sai, vì chức năng tạo javascript đó chỉ chạy ở indexportal.
Đã sửa lại bài hướng dẫn.
  Bài viết hay nhất10
Cho hỏi, có thể khắc phục "lỗi" comment bị chuyển trang khi dùng js này được không?
P.S: Mình đang dùng đoạn js comment không chuyển trang.
  Bài viết hay nhất11
Mình không nghĩ ra được nguyên nhân lỗi, js này chỉ sửa url trên thanh address, chẳng có lý gì lại gây lỗi cmt, bạn xóa nó đi xem còn lỗi ko :v
  Bài viết hay nhất12
Zzbaivong wrote:Mình không nghĩ ra được nguyên nhân lỗi, js này chỉ sửa url trên thanh address, chẳng có lý gì lại gây lỗi cmt, bạn xóa nó đi xem còn lỗi ko :v
Xóa đi thì nói làm gì nữa :) Tình hình là lúc truy cập vào 1 link thì nó sẽ có link là /txyz-topic, sau đó nó mới thêm -link-viet-hoa-url vào sau
Nhưng khi cmt nhanh ko chuyển trang thì đuôi #abcd (VD) xuất hiện sau link làm nó phải "nhận dạng" url mới : /txyz-link-viet-hoa-url#abcd
Vậy đó. H 1 làm nó truy cập link /txyz-link-viet-hoa-url ngay từ đầu, 2 là ko cho nó thêm cái đuôi #abcd khi cmt nhanh, vậy thôi :)
  Bài viết hay nhất13
Xóa cái việt hóa URL xem :v
  Bài viết hay nhất14
Zzbaivong wrote:Xóa cái việt hóa URL xem :v
Xóa thì tất nhiên nó sẽ trở về bt rồi.
Vì lúc đó đầu bt mà, add js Việt hóa url vào là nó bị "nhảy" trang nên mình mới thắc mắc, ko có cách khắc phục phải ko Baivong?
  Bài viết hay nhất15
Xóa chưa để mình test!
  Bài viết hay nhất16
Rồi đó Baivong
  Bài viết hay nhất17
Thêm việt hóa URL vào lại.

Trong code trả lời nhanh, tìm:
Code:
location.href = f;
Thay bằng:
Code:
f = f.match(/\/(t\d+(p\d+)?)-.+/)[1];
location.href = location.href.replace(/(.+\/)(t\d+(p\d+)?)(-.+)/, "$1" + f + "$4");
  Bài viết hay nhất18
Nó không hiện luôn BaiVong à
F5 mới thấy :)
  Bài viết hay nhất19
Inbox nick admin cho mình nhé!
  Bài viết hay nhất20
Mình phân quyền ad cho cái nick "baivong" rồi đó :)
  Bài viết hay nhất21
Xong rồi đó!
  Bài viết hay nhất22
Zzbaivong wrote:Xong rồi đó!
Hôm nay mình làm phiền Baivong quá
Cảm ơn rất nhiều :)
  Bài viết hay nhất23
Cái này không có SEO :(
  Bài viết hay nhất24
can make one for arabic forum please ??
  Bài viết hay nhất25

mr.abolo wrote:can make one for arabic forum please ??

No, we can't. No one in us know your language
You cannot reply to topics in this forum