Định dạng block
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:
<?php
function theme_block($block) {
$output = "<div class=\"block block-$block->module\" id=\"block-$block->module-$block->delta\">\n";
$output .= " <h2 class=\"title\">$block->subject</h2>\n";
$output .= " <div class=\"content\">$block->content</div>\n";
$output .= "</div>\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:
<?php
function theme_block($block) {
$output = "<div class=\"block block-$block->module block-$block->module-$block->region\" id=\"block-$block->module-$block->delta\">\n";
$output .= " <h2 class=\"title\">$block->subject</h2>\n";
$output .= " <div class=\"content\">$block->content</div>\n";
$output .= "</div>\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:
<?php
function YourThemeName_block($block) {
$output = "<div class=\"block block-$block->module block-$block->module-$block->region\" id=\"block-$block->module-$block->delta\">\n";
$output .= " <h2 class=\"title\">$block->subject</h2>\n";
$output .= " <div class=\"content\">$block->content</div>\n";
$output .= "</div>\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.
<?php
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
Thế Hồng
Unsigned version
1 day 8 hours ago
1 day 8 hours ago
2 days 10 hours ago
2 days 21 hours ago
3 days 10 hours ago
6 days 11 hours ago
6 days 15 hours ago
1 week 2 days ago
1 week 2 days ago
2 weeks 23 hours ago