ฉันต้องการตั้งค่าหน้าแรก Drupal โดยทางโปรแกรมในเวลาทำงาน
ฉันจะทำสิ่งนี้ได้อย่างไร เป็นไปได้ไหม
ฉันต้องการตั้งค่าหน้าแรก Drupal โดยทางโปรแกรมในเวลาทำงาน
ฉันจะทำสิ่งนี้ได้อย่างไร เป็นไปได้ไหม
คำตอบ:
คุณสามารถใช้variable_set()
สำหรับการที่
variable_set('site_frontpage', $value);
hook_install
หรือhook_update_N
จากนั้นควรจะดี
มีโมดูล ( Frontpageซึ่งเป็นโมดูลที่ฉันรักษาไว้) ที่อนุญาตให้ตั้งค่าหน้าแรกที่แตกต่างกันสำหรับผู้ใช้ที่ไม่ระบุชื่อและผู้ใช้ที่ได้รับการรับรองความถูกต้อง โมดูลอนุญาตให้โมดูลบุคคลที่สามเปลี่ยนหน้าเว็บที่ผู้ใช้เปลี่ยนเส้นทางแทนหรือเปลี่ยนอาร์เรย์โครงสร้างที่ใช้แสดงหน้าเว็บ โมดูลบุคคลที่สามได้รับอนุญาตให้เปลี่ยน URL การเปลี่ยนเส้นทางเฉพาะเมื่อไม่ได้ตั้งค่าหน้าแรกสำหรับแบบไม่ระบุชื่อหรือรับรองความถูกต้องภายในโมดูล Frontpage หรือเมื่อมีข้อผิดพลาดระหว่างการโหลดโหนด อาจมีการเปลี่ยนแปลงโมดูลในอนาคตเพื่ออนุญาตให้โมดูลบุคคลที่สามเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าที่เฉพาะเจาะจงที่พวกเขาเลือก
คุณสามารถสร้างโมดูลที่กำหนดเองได้โดยใช้รหัสที่คล้ายกับโมดูลที่ใช้โดย Frontpage นำผู้ใช้ไปยังหน้าเฉพาะโดยอิงตามเกณฑ์ที่กำหนด
โมดูลควรใช้hook_menu ที่ $ ()และเชื่อมโยงการติดต่อกลับเมนูตัวอย่างเช่นhttp://example.com/frontpage ; การเรียกกลับหน้าของรายการเมนูนั้นควรเพียงตรวจสอบเงื่อนไขที่ได้รับการตรวจสอบแล้วเปลี่ยนเส้นทางผู้ใช้ไปยัง URL ที่ระบุ
โครงกระดูกรหัสอาจเป็นสิ่งที่คล้ายกับต่อไปนี้:
/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items = array();
$items['frontpage'] = array(
'page callback' => 'mymodule_frontpage_view',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function mymodule_frontpage_view() {
// These variables can be useful to redirect the users
// to specific pages, basing on the language currently set for
// the content, or on the fact the user is logged in.
$langcode = $GLOBALS['language_content']->language;
$logged_in = user_is_logged_in();
if ($condition) {
drupal_goto($redirect);
}
}
ฉันคงเช่นนี้
/**
* Implements hook_page_alter.
* @param type $page
*/
function my_module_page_alter(&$page){
global $user;
$is_fron_page = drupal_is_front_page();
if($is_fron_page && $user->uid){
$redirect = 'users/'.$user->name.'/my-argument';
drupal_goto($redirect);
}
}
hook_page_alter
และใช้drupal_is_front_page
เพื่อเปลี่ยนเส้นทางผู้ใช้โดยใช้drupal_goto
ตามเงื่อนไข (ในกรณีนี้ $ user-> uid ไม่ควรเป็น 0)
กฎโมดูลสามารถใช้การตั้งค่าของ FrontPage "programatically"
จริงกฎที่จะสร้างขึ้นจะเป็นรูปแบบของคำตอบที่ได้เปลี่ยนเส้นทางเข้าสู่ระบบ (รับรองความถูกต้อง) ผู้ใช้ไปยัง FrontPage ที่แตกต่างกันโดยใช้กฎหรือโค้ด
และเลือกที่จะรวมกับธงโมดูลอาจอาจส่งเสริมประสบการณ์ของผู้ใช้ เช่นสำหรับผู้ใช้ที่ล็อกอินเพื่อระบุว่าหน้าไหนที่เป็นไปได้ที่พวกเขาคิดว่าเป็น "รายการโปรด"
หากคุณต้องการตั้งค่านี้ทั่วโลกโดยทางโปรแกรมคุณสามารถตั้งค่าตัวแปรใน settings.php:
$conf['site_frontpage'] = 'some/custom/path';
ฉันเปลี่ยนโหนดโฮมเพจ (ในโดเมนย่อย) โดยการตั้งค่าตัวแปรในhook_url_outbound_alter ()
variable_set('site_frontpage', $value);
แล้วเปลี่ยนเส้นทาง:
$_GET['q'] = 'node/' . $domain_homepage_node_id;