वर्तमान में सक्रिय भाषा के लिए ही खोजें


23

मैं ड्रुपल 7 में डिफ़ॉल्ट खोज से परिणामों को कैसे सीमित कर सकता हूं, केवल वर्तमान भाषा में नोड्स लाने के लिए?

मेरी वेबसाइट में तीन भाषा स्विचर हैं; उपयोगकर्ता चुनता है कि साइट देखते समय वह किस भाषा का उपयोग करना चाहता है। यदि वह कुछ खोजता है, तो परिणाम पृष्ठ अन्य भाषाओं से परिणाम लाता है। आज मेरे पास केवल 3 सक्षम भाषाएं हैं, लेकिन हम इसे 6 या अधिक तक विस्तारित करने की योजना बनाते हैं।

जवाबों:


2

आप यह $languageजानने के लिए वैश्विक का उपयोग कर सकते हैं कि आप किस भाषा में हैं। दृश्य में, आप "सामग्री: भाषा -> वर्तमान उपयोगकर्ता भाषा" का उपयोग करके फ़िल्टर कर सकते हैं।


3
यह कैसे मदद करता है? क्या आप खोज पृष्ठ को नोड के साथ बदल सकते हैं? क्या इसमें कोई कमियां हैं?
जम्पर

25

जाहिरा तौर पर undocumented का उपयोग कर ऐसा करने के लिए एक बहुत ही सुंदर तरीका है 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();

सही काम करता है, लेकिन क्या यह साइट पर किसी भी क्वेरी को प्रभावित करेगा, जैसे कि दृश्य मॉड्यूल से उत्पन्न क्वेरी, या डिफ़ॉल्ट "खोज / नोड /%" के बजाय कोई आधारित ड्रुपल क्वेरी?
मौहम्मद सलामा

@mohamadsalama यह उन सभी खोज प्रश्नों को प्रभावित करेगा जो नोड एक्सेस को प्रभावित करते हैं; दूसरे शब्दों में, जब तक आप विशेष रूप से उन्नत सेटिंग्स (मेरे सिर के ऊपर और अपुष्ट) से नोड एक्सेस चेक को अक्षम नहीं करते, तब तक अधिकांश दृश्य प्रश्न प्रभावित होने चाहिए।
एलेक्स वेबर

यह एक अनिर्धारित हुक नहीं है - यह वास्तव में हुक_क्वेरी_एजी_एल्टर () हुक है, जहां टैग 'नोड_केस' है। मेरा अपना कोड यह सुनिश्चित करने के लिए भी जांच करता है कि क्वेरी में पहले से ही कोई भाषा की स्थिति नहीं है, लेकिन अन्यथा काफी समान है।
जॉन फियाला

4

मेरी समान आवश्यकताएं थीं, और मैंने कस्टम खोज मॉड्यूल का उपयोग किया , जिसमें कस्टम खोज अंतर्राष्ट्रीयकरण नामक एक सबमॉड्यूल शामिल है : " सभी या वर्तमान भाषा से खोज सामग्री, और सभी लेबल और चयनकर्ता अनुवाद से निपटने " (ध्यान दें कि यह मॉड्यूल कई अन्य सहायक भी प्रदान करता है) कस्टम खोज ब्लॉक जैसी सुविधाएँ)। अच्छी तरह से काम।


0

मुझे यकीन नहीं है कि खोज कोर इसे समर्थन करते हैं।

मैं इस परियोजना i18nluceneapi को देखता हूं, लेकिन यह फिलहाल 7 संस्करण का समर्थन नहीं करता है।

मैं searchapi का उपयोग कर रहा हूं और facets भाषा बनाएं :)। यह आपके मामले के लिए उपयोग कर सकता है, खोज पृष्ठ पर पहलू और डिफ़ॉल्ट फ़िल्टर बना सकता है।


0

आप डिस्प्ले सूट मॉड्यूल का उपयोग कर सकते हैं जहां आप विकल्प देख सकते हैं मोड-> भाषा जो वर्तमान भाषा में खोज परिणाम देती है जो वर्तमान साइट भाषा में है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.