คำตอบคือ: การใช้หลายโดเมนสำหรับภาษาเดียวไม่สามารถทำได้ด้วย Drupal 7 และมีเท่าที่ฉันรู้ไม่มีโมดูลที่เพิ่มฟังก์ชันการทำงานนั้น
แต่เพื่อให้บรรลุเป้าหมายนี้อย่างไรก็ตามมีวิธีแก้ไขปัญหาตามที่กล่าวไว้ข้างต้นปัญหาเกี่ยวกับโดเมนภาษาคือว่าเส้นทางภายในทั้งหมดที่มีนามแฝงเส้นทางภาษาเฉพาะและถูกสร้างขึ้นด้วยurl ()ฟังก์ชันหลักของ Drupal ถูกสร้างขึ้นเป็นเส้นทางสัมบูรณ์ ความรับผิดชอบต่อพฤติกรรมนั้นเป็นหน้าที่ :
locale_language_url_rewrite_url(&$path, &$options)
อย่าตั้งค่าโดเมนภาษาสำหรับภาษาเริ่มต้นนั้น หากคุณไม่ทำเช่นนั้น Drupal จะไม่สร้างเส้นทางแบบสัมบูรณ์สำหรับภาษาเริ่มต้นถ้า - เช่น - ใช้โดเมนxyz.example.comโดยที่ xyz.example.com ไม่ได้ถูกตั้งค่าเป็นโดเมนสำหรับภาษาใด ๆ Drupal จะสร้าง ทุกคนที่เกี่ยวข้องจึงคลิกที่ลิงก์ภายในจะเก็บโดเมนย่อยไว้ แต่คุณไม่สามารถใช้วิธีการนั้นได้หากคุณต้องการให้มีโดเมนย่อยภาษาที่สำคัญตามที่อธิบายไว้ข้างต้น:
สำหรับภาษาอังกฤษ: en.example.com & en.m.example.com
สำหรับภาษาเยอรมัน: de.example.com & de.m.example.com เป็นต้น
ดังนั้นวิธีการที่สองจะเป็นในการปรับเปลี่ยนภาษาปัจจุบันทุกประเภทที่มีฟังก์ชั่น:
hook_language_init ฉันใช้รหัสต่อไปนี้เพื่อให้ตัวอย่างการทำงานด้านบน:
:
# hook_language_init()
function my_module_language_init() {
// Current path
$url = $_SERVER['SERVER_NAME'];
// Global language object and get languages
global $language;
$languages = language_list();
// Get all subdomains
$reg = '/^((?:([^\.]+)\.)?(?:([^\.]+)\.))?([^\.]+\.[^\.]+)$/i';
preg_match($reg, $url, $up);
# We won't allow all subdomains, only 'm.' and 'm2.'
# Change this for an other use case.
if ($up[3] == "m2" || $up[3] == "m") {
if (!isset($languages[$up[2]])) {
$langcode = $language->language;
} else {
$langcode = $up[2];
}
$new_language = $languages[$langcode];
$new_language->domain = $new_language->language . "." . $up[3] .".". $up[4];
// Set url options
$options['language'] = $new_language;
$types = language_types();
// Set all language types and language domains
foreach ($types as $type) {
$GLOBALS[$type] = $new_language;
$GLOBALS[$type]->domain = $new_language->domain;
}
}
}