ค้นหาเฉพาะภาษาที่ใช้งานในปัจจุบัน


23

ฉันจะ จำกัด ผลลัพธ์จากการค้นหาเริ่มต้นใน Drupal 7 เพื่อนำเฉพาะโหนดที่อยู่ในภาษาปัจจุบันได้อย่างไร

เว็บไซต์ของฉันมีตัวสลับภาษาสามภาษา ผู้ใช้เลือกภาษาที่ต้องการใช้เมื่อดูเว็บไซต์ หากเขาค้นหาบางอย่างหน้าผลลัพธ์จะนำผลลัพธ์มาจากภาษาอื่น วันนี้ฉันมีภาษาที่เปิดใช้งานเพียง 3 ภาษา แต่เราวางแผนที่จะขยายเป็น 6 หรือมากกว่า

คำตอบ:


2

คุณสามารถใช้ทั่วโลก$languageเพื่อทราบว่าคุณเป็นภาษาใด ใน Views คุณสามารถกรองโดยใช้ "เนื้อหา: ภาษา -> ภาษาผู้ใช้ปัจจุบัน"


3
สิ่งนี้ช่วยได้อย่างไร? คุณสามารถแทนที่หน้าการค้นหาด้วยโหนดได้หรือไม่? สิ่งนี้มีข้อบกพร่องหรือไม่?
จัมเปอร์

25

มีวิธีที่ยอดเยี่ยมในการทำสิ่งนี้โดยใช้เอกสารที่ไม่มีเอกสารhook_query_node_access_alter():

function yourmodule_query_node_access_alter(QueryAlterableInterface $query) {
  $search = FALSE;
  $node = FALSE;

  // Even though we know the node alias is going to be "n", by checking for the
  // search_index table we make sure we're on the search page. Omitting this step will
  // break the default admin/content page.
  foreach ($query->getTables() as $alias => $table) {
    if ($table['table'] == 'search_index') {
      $search = $alias;
    }
    elseif ($table['table'] == 'node') {
      $node = $alias;
    }
  }

  // Make sure we're on the search page.
  if ($node && $search) {
    $db_and = db_and();
    // I guess you *could* use global $language here instead but this is safer.
    $language = i18n_language_interface();
    $lang = $language->language;

    $db_and->condition($node . '.language', $lang, '=');
    $query->condition($db_and);
  }
}

หมายเหตุ: รหัสนี้เป็น 100% ตามโมดูลการกำหนดค่าการค้นหาที่ดีเยี่ยม

ภาษาของผู้ใช้กับเนื้อหา

บางไซต์อาจมีการตรวจจับภาษาที่กำหนดค่าให้แสดงอินเทอร์เฟซในภาษาที่ผู้ใช้ต้องการในขณะที่เนื้อหาของหน้าจะแสดงตาม URL หรือภาษาของเนื้อหา

ในกรณีดังกล่าวให้ลองเปลี่ยนใหม่

$language = i18n_language_interface();

กับ

$language = i18n_language_content();

ใช้งานได้ดี แต่จะมีผลกับข้อความค้นหาใด ๆ บนไซต์เช่นข้อความค้นหาที่สร้างจากโมดูลมุมมองหรือข้อความค้นหา drupal ที่ใช้แทนการค้นหาเริ่มต้น "ค้นหา / โหนด /%"
mohamad salama

@mohamadsalama สิ่งนี้จะส่งผลต่อการค้นหาทั้งหมดที่มีผลต่อการเข้าถึงโหนด กล่าวอีกนัยหนึ่งแบบสอบถามมุมมองส่วนใหญ่ควรได้รับผลกระทบเว้นแต่คุณจะปิดใช้งานการตรวจสอบการเข้าถึงโหนดโดยเฉพาะในการตั้งค่าขั้นสูง (ปิดส่วนหัวของฉัน & ยืนยัน)
Alex Weber

นี่ไม่ใช่เบ็ดที่ไม่มีเอกสาร - จริง ๆ แล้วเป็นเบ็ด hook_query_TAG_alter () ที่ซึ่งแท็กคือ 'node_access' รหัสของฉันยังตรวจสอบเพื่อให้แน่ใจว่าไม่ได้มีเงื่อนไขภาษาในแบบสอบถาม แต่อย่างอื่นค่อนข้างคล้ายกัน
John Fiala

4

ฉันมีข้อกำหนดเดียวกันและฉันใช้โมดูลการค้นหาที่กำหนดเองซึ่งรวมถึง submodule ที่เรียกว่าCustom Search Internationalization : " เนื้อหาการค้นหาจากภาษาทั้งหมดหรือปัจจุบันเท่านั้นและการจัดการการแปลฉลากและตัวเลือกทั้งหมด " (หมายเหตุโมดูลนี้ยังมีประโยชน์อื่น ๆ อีกมากมาย คุณสมบัติเช่นบล็อกการค้นหาที่กำหนดเอง) ทำงานได้อย่างสมบูรณ์แบบ


0

ฉันไม่แน่ใจว่าสนับสนุนการค้นหาหลัก

ฉันเห็นโครงการi18nluceneapiแต่มันไม่รองรับเวอร์ชั่น 7 ในขณะนี้

ฉันใช้searchapiและสร้าง facets Language :) สามารถใช้กับกรณีของคุณสร้าง facets และตัวกรองเริ่มต้นในหน้าค้นหา


0

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

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