Nguyen Tien Si

Các hook bắt buộc khi tạo Field type mới cho Drupal (7+)

Trước khi tìm hiểu những hook bắt buộc phải biết một Field type gồm những thành phần nào, theo kiến trúc của Field API thì một Field type gồm 3 thành phần chính:

  1. Đinh nghĩa thông tin cho Field - Phần định nghĩa Field này khai báo thông tin như: Khai báo thông tin cho Field, định nghĩa cấu trúc CSDL cho Field, kiểm tra giá trị hợp lệ, kiểm tra Field rổng hay không.
  2. Định nghĩa Formatter cho Field - Khai báo kiểu hiển thị của Field.
  3. Định nghĩa Widget cho Field - Khai báo phần nhập liệu của Field.

Vậy khi viết một Field type mới cần bắt buộc các hook sau đây:

Chú ý khi nâng cấp Drupal 7 từ alpha 5 lên alpha 6

Khi nâng cấp Drupal 7 từ phiên bản Alpha 5 lên phiên bản Alpha 6 cần chú ý các vấn đề sau:

  • Trên bảng users của alpha 6 có sử dụng cột signature_format đứng sau cột signature, nhưng trong file user.install thì chưa có hook để alter những thay đổi này, nên thực hiện việc này trong database bằng tay, cột signature_format có data type là smallint(6).

Ghi chú ngắn gọn về cấu trúc thông tin ở Drupal

1. Quá khứ (Drupal 6)

  • Các loại dữ liệu chính: Node, User, Comment, Taxonomy term (mỗi loại dữ liệu này đều có key (hay còn gọi là property - thuộc tính) và data).
  • Dữ liệu quản lý theo cách khác nhau, ví dụ Node có cách tương tác của node (hook_nodeapi), User có cách tương tác của user (hook_user).
  • Truy xuất theo cách khác nhau.
  • Lưu trữ theo cách khác nhau.
  • Dẫn đến truy xuất/mở rộng/chia sẽ khó khăn.
  • Hầu như dữ liệu mở rộng đều phụ thuộc vào node (vậy có loại dữ liệu mới phải phụ thuộc rất nhiều vào workflow cũng như cách tương tác của node).

Hướng dẫn cài đặt trang API (tương tự api.drupal.org)

Cài đặt API Documentation System

1. Môi trường cài đặt

  • Web server: Apache, IIS,...
  • Cơ sở dữ liệu: MySQL, PostgreSQL.
  • Scripting Language: PHP

Môi trường cài thử

  • Apache/2.2.15
  • MySQL 5.0.51a
  • PHP 5.2.13

2. Phiên bản Drupal và module hỗ trợ

Cài Drupal xong cài tiếp 2 module trên

3. Download source

Ý nghĩa số N của hook_update_N trong Drupal

Thông thường sau mỗi lần nâng cấp module mới trong Drupal, thì cơ sở dữ liệu sẽ bị thay đổi do nhu cầu thiết kế. Nên Drupal xây dựng một hook để hổ trợ việc update cơ sở dữ liệu khi có nhu cầu nâng cấp module. Hook đó có tên là hook_update_N.

Hook này được gọi mỗi khi chạy file update.php ở thư mục gốc của site, ví dụ http://www.example.com/update.php. Trong hook này có kí tự N đại diện cho chữ số. Chữ số này có cấu trúc XYZZ gồm 3 phần sau: X, Y và ZZ

  • Chữ số đầu tiên đại diện cho số phiên bản của core Drupal, ví dụ Drupal 7 thì số đó là 7, Drupal 6 là số đó là 6.

Drupal Coding standards

Chú ý:

  • Chuẩn code này được áp dụng cho việc phát triển core và các module của Drupal và nó dựa trên chuẩn code của Pear (http://pear.php.net/manual/en/standards.php).
  • Và thêm nữa là module coder sẽ cung cấp cho bạn công cụ kiểm tra chuẩn viết code cho Drupal có phù hợp hay không.
  • Chuẩn viết code này được áp dụng cho việc áp dụng viết module cho Drupal. Ngoài ra nếu sử dụng thêm thư viện hoặc các class bên ngoài thì tuân thủ theo chuẩn của Pear.

Mục lục:

  1. Indenting and Whitespace (thụt đầu dòng và khoảng trắng)

Biến page_cache_fastpath và hàm page_cache_fastpath ở đâu trong Drupal 6.

Trong file bootstrap.inc

<?php
function _drupal_bootstrap($phase) {
  global
$conf;

  switch (
$phase) {

    case
DRUPAL_BOOTSTRAP_CONFIGURATION:
     
drupal_unset_globals();
     
// Start a page timer:
     
timer_start('page');
     
// Initialize the configuration
     
conf_init();
      break;
    case
DRUPAL_BOOTSTRAP_EARLY_PAGE_CACHE:
     
// Allow specifying special cache handlers in settings.php, like
      // using memcached or files for storing cache information.
     
require_once variable_get('cache_inc', './includes/cache.inc');
     
// If the page_cache_fastpath is set to TRUE in settings.php and
      // page_cache_fastpath (implemented in the special implementation of
      // cache.inc) printed the page and indicated this with a returned TRUE
      // then we are done.
     
if (variable_get('page_cache_fastpath', FALSE) && page_cache_fastpath()) {
        exit;
      }
      break;
?>

Những thay đổi ở theme D7 so với D6

1. CSS ID đặt tên thân thiện hơn

Recent blog posts
Old CSS ID (Drupal 6): block-blog-0
New CSS ID (Drupal 7): block-blog-recent

Book navigation
Old CSS ID (Drupal 6): block-book-0
New CSS ID (Drupal 7): block-book-navigation

Recent comments
Old CSS ID (Drupal 6): block-comment-0
New CSS ID (Drupal 7): block-comment-recent

Active forum topics
Old CSS ID (Drupal 6): block-forum-0
New CSS ID (Drupal 7): block-forum-active

New forum topics

Old CSS ID (Drupal 6): block-forum-1

Multi-site trong Drupal

Mô hình multi-site trong Drupal

Cơ sở dữ liệu

  • db_website1: sử dụng cho website1.com
  • db_websiten: sử dụng cho websiten.com
  • db_share: cơ sở dữ liệu dùng chung

Kết nối cơ sở dữ liệu

Trong file settings.php của website1.com


<?php
$db_url = 'mysql://username:password@localhost/db_website1';
$db_prefix = array(
'default' => 'w1_',

Syndicate content