Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. CMS

Xây dựng một CMS: rubyPress

by
Difficulty:IntermediateLength:LongLanguages:

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Sau khi tạo ra cấu trúc cơ bản của Hệ thống Quản lý Nội dung (CMS) và máy chủ thật sự bằng GoNode.js, bạn đã sẵn sàng để thử một ngôn ngữ khác.

Lần này, tôi đang sử dụng ngôn ngữ Ruby để tạo ra máy chủ. Tôi thấy rằng, bằng cách tạo ra cùng một chương trình trong nhiều ngôn ngữ khác nhau, bạn bắt đầu có được những cái nhìn sâu sắc và mới mẻ về những cách tốt hơn để cài đặt chương trình. Bạn cũng thấy được nhiều cách để thêm chức năng vào chương trình. Hãy bắt đầu nào.

Thiết lập và Nạp Thư viện

Để lập trình trong Ruby, bạn sẽ cần phải có phiên bản mới nhất được cài đặt trên hệ thống của bạn. Ngày nay, nhiều hệ điều hành được cài đặt sẵn Ruby (Linux và OS X), nhưng chúng thường có phiên bản cũ hơn. Hướng dẫn này giả sử rằng bạn đã cài đặt Ruby phiên bản 2.4.

Cách dễ nhất để nâng cấp phiên bản ruby ​​mới nhất là sử dụng RVM. Để cài đặt RVM trên Linux hoặc Mac OS X, hãy gõ lệnh sau trong terminal:

Việc này sẽ tạo một kết nối an toàn để tải về và cài đặt RVM. Điều này sẽ cài đặt phiên bản ổn định mới nhất của Ruby. Bạn sẽ phải load lại shell của bạn để hoàn tất quá trình cài đặt.

Đối với Windows, bạn có thể tải về Windows Ruby Installer. Hiện tại, gói này được cập nhật lên phiên bản Ruby 2.2.2, một phiên bản phù hợp để chạy các thư viện và các script trong hướng dẫn này.

Một khi ngôn ngữ Ruby đã được cài đặt thành công, bây giờ bạn có thể cài đặt các thư viện. Ruby, cũng giống như Go và Node, có một trình quản lý gói để cài đặt các thư viện của bên thứ ba. Trong terminal, gõ lệnh sau:

Thao tác này sẽ cài đặt các thư viện Sinatra, Ruby Handlebars, Kramdown, và Slim. Sinatra là một framework ứng dụng web. Ruby Handlebars cài đặt công cụ xử lý template trong Ruby. Kramdown là thư viện chuyển đổi Markdown sang HTML. Slim là thư viện làm việc tương tự như Jade, nhưng nó không bao gồm các định nghĩa macro của Jade. Do đó, các macro được sử dụng trong các chỉ mục của News and Blog hôm nay là Jade như bình thường.

Tạo Tập tin rubyPress.rb

Trong thư mục cấp cao nhất, tạo tập tin rubyPress.rb và thêm code sau đây. Tôi sẽ chú thích từng phần khi nó được thêm vào tập tin.

Điều đầu tiên cần làm là nạp các thư viện. Không giống với Node.js, những thư viện này không được nạp vào một biến. Các thư viện Ruby thêm các hàm của chúng vào phạm vi chương trình.

Thư viện Handlebars được khởi tạo với các hàm trợ giúp khác nhau đã được định nghĩa. Các hàm trợ giúp được định nghĩa bao gồm date, cdate, và save.

Hàm trợ giúp date lấy ngày và giờ hiện tại, và định dạng nó theo chuỗi định dạng truyền vào hàm trợ giúp. cdate thì tương tự ngoại trừ để truyền ngày trước tiên. Hàm trợ giúp save cho phép bạn chỉ định một tên và giá trị. Nó tạo ra một hàm trợ giúp mới với tên name và truyền ngược về giá trị. Điều này cho phép bạn tạo các biến được chỉ định một lần và có hiệu lực ở nhiều vị trí. Hàm này cũng lấy phiên bản Go, trong đó nhận ​​một chuỗi với name, '|' như một dấu phân tách, và value.

Phần tiếp theo của code là để nạp các yếu tố có thể được lưu vào bộ nhớ đệm của trang web. Đây là tất cả mọi thứ bên trong styles và layout cho theme của bạn và các phần tử bên trong thư mục parts. Một biến toàn cục, $parts, được nạp trước tiên từ tập tin server.json. Thông tin đó sau này được sử dụng để nạp các yếu tố thích hợp cho bố cục và theme cụ thể. Công cụ xử lý template Handlebars sử dụng thông tin này để điền vào các template.

Phần tiếp theo chứa các định nghĩa cho tất cả các route. Sinatra là một máy chủ hoàn toàn tương thích với REST. Nhưng đối với CMS này, tôi sẽ chỉ sử dụng động từ get. Mỗi route sẽ nhận các yếu tố từ route để truyền vào các hàm để tạo ra trang chính xác. Trong Sinatra, một name được đặt trước bởi dấu hai chấm xác định một phần của route để truyền đến trình xử lý route. Các yếu tố này nằm trong bảng băm params.

Hàm page lấy tên của một trang từ route và truyền bố cục trong biến $parts cùng với đường dẫn đầy đủ đến tập tin trang web cần thiết cho hàm processPage. Hàm processPage nhận thông tin này và tạo ra các trang thích hợp mà sau đó nó sẽ trả về. Trong Ruby, đầu ra của hàm trước là giá trị trả về của hàm.

Hàm post cũng giống như hàm page, ngoại trừ rằng hàm này hoạt động cho tất cả các trang kiểu post. Hàm này nhận type (kiểu), cat (danh mục) và bản thân post. Những điều này sẽ tạo ra địa chỉ để hiển thị trang phù hợp.

Hàm figurePage sử dụng hàm processPage để đọc nội dung của trang từ hệ thống tập tin. Hàm này nhận đường dẫn hoàn chỉnh đến tập tin không cần có phần mở rộng. figurePage sau đó kiểm tra tập tin với tên đã cho với phần mở rộng html để đọc một tập tin HTML. Lựa chọn thứ hai là phần mở rộng md đối với một tập tin Markdown.

Cuối cùng, nó kiểm tra phần mở rộng amber đối với một tập tin Jade. Hãy nhớ: Amber là tên của thư viện để xử lý tập tin có cú pháp Jade trong Go. Tôi giữ nguyên nó cho chức năng trung gian. Một tập tin HTML chỉ đơn thuần được truyền ngược lại, trong khi tất cả các tập tin Markdown và Jade được chuyển đổi sang HTML trước khi truyền ngược trở lại.

Nếu không tìm thấy tập tin, người dùng sẽ nhận được trang 404. Bằng cách này, trang "không tìm thấy trang" của bạn trông giống như bất kỳ trang nào khác ngoại trừ nội dung.

Hàm processPage thực hiện tất cả các việc khai triển template dựa trên dữ liệu trang. Nó bắt đầu bằng cách gọi hàm figurePage để lấy nội dung của trang. Sau đó, nó xử lý bố cục được truyền cho nó với Handlebars để khai triển template.

Sau đó, hàm processShortCode sẽ tìm và xử lý tất cả các shortcode bên trong trang. Kết quả sau đó được truyền cho Handlebars một lần nữa để xử lý bất kỳ macro còn lại nào bởi các shortcode. Người dùng nhận được kết quả cuối cùng.

Hàm processShortCodes nhận chuỗi đã cho, tìm kiếm từng shortcode, và chạy shortcode cụ thể với các đối số và nội dung của shortcode. Tôi cũng sử dụng thủ tục shortcode để xử lý nội dung cho các shortcode.

Một shortcode là một thẻ tương tự như HTML sử dụng -[]- để tách thẻ mở và thẻ đóng -[/]-. Thẻ mở cũng chứa các thông số cho shortcode. Do đó, ví dụ một shortcode:

Shortcode này định nghĩa shortcode box mà không có bất kỳ tham số nào với nội dung <p>This is inside a box.</p>. Shortcode box bao quanh nội dung trong HTML thích hợp để tạo ra một hộp xung quanh văn bản với văn bản được canh giữa bên trong hộp. Nếu sau đó này bạn muốn thay đổi cách box được kết xuất, thì bạn chỉ cần thay đổi định nghĩa của shortcode. Điều này tiết kiệm được rất nhiều công sức.

Điều cuối cùng trong tập tin là bảng băm $shortcodes chứa các thủ tục shortcode. Đây là các shortcode đơn giản, nhưng bạn có thể tạo ra các shortcode khác phức tạp nếu bạn muốn.

Tất cả các shortcode phải chấp nhận hai tham số: argscontents. Các chuỗi này chứa các tham số của shortcode và nội dung mà shortcode bao quanh. Vì các shortcode nằm bên trong một bảng băm, nên tôi đã sử dụng một hàm lambda để định nghĩa chúng. Một hàm lambda là một hàm không có tên. Cách duy nhất để chạy các hàm này là từ mảng băm.

Chạy Máy chủ

Một khi bạn đã tạo ra tập tin rubyPress.rb với các nội dung ở trên, bạn có thể chạy máy chủ với:

Vì framework Sinatra hoạt động với cấu trúc Rack của Ruby on Rails, nên bạn có thể sử dụng Pow để chạy máy chủ. Pow sẽ cài đặt các tập tin lưu trữ của hệ thống để chạy máy chủ của bạn tại cục bộ tương tự như trên một host. Bạn có thể cài đặt Pow với Powder bằng các lệnh sau:

Powder là một thủ tục dòng lệnh để quản lý các trang web Pow trên máy tính của bạn. Để Pow có thể nhìn thấy trang web của bạn, bạn phải tạo một liên kết mềm đến thư mục dự án của bạn trong thư mục ~/.pow. Nếu máy chủ nằm trong thư mục /Users/test/Documents/rubyPress, bạn sẽ thực thi các lệnh sau:

ln -s tạo một liên kết mềm đến thư mục được chỉ định trước nhất, với tên được chỉ định thứ hai. Pow sau đó sẽ thiết lập một tên miền trên hệ thống của bạn bằng tên của liên kết mềm. Trong ví dụ ở trên, truy cập trang http://rubyPress.dev trong trình duyệt sẽ tải trang từ máy chủ.

Để khởi động máy chủ, hãy gõ lệnh sau đây sau khi tạo liên kết mềm:

Để tải lại máy chủ sau khi thực hiện một số thay đổi code, hãy gõ lệnh như sau:

rubyPress Main Page
Trang chủ của rubyPress

Truy cập trang web trong trình duyệt sẽ cho ra kết quả như hình ảnh ở trên. Pow sẽ thiết lập trang web tại http://rubyPress.dev. Cho dù bạn sử dụng phương pháp nào để khởi chạy trang web, thì bạn cũng sẽ có được một trang kết quả tương tự.

Tóm tắt

Vâng, bạn đã làm được. Một CMS khác, nhưng lần này bằng Ruby. Phiên bản này là phiên bản ngắn nhất trong tất cả các CMS được tạo ra trong loạt bài này. Hãy thực hành với code và xem bạn có thể mở rộng framework cơ bản này như thế nào nhé.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.