Chào mừng bạn đến với DirectAdmin Skins 101. Hướng dẫn này được thiết kế để giúp bạn bắt đầu tạo ra skin DirectAdmin đầu tiên của mình. Hệ thống skins có thiết kế khá đơn giản nhưng có thể rất mạnh mẽ nếu sử dụng đúng cách. Những điểm chính mà bạn cần phải nắm vững bao gồm:
Vui lòng tham khảo tài liệu skins để biết chi tiết về các token mặc định, token cho lệnh, và cách đóng gói skins.
Một khi bạn đã hiểu rõ những điểm chính này, việc tạo skin của riêng bạn sẽ chỉ bị giới hạn bởi trí tưởng tượng của bạn.
Hệ thống Token
Định nghĩa:
Một token là tên đại diện cho một giá trị được lưu trữ trong bộ nhớ. Khi tên này được đặt giữa các ký tự “pipe” | (Shift + Backslash), hệ thống token của DirectAdmin (tokenizer) sẽ thay thế cả tên và các ký tự pipe bằng giá trị đã được gán.Ví dụ:
Token name: USERNAME Token value: Gary Use: Hello |USERNAME|, how are you today? Result: Hello Gary, how are you today?
Token có thể chứa bất kỳ chuỗi ký tự nào và có thể chứa ký tự xuống dòng. Các token được sử dụng rất thường xuyên trong DirectAdmin để hiển thị các bảng hoàn chỉnh (từ <table>
đến </table>
) nhằm trình bày thông tin cho người dùng. DirectAdmin đã nạp sẵn nhiều token có thể được sử dụng trên bất kỳ trang nào. Những token này được gọi là “Default Tokens” và có thể được tìm thấy trong tài liệu về tokens.
Số lượng token mặc định mà bạn có thể sử dụng phụ thuộc vào quyền hạn của tài khoản DirectAdmin của bạn. Ví dụ, một Administrator có token mặc định cho phép xem tổng mức sử dụng băng thông của toàn bộ server, trong khi một User thì không thể xem được token đó. Điều quan trọng cần lưu ý là vì Administrator là một mở rộng của User, nên bất kỳ giá trị nào mà một User có thể nhìn thấy, Administrator cũng có thể nhìn thấy được.
Các trang Web nhúng
Các skin đều bao gồm nhiều trang web được sử dụng để tạo skin. Có thể có một trang cho các tài khoản email, một trang cho các cơ sở dữ liệu, và danh sách có thể khá dài. Tuy nhiên, giữa các trang web này, về cơ bản có một số điểm chung nhất định, chẳng hạn như phần header và footer của trang, cùng một vài thành phần khác như style sheets và các tài liệu javascript.
Cách đơn giản nhất để tạo ra tất cả các trang này là copy và dán phần header và footer vào mỗi trang và sau đó điền nội dung vào giữa chúng. Mặc dù cách làm này có thể hoạt động, nhưng nếu bạn gặp lỗi chính tả trong phần header chẳng hạn, bạn sẽ phải đi qua từng trang web một và sửa lỗi đó rất nhiều lần.
Eureka! Có một cách hay hơn!
Sẽ hợp lý hơn nếu bạn chỉ viết header và footer một lần, lưu chúng vào các tệp riêng và sau đó chèn chúng vào đầu và cuối của mỗi trang mà bạn cần. Và đúng vậy, DirectAdmin hỗ trợ các trang web nhúng, cho phép bạn chèn các tài liệu khác vào trang web của mình ở bất cứ đâu bạn muốn. Hãy xem ví dụ đơn giản sau:
Text to be displayed in header: Welcome to DirectAdmin! Text to be displayed in footer: This is the bottom of the file. Create a file, lets call it header.html. Then insert what you want in the header: Welcome to DirectAdmin! Next, create another file and lets call it footer.html, just for the fun of it. Insert the text: This is the bottom of the file.
Giờ ta cần có cách gọi header và footer để chúng được chèn vào trang web. Phương pháp được sử dụng khá giống với hệ thống token, ngoại trừ việc các tệp sẽ bắt đầu bằng HTM_
. Cách các token này được liên kết với các tệp sẽ được mô tả sau trong hướng dẫn. Chúng ta đặt tên header là HTM_HEADER
và footer là HTM_FOOTER
. Trang web của bạn sẽ có cấu trúc như sau:
|HTM_HEADER| Hello, this is the content of my webpage. This content will change for each webpage, but the text above and below will remain the same. |HTM_FOOTER|
Kết quả khi hiển thị trang web sẽ như sau:
Welcome to DirectAdmin! Hello, this is the content of my webpage. This content will change for each webpage, but the text above and below will remain the same. This is the bottom of the file.
Phần HTM_HEADER
và HTM_FOOTER
là tất cả những gì bạn cần chèn vào trong mỗi trang web để có header và footer đầy đủ. Thông thường bạn sẽ sử dụng cú pháp HTML chứ không chỉ là văn bản đơn thuần. Bạn thường sẽ mở thẻ <html>
trong header và đóng thẻ </html>
trong footer. Điều này giúp bạn không phải lặp lại nhiều lần, tiết kiệm thời gian. Lưu ý rằng bạn không bắt buộc phải đặt tên token của header và footer là HTM_HEADER
và HTM_FOOTER
; bạn có thể đặt tên chúng theo ý mình miễn là chúng được liên kết đúng với các tệp trong các tệp conf được thảo luận sau đây.
Truyền giá trị giữa các trang
Rất thường xuyên, bạn sẽ cần di chuyển một hoặc nhiều dữ liệu giữa các trang. Mục đích chính của việc này là để giữ nguyên một số dữ liệu và chèn nó vào mỗi trang một cách động. Ví dụ, một User có thể có nhiều domain; vì vậy, khi tạo một tài khoản email, ta sẽ cần biết tài khoản email đó thuộc domain nào. Để làm được điều này, ta sẽ truyền giá trị domain qua lại giữa các trang từ nơi chọn domain cho đến trang tạo email.
Cách thực hiện là sử dụng phương thức yêu cầu “GET”. Điều này được thực hiện bằng cách thêm tên token và giá trị sau tên tệp mà chúng ta muốn hiển thị. Ví dụ:
http://www.domain.com:2222/HTM_EMAIL_POP_CREATE?DOMAIN=domain.com this will show the web page linked to with HTM_EMAIL_POP_CREATE and replace any instances of |DOMAIN| with domain.com
Trang web liên kết với HTM_EMAIL_POP_CREATE
sẽ được hiển thị và tất cả các chỗ có |DOMAIN|
sẽ được thay bằng domain.com
.
Bạn có thể truyền nhiều token cùng lúc bằng cách sử dụng ký tự &
. Ví dụ:
http://www.domain.com:2222/HTM_SOME_PAGE?DOMAIN=domain.com&name=gary This will show the file linked to with HTM_SOME_PAGE and replace all instances of |DOMAIN| with domain.com and all instances of |name| with gary.
Trang hiển thị file liên kết với HTM_SOME_PAGE
sẽ thay thế tất cả các chỗ chứa |DOMAIN|
bằng domain.com
và tất cả chỗ chứa |name|
bằng gary
.
Thêm Token trong một trang Web
Có một số trường hợp trong đó chúng ta có dữ liệu sẽ thay đổi trên mỗi trang, nhưng lại cần hiển thị trong header hoặc footer. Vì header và footer chỉ được lưu trữ trong một tệp duy nhất, thế nào để chèn các giá trị khác nhau vào những tệp này mà không cần sao chép chúng nhiều lần? Ví dụ, tiêu đề của một trang web được thiết lập trong header, nhưng bạn muốn tiêu đề thay đổi theo từng trang.
Để làm điều này, ta sẽ tạo một token tiêu đề trong tệp header: header.html (HTM_HEADER):
<html> <title> |TITLE| </title>
Bây giờ, trên mỗi trang web, bạn sẽ thiết lập token tiêu đề trước khi chèn header:
|?TITLE=This is the DirectAdmin Title!| |HTM_HEADER| Page Content |HTM_FOOTER|
Như bạn thấy, bằng cách sử dụng dấu ?
trước tên token và dấu =
sau tên token, giá trị sau dấu =
sẽ được chèn vào token TITLE
và lưu trữ trong bộ nhớ. Sau đó, bất kỳ nơi nào có yêu cầu |TITLE|
sẽ chèn vào văn bản “This is the DirectAdmin Title!” (trong trường hợp này, vào tiêu đề của trang web).
Một vài lưu ý khi thiết lập token:
● Chỉ được đặt một token trên mỗi dòng, nghĩa là bạn chỉ có thể gán một token trên một dòng và toàn bộ chuỗi từ |?
đến |
không được trải dài qua nhiều dòng.
● Luôn luôn gán token với giá trị mà bạn muốn sử dụng trước khi cố gắng sử dụng nó. Nếu không, việc đó giống như ăn một chiếc bánh rồi mới cắt lát.
● Bạn có thể sử dụng token lồng nhau bên trong giá trị, nhưng sử dụng ký tự `
(cách bên trái phím số 1 trên bàn phím) thay vì ký tự pipe “|”.
Ví dụ:
|?TITLE=Welcome to DirectAdmin `USERNAME`| would set the title of the webpage as: Welcome to DirectAdmin gary (assuming you've added the title token as in the above example)
● Bạn có thể đặt token nhiều lần; mỗi lần thiết lập sẽ ghi đè giá trị cũ.
● Bạn có thể ghi đè bất kỳ token nào trong bộ nhớ, bao gồm cả token mặc định, token được truyền qua GET, và token được tạo bởi các yêu cầu CMD_.
Các loại tệp và liên kết khác nhau
Hướng dẫn giới thiệu về skins chủ yếu sử dụng tiền tố HTM_
để truy cập dữ liệu trong các tệp conf. Trên thực tế, DirectAdmin sử dụng nhiều lệnh hơn chỉ là HTM_
bởi vì một skin chỉ chứa văn bản thuần túy sẽ quá đơn giản. Danh sách các lệnh bao gồm:
● HTM_
● IMG_
● CSS_
● CMD_
● DYN_
Phân tích từng loại:
- HTM_: Được sử dụng cho các tệp HTML cơ bản. Nó không thực thi gì thêm, nghĩa là không thay đổi gì trên server khi sử dụng.
- IMG_: Dùng cho hình ảnh thuộc bất kỳ định dạng nào.
Cách sử dụng:<img src="IMG_LOGO">
Tệp conf:IMG_LOGO=images/logo.gif
- CSS_: Dùng cho style sheets. Chức năng của nó hoàn toàn giống như
HTM_
và cũng được phân tích để thay thế token. Nó có thể được chèn vào trang bằng cách sử dụng|CSS_NAME|
hoặc được import bằng cú pháp:<style src="CSS_NAME">
- CMD_: Có lẽ là quan trọng nhất. Chức năng tương tự như
HTM_
nhưng DirectAdmin sẽ thực hiện một số công việc để lấy thông tin không mặc định, hoặc sẽ làm thay đổi server khi hoàn thành (ví dụ: tạo tài khoản email). Các lệnh này thường tạo ra các token không mặc định chỉ có thể truy cập sau khi lệnh được thực thi. - DYN_: Là các token động. Chúng cho phép bạn chèn tên token vào một vị trí trong tệp tại thời điểm tệp được gọi.
Ví dụ:This is the contents of HTM_FILE here is a token: |DYN_NAME| end of the file
- Kết quả là:
TokenDYN_NAME
sẽ được thay thế bằngHTM_USER
. Sau đó,HTM_USER
được coi là token và nội dung của tokenHTM_USER
sẽ được chèn vào. Tóm lại, bạn có thể lựa chọn tệp nào sẽ được chèn vào token vào thời điểm gọi nó. Tính năng này không được sử dụng trong các skins kèm theo của DirectAdmin, nhưng có thể hữu ích cho một số nhà thiết kế skin.
3. Tệp Conf chính để lưu trữ thông tin đường dẫn
Như đã nêu, các token HTM_
phải được liên kết với một tệp cụ thể. Các tệp conf chính là cách để thực hiện điều này. Cấu trúc của một tệp conf khá đơn giản. Chúng ta lấy ví dụ về tệp conf chứa header và footer:
HTM_INDEX=index.html HTM_HEADER=header.html HTM_FOOTER=footer.html HTM_EMAIL_POP_CREATE=email/create_email.html HTM_SOME_PAGE=files/filename.html
Giá trị bên trái dấu bằng là tên bạn sử dụng để truy cập tệp; giá trị bên phải là đường dẫn của tệp. Bạn có thể sử dụng các tệp HTM_
như một token hoặc như một trang web. Ví dụ, bạn có thể gõ domain.com:2222/HTM_HEADER
vào thanh địa chỉ để xem nội dung của tệp đó, hoặc sử dụng |HTM_HEADER|
bên trong tệp khác để chèn nội dung của nó.
Giờ ta đã thiết lập được chức năng của các tệp conf, hãy cùng thảo luận lý do tại sao lại có ba tệp như vậy.
Trên hệ thống DirectAdmin, có ba loại tài khoản: Admin, Reseller và User. Mỗi loại tài khoản có quyền truy cập và khả năng thực hiện các thao tác khác nhau. Một User là loại tài khoản cơ bản nhất. Tài khoản Reseller được xây dựng dựa trên tài khoản User, nhưng có thêm nhiều tính năng và công cụ vì Reseller IS-A User (một tập hợp các lệnh mở rộng cho các lệnh User đã có). Tương tự, Admin là sự mở rộng của Reseller. Điều này có nghĩa là một Admin là cả một Reseller và một User, do đó có thể thực hiện mọi thao tác ở bất kỳ cấp độ truy cập nào.
Vậy làm thế nào để áp dụng điều này cho skins? Với các lệnh khác nhau dành cho từng loại tài khoản, sẽ có những trang web mà chỉ Reseller được thấy trong khi User thì không, cũng như những trang chỉ Admin mới có thể truy cập được. Chính vì vậy chúng ta có ba tệp conf, mỗi tệp dành cho một loại tài khoản.
Liệu có nghĩa là tất cả các tệp liên quan đến User của Admin đều được lưu trữ trong tệp conf của Admin?
Không. Vì Admin là sự mở rộng của Reseller, và Reseller lại là sự mở rộng của User, nên Admin có thể đọc được dữ liệu từ cả ba tệp conf. Điều này cho phép nhà tạo skin chỉ cần định nghĩa tệp của User một lần trong một tệp conf để dùng cho cả ba loại tài khoản.
Ví dụ minh họa: Một skin “power_user” cho phép Admin xem ba tab liên kết đến trang Admin, Reseller và User. Một Reseller với cùng token sẽ chỉ thấy 2 tab tương ứng với Reseller và User, trong khi một User sẽ chỉ thấy một tab dẫn đến trang chính của họ.
Sử dụng kỹ thuật này, bạn có thể thay đổi giao diện của skin cho các cấp tài khoản khác nhau chỉ với một token duy nhất.