วิธีง่ายๆในการสร้างบล็อกโดยทางโปรแกรม? [ปิด]


26

การเรียนรู้ Drupal ตอนนี้ฉันรู้แล้วว่าฉันสามารถสร้างบล็อกผ่านแบ็กเอนด์ แต่ฉันอยากจะสร้างบล็อกเหล่านี้แบบเป็นโปรแกรมถ้าเป็นไปได้ อันที่จริงฉันค่อนข้างแน่ใจว่าเป็นไปได้ แต่วิธีที่ง่ายที่สุดคืออะไร


บล็อกรายละเอียด: goo.gl/kD3TZu
Suresh Kamrushi

คำตอบ:


34

สำหรับ Drupal 7:

ใช้hook_block_infoและhook_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;
}
?>

อ้างถึงหน้าBlocks APIบน Drupal.org สำหรับรายการ hooks ทั้งหมด Drupal 6 แตกต่างกันเล็กน้อย ไม่มี hook_block_view hook; ใช้hook_blockเพื่อประกาศบล็อกแทน


6

สำหรับ Drupal 6 คำตอบสั้น ๆ ที่คุณสร้างโมดูลที่กำหนดเองที่นำไปปฏิบัติhook_block

สำหรับ Drupal 7 คุณใช้บล็อก API

ในกรณีนี้คือการโจมตีครั้งแรกของคุณในการพัฒนาโมดูลผมขอแนะนำโปรพัฒนา DrupalหรือPro Drupal พัฒนา ทุกสิ่งที่คุณต้องรู้อยู่ในนั้น


ดูเหมือนว่า hook_block สามารถใช้ได้เฉพาะในโมดูลที่แยกต่างหาก: | ฉันยังไม่เข้าใจว่าทำไมความซับซ้อนนี้ ... เป็นเรื่องปกติไหมที่จะมีโมดูลสำหรับทุกสิ่งใน Drupal?
jayarjo

2
ใช่โมดูลเป็นแนวคิดหลักของ Drupal ด้วยวิธีส่วนใหญ่ Drupal เองก็เป็นชุดของโมดูลและทุกสิ่งที่ทำผ่านโมดูล hooks
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_submitmodules/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.