Sunday, August 8, 2010

Định dạng block

Nguồn: http://groups.drupal.org/node/8090

Sử dụng Drupal để xây dựng các ứng dụng web, chắc chắn có lúc, chúng ta cần định dạng các block theo region, theo module, ... Thí dụ, chúng ta font chữ ở các block bên trái nhỏ hơn các block phía bên phải, các block bên phải có màu sắc, độ bo viềng khác với các block ở footer, ... yêu cầu tưởng chừng khó khăn, nhưng trở nên rất dễ dàng. Chúng ta thử xem hàm tạo block mặc định của Drupal:

function theme_block($block) {
$output = "
module\" id=\"block-$block->module-$block->delta\">\n";
$output .= "

$block->subject

\n"
;
$output .= "
$block->content
\n"
;
$output .= "
\n"
;
return
$output;
}
?>

Khi mỗi block được sinh ra, chúng đều được gán cho các class, id cần thiết, rất tiện cho việc định dạng chúng thông qua CSS. Ở hàm tạo block mặc định trên, thì block được sinh ra, chưa có class để chỉ định region của nó, do đó, chúng ta cần phải, hoặc (i) sửa hàm theme_block (hack code, điều không được khuyến khích khi sử dụng Drupal), (ii) viết một hàm thay thế (thật may mắn, Drupal có hỗ trợ.
- Theo các giải quyết thứ nhất, chúng ta có thể hack code như sau:

function theme_block($block) {
$output = "
module block-$block->module-$block->region\" id=\"block-$block->module-$block->delta\">\n";
$output .= "

$block->subject

\n"
;
$output .= "
$block->content
\n"
;
$output .= "
\n"
;
return
$output;
}
?>

- Theo cách thứ hai, tên hàm thay thế sẽ có dạng YourThemName_block, trong đó, YourThemeName là tên theme chúng ta đang sử dụng:
function YourThemeName_block($block) {
$output = "
module block-$block->module-$block->region\" id=\"block-$block->module-$block->delta\">\n";
$output .= "

$block->subject

\n"
;
$output .= "
$block->content
\n"
;
$output .= "
\n"
;
return
$output;
}
?>

Bằng cách viết hàm thay thế, chúng ta có thể làm nhiều việc hơn là thêm một class vào block.

function YourThemeName_block ($block) {
switch (
$block->module) {
case
'foo':
return
'...';
case
'bar':
return
'...';
default:
return
'...';
}
}
?>

Tuy nhiên, để tiện lợi hơn cho việc thiết kế, chúng ta có thể định dạng block thông qua các tập tin .tpl.php được đặt dưới thư mục theme đang sử dụng. Nếu không tìm thấy hàm thay thế, Drupal sẽ tìm các tập tin định dạng block với độ ưu tiên:

* block-[module]-[delta].tpl.php
* block-[module].tpl.php
* block-[region].tpl.php
* block.tpl.php

No comments:

Router Packet Networking

Đây là video ngắn khá hay, mô tả đường đi của một gói tin trên Mạng Internet.