Drupal นอกกรอบมาพร้อมกับหน้า (ซึ่งเป็นโฮมเพจเริ่มต้น) ที่กำหนดให้กับเส้นทางของโหนด
ฉันจะหลีกเลี่ยงผู้ใช้เข้าถึงและเปลี่ยนเส้นทางไปยังหน้าแรกของไซต์จริงได้อย่างไร
Drupal นอกกรอบมาพร้อมกับหน้า (ซึ่งเป็นโฮมเพจเริ่มต้น) ที่กำหนดให้กับเส้นทางของโหนด
ฉันจะหลีกเลี่ยงผู้ใช้เข้าถึงและเปลี่ยนเส้นทางไปยังหน้าแรกของไซต์จริงได้อย่างไร
คำตอบ:
ไม่มีวิธีง่ายๆในการซ่อนหน้านั้น หากคุณไม่ได้ใช้มันคุณสามารถใช้hook_menu_alter ()FALSE
และลบมันสมบูรณ์หรือตั้งค่าการโทรกลับเพื่อการเข้าถึง
สร้างนามแฝงของเส้นทางที่เปลี่ยนเส้นทางจาก / node ไปยังหน้าเว็บที่คุณต้องการใช้เป็นหน้าแรก
ฉันชอบที่จะเปลี่ยนหน้าการเรียกกลับของ / โหนดดังนั้นจึงแสดงข้อผิดพลาด 404 หน้า
นี่จะแสดงหน้า 404 ที่คุณกำหนดเองเสมอเมื่อเข้าถึง / โหนด
function yourmodule_menu_alter(&$items) {
$items['node']['page callback'] = 'drupal_not_found';
}
<?php
function MY_MODULE_menu_alter(&$callbacks) {
unset($callbacks['node']);
}
?>
หรือเพิ่มสิ่งนี้ใน settings.php (เนื้อหาขาเข้า URL)
<?php
function custom_url_rewrite_inbound(&$result, $path, $path_language) {
if ($path == 'node') {
$result = '';
}
}
?>
ผมใช้การเปลี่ยนเส้นทางโมดูล: ฉันเพิ่งเพิ่มใหม่ 301 เปลี่ยนเส้นทางจากไปnode
<front>
คล้ายกับคำตอบ berdirs ฉันมีรหัสต่อไปนี้รวมอยู่ในโมดูลที่เป็นส่วนหนึ่งของ distro แบบกำหนดเองที่เราสร้างจาก:
function HOOK_menu_alter(&$items) {
$items['node']['page callback'] = '_HOOK_empty_home';
}
function _HOOK_empty_home() {
drupal_set_title('');
return '';
}
ด้วยวิธีนี้ฉันสามารถรักษาเส้นทาง 'node' เป็น frontpage และใช้บริบทเพื่อจัดตำแหน่งบล็อกเพื่อสร้าง frontpage ที่ต้องการ
คุณสามารถสร้างเพจที่แม็พกับ / โหนดซึ่งไม่ได้เผยแพร่ ดังนั้นผู้ใช้ที่จะเรียกใช้เส้นทางนี้จะมีหน้าที่ต้องห้ามในการเข้าถึง
ทางออกที่ง่ายสำหรับฉันคือการสร้างเพจที่ฉันต้องการให้เป็นโฮมเพจและตั้งค่า URL เป็น / node จากนั้นภายใต้ / admin / config / system / site-information ตั้งค่าหน้าแรกเริ่มต้นเป็น / node คุณไม่เคยเห็น "/ node" ใน URL เว้นแต่ว่ามีคนพิมพ์ไว้จริง ๆ มันรวดเร็วง่ายและสะอาดหากคุณต้องการตั้งค่า URL หน้าแรกเป็น / node
คุณสามารถสร้างหน้าใหม่ด้วย URL ของโหนดและผู้คนสามารถเห็นข้อความเปลี่ยนเส้นทางไปที่หน้าแรกหรือเลือกหมวดหมู่ของบางสิ่ง
ฉันลองหลายอย่าง จากนั้นสำหรับ Drupal 7 และ 8 ฉันพบว่านี่ง่ายที่สุดโดยไม่ต้องเขียนโค้ดใด ๆ :
ดาวน์โหลดและเปิดใช้งานโมดูล node_page_disable, globalredirect และ redirect
(หมายเหตุ: โมดูล node_page_disable เปลี่ยนเส้นทาง / โหนดไปที่หน้าข้อผิดพลาด 404 ไม่พบ)
จากนั้นเพิ่มการเปลี่ยนเส้นทางสำหรับ / node -> หน้าแรก
โปรดทราบว่าการเปลี่ยนเส้นทางเปลี่ยนเส้นทางทั้ง / node และ / node / ไปยังหน้าแรก
และบทความที่มีประโยชน์ในการอ่าน: https://www.drupalaid.com/blog/3-things-you-should-hide
drush @example.com views-disable frontpage
จะปิด จะยังคงได้รับ 404 แม้ว่าจนกว่าสิ่งอื่นจะเสร็จสิ้น
สร้างโหนดจากนั้นไปที่การกำหนดค่าไซต์ -> ข้อมูลไซต์และตั้งค่าโฮมเพจเป็นพา ธ ของโหนด ดังนั้นถ้ามันเป็นโหนดแรกของคุณมันจะเป็นโหนด / 1
แก้ไข: โดยค่าเริ่มต้นเพียงแค่สร้างโหนดที่หน้านั้นจะหายไปหากคุณทำเครื่องหมาย 'เลื่อนระดับเป็นหน้าแรก' ขั้นตอนข้อมูลเว็บไซต์จะทำให้โหนดนั้นเป็นหน้าแรกที่แท้จริงของคุณ
/node
ยังสามารถเข้าถึงได้โดยค่าเริ่มต้นจะไม่ปรากฏให้เห็น
คุณสามารถใช้โมดูลกฎเพื่อตรวจสอบ URL ก่อนที่จะดูหน้าและเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าอื่นหากคุณต้องการ
คำถามยอดนิยมเมื่อหลายปีก่อนมีคำตอบที่น่าสนใจอยู่แล้ว อย่างไรก็ตามคาดเดาสิ่งที่: "วันนี้มีโมดูลสำหรับมัน ... จริง ๆ แล้วแม้แต่สอง!" (ไม่ได้กล่าวถึงในคำตอบก่อนหน้าใด ๆ )
อ่านรายละเอียดเพิ่มเติม ... (คำพูดมาจากหน้าโครงการของพวกเขา) ...
ผู้ดูแลหน้าโหนด (ทั้ง D6 หรือ D7):
โมดูลนี้เพิ่มพาเนลการตั้งค่าการจัดการเพื่อจัดการ/การเข้าถึงเพจโหนด เมื่อเปิดใช้งานแล้วจะมีการกำหนดค่าที่เป็นไปได้สามแบบ:
- แกนหลัก - Drupal จะจัดการการเข้าถึงหน้าโหนดตามปกติ: ผู้ใช้ทั้งหมดที่ได้รับอนุญาต 'เข้าถึงเนื้อหา'
- ปิดการใช้งาน - ไม่มีใครสามารถเข้าถึง / โหนดได้ จะส่งคืน 'หน้าไม่พบ' (404)
- โดยการอนุญาต - การเข้าถึงจะได้รับการจัดการโดยการอนุญาตใหม่: 'หน้าโหนดการเข้าถึง'
โหนดปิดการใช้งานหน้า (ทั้ง D6 หรือ D7 แต่เฉพาะรุ่น rc2):
ช่วยให้เข้าถึง UI ได้ง่ายและปิดการใช้งานพา ธ/ โหนดเมื่อไม่ได้ใช้ นี้ได้รับแรงบันดาลใจจากการพิจารณาการรักษาความปลอดภัยในการผลิตโมดูลตรวจสอบ
วิธีที่ดีที่สุดคือการซ่อนโหนดจากฟังก์ชัน template_preprocess_page
function template_preprocess_page(&$variables) {
if ($variables['is_front'] == 1) {
if (isset($variables['page']['content']['system_main'])) {
unset($variables['page']['content']['system_main']);
}
}
}