วางบล็อกในหลายภูมิภาค


12

มีโมดูลที่อนุญาตให้ผู้ใช้วางบล็อกเดียวกันในหลายภูมิภาคหรือไม่? ด้วยวิธีนี้ฉันไม่ต้องทำบล็อกมุมมองเดิมสองครั้ง

คำตอบ:


16

โมดูลMultiblockทำให้สิ่งนี้เป็นไปได้:

โมดูลบล็อกของ Drupal นั้นถูก จำกัด ด้วยข้อเท็จจริงที่ว่าบล็อกนั้นสามารถมีได้เพียงหนึ่งอินสแตนซ์เท่านั้น แต่ละบล็อกมีความสัมพันธ์แบบ 1: 1 กับการตั้งค่าภูมิภาคน้ำหนักการมองเห็น (และอื่น ๆ ) ซึ่งหมายความว่าเป็นไปไม่ได้ที่จะมีบล็อกในหลายภูมิภาคหรือมีบล็อกที่มีการตั้งค่าที่แตกต่างกันในหน้าต่างๆ โมดูล MultiBlock แก้ปัญหานี้ได้โดยอนุญาตให้คุณสร้างอินสแตนซ์บล็อกที่หลากหลายของบล็อกที่มีอยู่แล้ว


6

มันไม่ชัดเจนหากคุณต้องการใช้บล็อกเดียวกันมากกว่าหนึ่งครั้งในหน้าเดียวกันหรือวางในพื้นที่ต่าง ๆ ในหน้าต่างๆ ทั้งสองวิธีที่ผมจะแนะนำให้คุณใช้เวลาดูที่โมดูลบริบท

การใช้บริบทคุณสามารถวางบล็อกด้วยในภูมิภาคต่าง ๆ ในหน้าต่างๆ หรือคุณสามารถสร้าง 2 บริบทที่ใช้กับหน้า / s เดียวกันและวางบล็อกเดียวกันในภูมิภาคต่าง ๆ


2
ควรสังเกตว่าสิ่งนี้ไม่ปรากฏขึ้นเมื่อวางบล็อกสองครั้งในพื้นที่เดียวกัน ดูเหมือนว่าบริบทสามารถใส่บล็อกได้หนึ่งสำเนาต่อภูมิภาค
Jeff


2

หากคุณมีโมดูลที่กำหนดเองสำหรับไซต์แล้วคุณสามารถกำหนดบล็อกของคุณเองเพื่อทำซ้ำเนื้อหาของบล็อกที่มีอยู่ จากนั้นจะปรากฏสองครั้งในรายชื่อบล็อก

/* -------------------
    custom blocks
----------------- */

/**
* Declare what blocks are provided by this module.
* Implements hook_block_info().
*/
function MYMODULE_block_info(){

    $block['fibble_home'] = array(
        'info' => t('fibble (home)'),
        'cache' => DRUPAL_CACHE_PER_ROLE,
    );
    $block['fibble_members'] = array(
        'info' => t('fibble (members)'),
        'cache' => DRUPAL_CACHE_PER_ROLE,
    );
    return $block;
}

/**
* Define what our block is going to look like.
* Implements hook_block_view().
*/
function MYMODULE_block_view($block_key){
    $block = array();

    // tweets block to appear twice

    if($block_key == 'fibble_home' || $block_key == 'fibble_members'){ 

        //This is the title of the block.
        $block['subject'] = t('Fibble');

        $fblock = module_invoke('MODULE_ORIGINAL_BLOCK', 'block_view', 'ID_ORIGINAL_BLOCK');
        $fcontent = render($fblock['content']);

        $block['content'] = '<!-- content repeated by MYMODULE -->';
        $block['content'] .= $fcontent;

    }

    return $block;
}

1

ใช้โมดูลMultiBlock

ไปที่โครงสร้าง -> บล็อก -> อินสแตนซ์ ระบุชื่ออินสแตนซ์ที่ไม่ซ้ำกันและเลือกประเภทบล็อกและบันทึก จากนั้นเปิดใช้งานบล็อกโดยกำหนดให้กับภูมิภาคที่คุณต้องการ


2
กระบวนการทั้งหมดได้รับการอธิบายหลังจากเปิดใช้งานโมดูล Multiblock
Saayanta Acharyya Choudhury

@SayayantaAcharyyaChoudhury คุณควรแก้ไขคำตอบเดิมเพื่อให้ดีขึ้นแทนที่จะเขียนคำตอบอื่น
dayuloli

0

Beanโมดูลในขณะนี้นอกจากนี้ยังมีฟังก์ชั่นนี้ ไม่เพียง แต่สำหรับเอนทิตีบล็อกที่กำหนดเอง แต่ยังสำหรับบล็อกที่กำหนดใน hook_block ดูรุ่น dev และ submodule bean_all

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.