मैं अपाचे सोलर खोज URL कैसे बदल सकता हूं?


12

मैं "Apacheolr_search / term" से डिफ़ॉल्ट Apache Solr URL पथ को किसी अन्य चीज़ में कैसे बदल सकता हूं?


3
यह बहुत बुरा है कि qrrban की पोस्ट को कई बार वोट दिया गया, क्योंकि यह काम करने वाला नहीं है - jhedstrom इस बात का पूरी तरह से वर्णन करता है कि बस हुक_मेनू_ल्टर के साथ रास्ते को ओवरराइड करने से दुर्घटनाग्रस्त हो जाएगी और जल जाएगी।
अरोनबूमन

जवाबों:


3

जिस तरह से मैंने आमतौर पर यह किया है वह हुक_मेनू_लेटर () को लागू करने के लिए है। फिर आप अपने द्वारा चुने गए सटीक तरीके से url को अनुकूलित कर सकते हैं:

/**
 * Implements hook_menu_alter().
 */
function example_menu_alter(&$menu) {
  // Ensure Apache Solr is the default and that the menu item exists.
  if (variable_get('apachesolr_search_make_default', 0) && isset($menu['search/apachesolr/%menu_tail'])) {
    $menu['search/%menu_tail'] = $menu['search/apachesolr/%menu_tail'];
    unset($menu['search/apachesolr/%menu_tail']);
  }
}

4

यदि आप केवल Apachesolr खोज मॉड्यूल का उपयोग कर रहे हैं तो खोज पथ को बदलना गैर-तुच्छ है। चूंकि यह मुख्य खोज मॉड्यूल पर निर्भर करता है, इसलिए पथ लगभग कठिन-कोडित है। यह खोज / {मॉड्यूल} /% menu_tail पर निर्भर करता है। यदि आप search_view () , खोज मॉड्यूल के कॉलबैक को देखते हैं, तो आप पाएंगे कि यह search_get_keys () को कॉल करता है , जो खोज कुंजियों को पथ के किसी विशेष भाग में होने की उम्मीद करता है। Apachesolr सर्च मॉड्यूल कुंजियों को प्राप्त करने के लिए भी इस फ़ंक्शन का उपयोग करता है, इसलिए एक साधारण हुक_मेनू_लेटर () को लागू करना अपने आप में काम नहीं करेगा।

जैसा कि यहां एक अन्य उत्तर में उल्लेख किया गया है, यदि आप व्यू 3.x को चलाने में सक्षम हैं, तो आपका सबसे अच्छा शर्त एपशोलर व्यू मॉड्यूल का उपयोग करना है । इस मॉड्यूल के साथ, आप खोज परिणामों के लिए किसी भी कस्टम पथ को आसानी से परिभाषित कर सकते हैं।

यदि आप 3.x नहीं चला सकते हैं, तो आपको डिफ़ॉल्ट खोज पथ को सफलतापूर्वक बदलने के लिए प्रपत्र परिवर्तन (विशेष रूप से, search_form) और कस्टम मेनू कॉलबैक के संयोजन का उपयोग करने की आवश्यकता होगी।


4

यदि आप इसे सेटिंग में रखते हैं तो यह काम करना चाहिए।

function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
  // Filter to get only the apache solr links with filters so it doesn't launch it for every link of our website
  if ($path == 'search/apachesolr_search/' && strpos($options['query'], 'filters') !== FALSE) {
    $new_path = $path.'?'.urldecode($options['query']);
    // See if we have a url_alias for our new path
    $sql = 'SELECT dst FROM {url_alias} WHERE src="%s"';
    $row = db_result(db_query($sql, $new_path));
    // If there is a dst url_alia, we change the path to it and erase the query
    if ($row) {
      $path = $row;
      $options['query'] = '';
    }
  }
}

function custom_url_rewrite_inbound(&$result, $path, $path_language) {
  // See if we have a url_alias for our new path
  $sql = 'SELECT src FROM {url_alias} WHERE dst="%s"';
  $row = db_result(db_query($sql, $path));
  if ($row) {
    // We found a source path
    $parts = preg_split('/[\?\&]/', $row);
    if (count($parts) > 1) {
      $result = array_shift($parts);
      // That's important because on my website, it doesn't work with the / at the end of result
      if ($result[strlen($result) - 1] == '/') {
        $result = substr($result, 0, strlen($result) - 1);
      }
      // Create the $_GET with the filter
      foreach ($parts as $part) {
        list($key, $value) = explode('=', $part);
        $_GET[$key] = $value;
        // Add this because the pager use the $_REQUEST variable to be set
        $_REQUEST[$key] = $value;
      }
    }
  }
}

और फिर जब आप एक मेनू प्रविष्टि बनाते हैं, तो आप अपाचे सोल का लिंक डालते हैं: खोज / apachesolr_search /? Filter = tid: 13

और खोज / apachesolr_search /? Filter = tid: 13 जैसे उत्पादों / tv.html के लिए एक url उपनाम बनाएं

के माध्यम से मिला: http://drupal.org/node/783836#comment-4136475


मुझे लग रहा है कि यह डी 6 के लिए है। क्या यह डी 7 के लिए आसानी से अनुकूलित है, जैसा कि सवाल पूछा गया है?
पुशका

3

आप अपनी साइट खोज के लिए सोल दृश्य का उपयोग कर सकते हैं ।

  1. एक ठोस दृश्य बनाएँ।
  2. अपने इच्छित पथ के साथ पृष्ठ प्रदर्शन जोड़ें
  3. फ़िल्टर के रूप में खोज पाठ जोड़ें।
  4. ब्लॉक में पर्चा भरा
  5. उस ब्लॉक को लगाएं जहां आप चाहते हैं कि आपका खोज बॉक्स जाए।

यह काम नहीं करता है
AnAnD

2

की जाँच करें hook_menu साथ कस्टम खोज पथ को जोड़ने से विकासशील वेब पर लोगों द्वारा। यह बात करता है कि कैसे उन्होंने अपने सोल खोज के लिए अनुकूल URL बनाने के लिए एक कस्टम मॉड्यूल लिखा। आपको शायद इसे थोड़ा ट्विक करने की आवश्यकता होगी, लेकिन यह एक अच्छा शुरुआती बिंदु है।


1

Apachesolr को उस पथ पर परिणाम देने के लिए निम्नलिखित की तरह एक नया मेनू कॉलबैक बनाने के बारे में क्या?

$menu['search']['page callback'] = 'apachesolr_search_view';


0

यदि आप केवल खोज / apachesolr_search / कुछ और को बदलना चाहते हैं, उदाहरण के लिए 'इन्वेंट्री', तो आप ग्लोबल अप्रत्यक्ष मॉड्यूल की कोशिश कर सकते हैं ।

चाल 2 उपनाम बनाने के लिए है - एक खोज के लिए / apachesolr_search / (faceted आइटम के लिए) और दूसरा अनुगामी स्लैश (मुख्य खोज पृष्ठ के लिए) के बिना। वैश्विक पुनर्निर्देशन एक ही गंतव्य के लिए 2 उपनाम बनाने से मना कर सकता है, लेकिन आप इसे सीधे db में सम्मिलित कर सकते हैं।

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