Cách dễ dàng để tạo các khối lập trình? [đóng cửa]


26

Học Drupal. Bây giờ tôi biết rằng tôi có thể tạo khối thông qua phần phụ trợ, nhưng tôi muốn tiền xử lý chúng theo chương trình, nếu có thể. Trong thực tế tôi khá chắc chắn rằng nó có thể. Nhưng cách dễ nhất là gì?


Câu trả lời:


34

Đối với Drupal 7:

Sử dụng hook_block_infohook_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.


6

Đố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à ở đó.


Có vẻ như hook_block chỉ có thể được sử dụng trong mô-đun riêng biệt: | Tôi vẫn không hiểu tại sao sự phức tạp này ... Có phải là một cách thông thường để có các mô-đun cho mọi thứ trong Drupal?
jayarjo

2
Vâng, các mô-đun là một khái niệm quan trọng của Drupal. Trong hầu hết các cách, bản thân Drupal là một tập hợp các mô-đun và mọi thứ được thực hiện thông qua các móc mô-đun.
mpdon Arena

3

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();

2

Trong Drupal 7, hãy xem block_add_block_form_submittrong 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.


1

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)

1
Mô-đun bổ sung hoặc truy vấn sql trực tiếp ... tôi nên có một cái gì đó sạch hơn xung quanh tôi nghĩ.
jayarjo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.