मैं "Apacheolr_search / term" से डिफ़ॉल्ट Apache Solr URL पथ को किसी अन्य चीज़ में कैसे बदल सकता हूं?
मैं "Apacheolr_search / term" से डिफ़ॉल्ट Apache Solr URL पथ को किसी अन्य चीज़ में कैसे बदल सकता हूं?
जवाबों:
जिस तरह से मैंने आमतौर पर यह किया है वह हुक_मेनू_लेटर () को लागू करने के लिए है। फिर आप अपने द्वारा चुने गए सटीक तरीके से 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']);
}
}
यदि आप केवल Apachesolr खोज मॉड्यूल का उपयोग कर रहे हैं तो खोज पथ को बदलना गैर-तुच्छ है। चूंकि यह मुख्य खोज मॉड्यूल पर निर्भर करता है, इसलिए पथ लगभग कठिन-कोडित है। यह खोज / {मॉड्यूल} /% menu_tail पर निर्भर करता है। यदि आप search_view () , खोज मॉड्यूल के कॉलबैक को देखते हैं, तो आप पाएंगे कि यह search_get_keys () को कॉल करता है , जो खोज कुंजियों को पथ के किसी विशेष भाग में होने की उम्मीद करता है। Apachesolr सर्च मॉड्यूल कुंजियों को प्राप्त करने के लिए भी इस फ़ंक्शन का उपयोग करता है, इसलिए एक साधारण हुक_मेनू_लेटर () को लागू करना अपने आप में काम नहीं करेगा।
जैसा कि यहां एक अन्य उत्तर में उल्लेख किया गया है, यदि आप व्यू 3.x को चलाने में सक्षम हैं, तो आपका सबसे अच्छा शर्त एपशोलर व्यू मॉड्यूल का उपयोग करना है । इस मॉड्यूल के साथ, आप खोज परिणामों के लिए किसी भी कस्टम पथ को आसानी से परिभाषित कर सकते हैं।
यदि आप 3.x नहीं चला सकते हैं, तो आपको डिफ़ॉल्ट खोज पथ को सफलतापूर्वक बदलने के लिए प्रपत्र परिवर्तन (विशेष रूप से, search_form) और कस्टम मेनू कॉलबैक के संयोजन का उपयोग करने की आवश्यकता होगी।
यदि आप इसे सेटिंग में रखते हैं तो यह काम करना चाहिए।
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
आप अपनी साइट खोज के लिए सोल दृश्य का उपयोग कर सकते हैं ।
की जाँच करें hook_menu साथ कस्टम खोज पथ को जोड़ने से विकासशील वेब पर लोगों द्वारा। यह बात करता है कि कैसे उन्होंने अपने सोल खोज के लिए अनुकूल URL बनाने के लिए एक कस्टम मॉड्यूल लिखा। आपको शायद इसे थोड़ा ट्विक करने की आवश्यकता होगी, लेकिन यह एक अच्छा शुरुआती बिंदु है।
Apachesolr को उस पथ पर परिणाम देने के लिए निम्नलिखित की तरह एक नया मेनू कॉलबैक बनाने के बारे में क्या?
$menu['search']['page callback'] = 'apachesolr_search_view';
या आप केवल एक योगदान मॉड्यूल को संशोधित कर सकते हैं जो ऐसा करता है: अपाचे सोल कस्टम पथ ।
यदि आप केवल खोज / apachesolr_search / कुछ और को बदलना चाहते हैं, उदाहरण के लिए 'इन्वेंट्री', तो आप ग्लोबल अप्रत्यक्ष मॉड्यूल की कोशिश कर सकते हैं ।
चाल 2 उपनाम बनाने के लिए है - एक खोज के लिए / apachesolr_search / (faceted आइटम के लिए) और दूसरा अनुगामी स्लैश (मुख्य खोज पृष्ठ के लिए) के बिना। वैश्विक पुनर्निर्देशन एक ही गंतव्य के लिए 2 उपनाम बनाने से मना कर सकता है, लेकिन आप इसे सीधे db में सम्मिलित कर सकते हैं।