프로그래밍 방식으로 블록을 만드는 쉬운 방법? [닫은]


26

Drupal 학습. 백엔드를 통해 블록을 만들 수 있다는 것을 알고 있지만 가능하다면 프로그래밍 방식으로 미리 만듭니다. 사실 나는 그것이 가능하다는 것을 확신합니다. 그러나 가장 쉬운 방법은 무엇입니까?


세부 블로그 : goo.gl/kD3TZu
Suresh Kamrushi

답변:


34

드루팔 7의 경우 :

사용자 정의 모듈 에서 hook_block_infohook_block_view 후크를 사용하십시오 . hook_block_info는 블록을 정의합니다. 그것은에 표시됩니다 관리자 > 구조 > 블록 . * hook_block_view *는 내용을 표시합니다. Drupal API에서 아래 예를 참조하십시오.

두 개의 블록이 정의 된 hook_block_info의 예 (제목 신디케이트 및 최근 컨텐츠) :

    <?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;
}
?>

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;
}
?>

후크 전체 목록은 Drupal.org 의 Blocks API 페이지 를 참조하십시오 . Drupal 6은 약간 다릅니다. hook_block_view 후크가 없습니다. 대신 hook_block 을 사용 하여 블록을 선언하십시오.


6

Drupal 6의 경우 짧은 대답은 hook_block 을 구현하는 사용자 정의 모듈을 작성하는 입니다.

Drupal 7의 경우 Block API 를 사용합니다 .

이것이 모듈 개발의 첫 번째 방법이라면 Pro Drupal Development 또는 Pro Drupal 7 Development를 강력히 추천 합니다. 알아야 할 거의 모든 것이 거기에 있습니다.


hook_block은 별도의 모듈에서만 사용할 수 있습니다. | 그래도 왜 이렇게 복잡한 지 알지 못합니다 ... Drupal의 모든 모듈을 갖는 것이 일반적인 관행입니까?
jayarjo

2
예, 모듈은 Drupal의 핵심 개념입니다. 대부분의 경우 Drupal 자체는 모듈 세트이며 모든 것은 모듈 후크를 통해 수행됩니다.
mpdonadio

3

내가 찾고있는 것을 찾고 여기에서 찾았습니다.


/modules/block/block.module : block_custom_block_save ($ edit, $ delta).

그러나이 함수를 보면 db_update를 직접 수행 할 수 있음을 알 수 있습니다.

db_update('block_custom')
->fields(array(
  'body' => $edit['body']['value'],
  'info' => $edit['info'],
  'format' => $edit['body']['format'],
))
->condition('bid', $delta)
->execute();

2

Drupal 7에서 block_add_block_form_submit에서 살펴보십시오 modules/block/block.admin.inc.

이것은 일반적인 블록 생성 양식입니다. 다른 함수를 호출하는 대신 레코드를 직접 삽입하는 것처럼 보입니다. 블록 테이블의 각 레코드는 단일 테마에 연결되어 있습니다 (활성 테마 만 사용할 수 있지만 모든 테마에 대한 레코드를 삽입하는 것이 더 안전합니다).

block_custom 표는 컨텐츠를 보유하고 있습니다.


1

기능 추가 모듈을 사용하여 블록을 내보낼 수 있습니다 .

또는 블록 테이블에 직접 레코드를 작성하십시오.

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
여분의 모듈 또는 직접 SQL 쿼리 ... 내가 더 깨끗한 무언가가 있어야한다고 생각합니다.
jayarjo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.