06. Ê Drupal, tui có block(s)

Nói đến Drupal là nói đến node và block. Ở bài viết này, tôi chỉ đề cập đến block.

Mỗi block trong drupal có 'mô tả', 'tiêu đề', 'nội dung', 'vị trí' và 'độ nặng'. Giới thiệu là giới thiệu bằng tiếng Việt vậy, chứ khi coding thì phải tuân theo chuẩn tiếng Anh.
- tiêu đề: bạn dòm bên phải website này coi, có các block với tiêu dề là 'phát thanh', 'phân luồng', 'nghe', 'đáng xem', ... đúng hông. Vậy là cái 'tiêu đề' của block là đâu có gì khó hiểu phải không?
- 'nội dung': ngay phía dưới tiêu đề của block là nội dung của nó.
- 'vị trí': một block có thể được đặt ở 'bên trái', 'bên phải', 'đỉnh đầu', 'gót chân'. Ví dụ block 'phản hồi gần đây' của toila.net là ở 'bên trái' và 'đáng xem' là ở 'bên phải'.
- 'độ nặng': một block có thể có độ nặng từ -10 đến +10, cái nào nhẹ hơn thì nổi lên trên, những blocks có độ nặng bằng nhau thì được sắp theo alphabet.

Drupal có cho phép người dùng tự tạo các block bằng giao diện web. Và đương nhiên, module developer có thể định nhĩa block(s) của mình cho. Hàm định nghĩa block(s) sẽ có dạng sau:

<?php
function thanhkinh_block$op 'list' $delta $edit = array() ) {

}
?>

Ở đây, chúng ta thấy hàm này yêu cầu 3 tham số đầu vào. Thay vì giải thích dài dòng, chúng ta hãy xét ví dụ sau:

<?php
/*
 * ...
 */
function thanhkinh_block$op 'list' $delta $edit = array() ) {
  if( 
$op == 'list' ) {
    
// khi hàm được gọi ở trang diều hành block,
    // tham số $op sẽ có giá trị 'list'
    
return array(
      
// định nghĩa block thứ 0
      
array(
        
'info' => 'Thông tin của block thứ 0',
        
'weight' => 0,
        
'enabled' => 1,
        
'region' => 'left'
      
),
      
// định nghĩa block thứ 1
      
array(
        
'info' => 'Thông tin của block thứ 1',
        
'weight' => 0,
        
'region' => 'right'
      
)
    );
  }
  else if( 
$op == 'configure' )
  {
    
// khi hàm được gọi ở trang cấu hình một block,
    // tham số $op sẽ có giá trị 'configure'
    
switch( $delta ) {
      
// trường hợp cấu hình block thứ 0 của module
      
case 0:
        return array(
          
'#type' => 'select',
          
'#title' => 'Tiêu đề của block thứ 0',
          
'#default_value' => variable_get'thanhkinh_block_0' 0),
          
'#option' => array( '1' '2' '3' )
        );
       
// trường hợp cấu hình block thứ 1 của module
       
case 1:
        return array(
          
'#type' => 'select',
          
'#title' => 'Tiêu đề của block thứ 1',
          
'#default_value' => variable_get'thanhkinh_block_0' 0),
          
'#option' => array( '1' '2' '3' )
        );
    }
  }
  else if( 
$op == 'save' ) {
    
// ở trang cấu hình, người điều hành submit, hàm này sẽ được gọi
    // với tham số $op có giá trị 'save'
    
variable_set('mymodule_block_items'$edit['items']);
  }
  else if( 
$op == 'view' ) {
    
// khi trình bày nội dung của block ra giao diện người dùng,
    // drupal gọi hàm này với $op có giá trị 'view'
    
switch( $delta ) {
      case 
0:
        
// tạo nội dung cho block # 0
        
$block = array(
          
'subject' => 'Tiêu đề của block # 0',
          
'content' => 'Nội dung của block # 0'
         
);
         break;
      case 
1:
        
// tạo nội dung cho block # 1
        
$block = array(
          
'subject' => 'Tiêu đề của block # 1',
          
'content' => 'Nội dung của block # 1'
        
);
        break; 
    }
  }
}
?>

Bây giờ thêm hàm đó vào thanhkinh.module, rồi test block(s) của chúng ta xem nào. Fun nhỉ!!!

:-)

Thế Hồng,

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tham khảo thêm ở:
*** http://api.drupal.org/api/HEAD/function/hook_block

Comments

Cam on rat nhieu :-). Bai

Cam on rat nhieu :-). Bai viet cua ban vo cung ro rang va de hieu.

hi

Bạn có thể giải thích lại dùm $block-delta ko? Tớ chưa hiểu rõ lắm

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <sup> <br> <p> <h3>
  • Lines and paragraphs break automatically.
  • Link to content with [[some text]], where "some text" is the title of existing content or the title of a new piece of content to create. You can also link text to a different title by using [[link to this title|show this text]]. Link to outside URLs with [[http://www.example.com|some text]], or even [[http://www.example.com]].
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

More information about formatting options

CAPTCHA
This question is used to make sure you are a human visitor and to prevent spam submissions.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.