จะแสดงบล็อคที่จะแสดงในบางหน้าใน Drupal ได้อย่างไร?


10

พิจารณาของหวาน:

  • หน้า 1: - deserts/*
  • page2: - deserts/*/*
  • Page3: - deserts/*/*/*

เนื้อหาแบบไดนามิก ...

ฉันมีสามช่วงตึกคือ a, b และ c:

  • บล็อก aควรแสดงเฉพาะในหน้า 1
  • บล็อก bควรแสดงเฉพาะในหน้า 2
  • บล็อก aควรแสดงเฉพาะในหน้า 3

ข้อ จำกัด นั้นควรทำอย่างไร?


Drupal 6 หรือ 7? 6 ทำให้ง่ายต่อการกำหนดรหัส PHP สำหรับการเปิดเผยบล็อก
Mołot

It's drupal7 molot
Ajmal

2
@Ajmal มันจะมีประโยชน์ถ้าคุณสามารถแสดงความคิดเห็นกับคำตอบที่ได้รับและอธิบายว่าทำไมพวกเขาถึงไม่ได้ช่วย ผู้คนจะ (โดยธรรมชาติ) คิดว่าคำตอบที่ได้รับการโหวตสูงนั้นเป็นคำตอบที่ถูกต้องและไม่ได้ให้ทางเลือกอื่นหากคุณยังไม่ได้อธิบายว่าทำไมคำตอบนั้นไม่ได้ผลสำหรับคุณ
ไคลฟ์

ฉันมีหน้า desert/*/*/ desert/*/editบล็อกของฉันควรจะแสดงสำหรับทุกอย่างที่ desert/*/*ไม่ได้ใช้ desert/*/edit ในกรณีเช่นนี้มันไม่ได้ผลสำหรับฉัน ..
Ajmal

1
อาจจะเป็นเพียงฉัน แต่ดูเหมือนว่าสับสน *หมายถึงตัวแทน ดังนั้นขอวิธีแก้ปัญหาที่บล็อกปรากฏขึ้นเพื่อdesert/*/*บ่งบอกว่ามันควรจะปรากฏขึ้นสำหรับdesert/*/editหรือสำหรับเรื่องdesert/*/whateverนั้น
cdmo

คำตอบ:


18

ใช้โมดูลบริบท แม้ว่าโดยทั่วไปแล้วฉันไม่ได้เป็นแฟนของโมดูลนี้ แต่ก็เป็นหนึ่งในกรณีที่มีประโยชน์

เพิ่มเงื่อนไขสำหรับเส้นทาง ดังนั้นหากฉันต้องการบล็อกในหน้า 1 แต่ไม่ใช่หน้า 2 หรือ 3 ฉันจะเขียนพา ธ แบบนี้เช่นนั้นหนึ่งบล็อกสำหรับแต่ละบล็อก:

กรณีที่ 1 - บล็อก A

ทะเลทราย / *
~ ทะเลทราย / * / *
~ ทะเลทราย / * / * / *

กรณีที่ 2 - บล็อก B

~ ทะเลทราย / *
ทะเลทราย / * / *
~ ทะเลทราย / * / * / *

กรณีที่ 3- บล็อค C

~ ทะเลทราย / *
~ ทะเลทราย / * / *
ทะเลทราย / * / * / *

เครื่องหมาย ~ หมายถึงยกเว้นในกรณีนี้ หลังจากนั้นเพิ่มบล็อกในพื้นที่ที่คุณต้องการให้แสดงขึ้น นอกจากนี้คุณยังสามารถเพิ่มกลับในเส้นทางเฉพาะที่อาจถูกแยกออกเป็นอย่างอื่นและในทางกลับกัน


มันถือดีสำหรับกรณีนี้ แต่เราต้องการแก้ไขปัญหานี้สำหรับทุกสถานการณ์ที่เป็นไปได้นั่นคือโซลูชันดั้งเดิมมีกรณีที่ไม่ดี ฉันได้อธิบายกรณีข้างต้นแล้ว ดังนั้นโปรดอ้างอิงว่า
Ajmal

ฉันอัปเดตคำตอบของฉันดังนั้นหวังว่าสิ่งนี้จะอธิบายได้ดีขึ้น คุณจะสร้างกฎหนึ่งข้อสำหรับแต่ละบล็อก
kyletaylored

4

คุณสามารถใช้ตัวเลือกการมองเห็น "หน้าเว็บที่โค้ด PHP นี้ส่งคืน TRUE (ผู้เชี่ยวชาญเท่านั้น)" แต่การใส่โค้ด PHP ลงในฐานข้อมูลคือ IMHO ซึ่งเป็นแนวปฏิบัติที่ไม่ดี ให้ลองใช้สิ่งอื่นเช่นโมดูลการมองเห็นบล็อกแบบขยายหรือการใช้งานhook_block_list_alter()เช่น

function MODULE_block_list_alter(&$blocks) {
  global $theme_key;
  foreach ($blocks as $key => $block) {
    if (!isset($block->theme) || !isset($block->status) || $block->theme != $theme_key || $block->status != 1) {
      // This block was added by a contrib module, leave it in the list.
      continue;
    }
    switch ("{$block->module}_{$block->delta}") {
      case "moduleA_deltaA":
        if (arg(0) != 'deserts' || !arg(1) || arg(2)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleB_deltaB":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || arg(3)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleC_deltaC":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || !arg(3)) {
          unset($blocks[$key]);
        }
        break;
    }
  }
}

หมายเหตุ: อาจเป็นวิธีที่ชาญฉลาดกว่าในการใช้กฎการมองเห็นของคุณ


0

คุณควรจะสามารถใช้สิ่งนี้ในการทำงานโดยใช้โมดูลการมองเห็นบล็อคกฎ นี่คือคำพูดจากหน้าโครงการ:

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

แนวคิดทั่วไปคือถ้าคุณสามารถทำกับกฎคุณสามารถใช้เพื่อควบคุมการเปิดเผยบล็อกดังนั้นความเป็นไปได้ไม่มี จำกัด :

  • ต้องการแสดงบล็อกเฉพาะสำหรับผู้ใช้ที่ลงทะเบียนมากกว่าหนึ่งเดือนก่อนหรือไม่

  • บางทีคุณอาจมีบล็อกที่ต้องแสดงระหว่างเวลา 8.00 น. - 17.00 น. ในวันธรรมดาเท่านั้น?

  • สิ่งที่เกี่ยวกับการแสดงหรือซ่อนบล็อกตามสภาพอากาศปัจจุบัน?

ทั้งหมดนี้สามารถทำได้โดยใช้กฎการมองเห็นบล็อก

ด้วยสิ่งนั้นและตาม " ถ้าคุณสามารถทำได้ด้วยกฎคุณสามารถใช้เพื่อควบคุมการเปิดเผยบล็อก " ด้านบนคุณได้ลดคำถามของคุณในการทำให้กฎกติกาสกัดกั้น URL ต่าง ๆ ที่สอดคล้องกับหน้า 1 ของคุณหน้า 2 และหน้า 3

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