Câu trả lời:
Đối với Drupal 7:
Sử dụng hook_block_info và hook_block_view trong mô-đun tùy chỉnh của bạn . hook_block_info xác định khối. Nó sẽ hiển thị trong admin > cấu trúc > khối . * hook_block_view * hiển thị nội dung. Xem các ví dụ dưới đây từ API Drupal.
Ví dụ về hook_block_info, trong đó hai khối được xác định (có tiêu đề Nội dung và nội dung gần đây):
<?php
function hook_block_info() {
// This example comes from node.module.
$blocks['syndicate'] = array(
'info' => t('Syndicate'),
'cache' => DRUPAL_NO_CACHE,
);
$blocks['recent'] = array(
'info' => t('Recent content'),
// DRUPAL_CACHE_PER_ROLE will be assumed.
);
return $blocks;
}
?>
Ví dụ về hook_block_view:
<?php
function hook_block_view($delta = '') {
// This example is adapted from node.module.
$block = array();
switch ($delta) {
case 'syndicate':
$block['subject'] = t('Syndicate');
$block['content'] = array(
'#theme' => 'feed_icon',
'#url' => 'rss.xml',
'#title' => t('Syndicate'),
);
break;
case 'recent':
if (user_access('access content')) {
$block['subject'] = t('Recent content');
if ($nodes = node_get_recent(variable_get('node_recent_block_count', 10))) {
$block['content'] = array(
'#theme' => 'node_recent_block',
'#nodes' => $nodes,
);
}
else {
$block['content'] = t('No content available.');
}
}
break;
}
return $block;
}
?>
Tham khảo trang API Blocks trên Drupal.org để biết danh sách đầy đủ các hook. Drupal 6 có một chút khác biệt. Không có hook_block_view hook; thay vì sử dụng hook_block để khai báo các khối.
Đối với Drupal 6, câu trả lời ngắn gọn là bạn tạo một mô-đun tùy chỉnh thực hiện hook_block .
Đối với Drupal 7, bạn sử dụng API khối .
Nếu đây là bước đột phá đầu tiên của bạn vào phát triển mô-đun, tôi khuyên bạn nên phát triển Pro Drupal Development hoặc Pro Drupal 7 . Khá nhiều thứ bạn cần biết là ở đó.
Bạn có thể đang tìm kiếm những gì tôi đang tìm kiếm và tìm thấy nó ở đây:
/modules/block/block.module:
block_custom_block_save ($ chỉnh sửa, $ delta).
Nhưng khi bạn nhìn vào chức năng này, bạn sẽ thấy rằng bạn chỉ có thể tự thực hiện db_update.
db_update('block_custom')
->fields(array(
'body' => $edit['body']['value'],
'info' => $edit['info'],
'format' => $edit['body']['format'],
))
->condition('bid', $delta)
->execute();
Trong Drupal 7, hãy xem block_add_block_form_submit
trong modules/block/block.admin.inc
.
Đây là hình thức tạo khối thông thường; có vẻ như chỉ cần chèn các bản ghi trực tiếp chứ không phải gọi một chức năng khác. Lưu ý rằng mỗi bản ghi trong bảng khối được liên kết với một chủ đề (bạn chỉ có thể sử dụng bản ghi hoạt động nhưng sẽ an toàn hơn khi chèn bản ghi cho tất cả các chủ đề).
Bảng block_custom chứa nội dung.
Bạn có thể sử dụng mô-đun Tính năng bổ sung để xuất khối.
Ngoài ra, chỉ cần tạo bản ghi trực tiếp trong bảng khối.
INSERT INTO blocks (
module, delta, theme, status, weight, region, custom,
throttle, visibility, pages, title, cache)
VALUES (
'views','blog-block_1','mytheme',1,10,'sidebar_first',0,0,1,'blog\r\nblog/*','',-1)