Drupal hook - giới thiệu sơ lược để bắt tay vào vọc Drupal

Submitted by superthin on 28/10/2017 - 08:26:15
Drupal hook

Một người tự học làm web hoàn toàn từ đầu khi không có nền tảng IT sẽ là một quãng đường chông gai (tiếng Anh: learning curve). Thực sự, chông gai ở đời thực sẽ kinh khủng gấp nhiều lần trên màn hình máy tính. Lý do là nếu bạn không làm được một trang web cho ra hình hài đẹp đẽ, nó vẫn là một trang web có thể hiển thị lên đó những bài viết của bạn, có ít hình ảnh minh hoạ, như vậy là đủ để ngày ngày bạn vui vẻ với nó rồi.

Có ông lập trình viên tên Michael Sinz từng phát biểu "Programming is like sex, one mistake and you have to support it for the rest of your life", và đó chính là lý do của bài viết này.

Sau khi trình bày hậu trường kỹ thuật của trang cá nhân/ blog này, giờ là lúc Thin muốn đi sâu hơn một chút vào một số thứ mà người mới đến với Drupal hẳn cũng muốn biết.

Tại sao phải cần biết đến hook khi có ý định vọc Drupal?

Lý do thật đơn giản: với mỗi sản phẩm phần mềm, nó đều có "giá trị cốt lõi của nó", "hạt nhân" để từ đó mọi thứ nảy nòi ra. Nếu bạn từng sử dụng Photoshop, bạn sẽ không thể xử lý những tấm hình đẹp nếu bạn không nắm được những thứ cốt lõi của Photoshop đó là layer, pixel,...

Với Thin, thường thích bắt đầu bằng những cái rất đơn giản đến mức nhàm chán nhưng nó là thứ mà ít thay đổi theo năm tháng, học một lần là có thể dùng nhiều năm. Chính vì xem nhẹ những thứ nền tảng , nhiều người từng mơ thành cao thủ võ lâm, nhưng bỏ cuộc học võ sau một tuần đứng tấn, hít đất.

Khi dựng nên blog này sử dụng Drupal CMS, Thin buộc phải biết Drupal có những gì được xem là gốc rễ cội nguồn. Thin biết đến node đầu tiên khi tìm hiểu về Drupal. Sau đó là đến hook. Node là cái đơn giản để hiểu, không liên quan đến bài viết này lắm nên không mang vào đây, chỉ xin bàn qua về hook.

Hook là cái quái quỉ gì?

Hook là cái móc. Móc nói chung sẽ nhiều chủng loại khác nhau được dùng trong đời sống hàng ngày ở hộ gia đình, ở cửa hàng cửa hiệu, móc được dùng trong công nghiệp, nhà máy,... cứ ở đâu thấy có móc là có hook.

Minh hoạ hook móc

Drupal cũng đưa ra khái niệm hook, một trong những khái niệm nền tảng làm nên một Drupal danh tiếng. Chính việc đưa ra cơ chế hook giúp cho Drupal trở thành một CMS cực kỳ vạn năng, mạnh mẽ.

Hiểu đơn giản, hook là cơ chế cho phép người phát triển web dùng Drupal làm nền tảng phát triển thì họ có thể gắn những đoạn mã của mình vào Drupal theo cách giống với kiểu treo đồ đạc lên móc. Cơ chế móc này cực kỳ thú vị ở chỗ chúng ta không hề can thiệp một chút xíu nào đến mã nguồn lõi của Drupal.

Việc can thiệp, tác động vào mọi khía cạnh của Drupal, thậm chí nếu một nhà phát triển web có ý tưởng cực kỳ quái đản, muốn "chế biến" lại cách nhân Drupal hoạt động ban đầu mà không cần phải hardcode (viết mã trực tiếp) vào lõi/ nhân Drupal là điều vô cùng thú vị. Điều này khiến cho việc phát triển, cộng tác, bảo trì, nâng cấp,... các ứng dụng web dùng Drupal trở nên dễ dàng, ổn định, bền bỉ,... Từ đó, dựa vào Drupal người ta có thể làm nên những website rất phức tạp có thể hoạt động tốt, bảo mật.

Muốn nhìn thấy hook ra làm sao?

Nói gì thì nói, bạn chắc cũng nóng lòng muốn trông thấy hook hình hài trông như thế nào. Àh, đơn giản thôi, đó là một đoạn mã PHP được viết thành một hàm theo quy tắc đặt tên do Drupal quy định để thực hiện một chức năng nào đó. Ta sẽ tra cứu tài liệu Drupal API để tìm chỗ viết về cách thực hiện một hook nhằm giúp ta thay đổi cái gì đó mặc định Drupal có.

Ví dụ, trang blog này của Thin từng một dấu gạch đứng ngay đầu tiên trước cụm từ tiêu đề trang, nó thành "| SuperThin - thanh niên ngáo đá" trông chẳng đẹp mắt tí nào khi mở trình duyệt lên, thanh tiêu đề sẽ giống hình sau:

Tiêu đề trang của SuperThinLabs.com

Khi đăng nhập vào trong chức năng dành cho quản trị viên để tìm cách chỉnh chọc, tìm bét mắt không ra, xem ra là Thin đã bó tay. Chính lúc này đây, dù biết rất ít về lập trình PHP, viết mã theo quy ước của Drupal lại càng quá sức đối với Thin. Nhưng vì đã "trót" sử dụng Drupal làm nền tảng cho blog của mình, Thin đành "ném lao thì phải theo lao", bỏ ra mất mấy buổi để đọc về hook và đã viết một đoạn mã để thực hiện việc thay đổi title (tiêu đề trang), Thin lấy ra để minh hoạ cho "hook trông hình dáng ra sao" với ai đọc bài này:

1
2
3
4
5
6
7
8
9
10
11
<?php
 
function thin_preprocess_html(&$variables) {
  if (\Drupal::service('path.matcher')->isFrontPage()) {
    if (strpos($variables['head_title'], '| SuperThin') == 0) {
        $variables['head_title'] = substr($variables['head_title'], 2);
    }
  }
}
 
?>

Vậy, hook thể hiện ở chỗ là cho phép ta xử lý lại tiêu đề của trang web thay vì để tiêu đề như mặc định mà Drupal cung cấp đó là slogan của trang web và có cái dấu gạch đứng (vertical bar) quái quỷ kia.

Đoạn mã trên với người có học qua chút ít về PHP hẳn đọc vào hiểu ngay: đó là kiểm tra xem liệu có phải đang ở trang chủ hay không - theo cách được Drupal 8 cung cấp (ở các trang khác ta không xử lý tiêu đề vì | SuperThin - thanh niên ngáo đá đứng sau tiêu đề bài viết, không ảnh hưởng gì). Tiếp theo là kiểm tra cho chắc liệu có phải "| SuperThin" đang đứng đầu tiêu đề hay không, đoạn này có vẻ thừa nhưng làm vậy để không cắt chuỗi nhầm. Nếu đã thoả điều kiện tìm thấy đúng là đứng ở vị trí đầu rồi thì giờ ta cắt bỏ bớt hai ký tự gồm dấu thẳng đứng và một khoảng trắng kèm theo đi, chỉ còn giữ lại từ SuperThin trở đi.

Kết bài

Bạn vừa thấy một hook rồi đó. Nếu trong thời gian tới, Thin lại chọc chạch gì liên quan đến Drupal, lúc đó sẽ có thêm bài mới. Mời bạn mỗi tuần ghé lại blog này một lần, nếu hứng thú với Drupal sẽ có bài đọc cho bạn.