जब मैंने एक उजागर फ़िल्टर का उपयोग किया तो फ़िल्टर चयन को url में नाम / मान जोड़ी के रूप में पारित किया जाता है:
members?field_a=valuea&field_b=valueb
मैं इसे "पथौतो" शैली url के अधिक उपयोग के लिए कैसे सेट कर सकता हूं:
members/valuea/valueb
जब मैंने एक उजागर फ़िल्टर का उपयोग किया तो फ़िल्टर चयन को url में नाम / मान जोड़ी के रूप में पारित किया जाता है:
members?field_a=valuea&field_b=valueb
मैं इसे "पथौतो" शैली url के अधिक उपयोग के लिए कैसे सेट कर सकता हूं:
members/valuea/valueb
जवाबों:
मेरे एक सहयोगी ने कुछ समय पहले पथ डेटा नामक एक मॉड्यूल बनाया । उनका इरादा इस समस्या को हल करना था। दुर्भाग्य से यह पता चला है कि यह नियमित पथ उपनामों के साथ संघर्ष करता है, इसलिए यह drupal.org जैसी साइट पर काम करेगा जो उपनाम का उपयोग नहीं करता है, लेकिन साइट का उपयोग करके एक पथ-उपनाम पर लिंक तोड़ देगा ।
वर्तमान में, यह मेरा विश्वास है कि इस मुद्दे को हल करने का एकमात्र सामान्य तरीका या तो httpd परत पर URL को जोड़-तोड़ कर रहा है, या हुक_url_inbound_alter और हुक_ url_outbound_alter का उपयोग कर रहा है । आप इस प्रश्न पर उल्लिखित हुक के बारे में थोड़ा और पढ़ सकते हैं ।
हालांकि, अगर मुझे यह एक और शूट खुद देना था, तो मैं इसके बजाय एक दृश्य विशिष्ट समाधान का प्रयास करूंगा, क्योंकि यह समस्या काफी आम है कि इसके लिए एक मॉड्यूल होना उचित होगा।
में hook_views_pre_build , एक तो "सदस्यों / valuea / VALUE अरब" की तरह एक यूआरएल से डेटा ले सकता है, $ _GET [ 'क्यू'] में इन मूल्यों को धक्का, विचारों यह की क्वेरी "यूआरएल में" मिल तर्कों को देखने का निर्माण करते हैं, संभवतः उन्हें हटाने फिर से hook_views_post_build में ।
URL के लिए एक पैरामीटर , क्वेरी पैरामीटर्स है , जिसे मैंने हाल ही में जारी किया है जो आपके द्वारा बताए गए मुद्दे को संबोधित करता है:
यह मॉड्यूल निर्दिष्ट पथ पर स्वच्छ URL घटकों में URL क्वेरी मापदंडों को फिर से लिखने की क्षमता प्रदान करता है।
आप कॉन्फ़िगर कर सकते हैं कि कौन से रास्तों में एक सामान्य नियमित अभिव्यक्ति का उपयोग करके या एक मॉड्यूल हुक को लागू करके स्वच्छ URL घटकों के रूप में उनके क्वेरी तर्क को फिर से लिखना चाहिए।
इस तरह आप किसी व्यू एक्सपोज्ड फ़िल्टर URL को बदल सकते हैं
http://example-site.com/events?field_category_id[0]=100&field_category_id 1 = 101 और field_author_name [0] = जॉन और field_author_surname [0] = डो
नीचे यह हुक_url_inbound_alter, हुक_url_outbound_alter और जहां आवश्यक हो पुनर्निर्देशन के साथ हुक_इनिट का उपयोग करता है।
एक्सपोज़्ड फ़ॉर्म्स फॉर्म होते हैं, जिसका अर्थ है कि वह स्थान जहाँ वे पुनर्निर्देशित कर रहे हैं ("एक्शन" विशेषता), उपयोगकर्ता को कोई भी विकल्प चुनने से पहले पता होना चाहिए। इसलिए हम उसे किसी भी सुंदर URL पर पुनर्निर्देशित नहीं कर सकते हैं जिसमें उसकी पसंद के बारे में जानकारी हो। कामगार:
जावास्क्रिप्ट। उपयोगकर्ता द्वारा चुने गए विकल्पों के आधार पर उजागर फ़िल्टर फॉर्म की "एक्शन" विशेषता को बदलने के लिए जावास्क्रिप्ट का उपयोग करें और कॉन्फ़िगर किए गए उचित संदर्भ फिल्टर के साथ उचित दृश्य के URL पर "कार्रवाई" सेट करें। लेकिन मुझे संदेह है कि यह "एसईओ फ्रेंडली" होगा (यदि कोई गलत है तो कृपया मुझे सुधारें)।
डबल रीडायरेक्ट करें। प्रपत्र प्राप्त करने के बाद हुक_फॉर्म_ल्टर का उपयोग करके, उपयोगकर्ता को उसके इनपुट के आधार पर, उचित संदर्भ फिल्टर को कॉन्फ़िगर करने के साथ, उचित दृश्य के url पर पुनर्निर्देशित करें। यह वास्तव में कुछ ब्राउज़रों पर उपयोगकर्ता की पुष्टि की आवश्यकता हो सकती है, इसलिए यह बहुत कष्टप्रद हो सकता है।
उपरोक्त दोनों विधियों में, आपको उन प्रपत्रों की विधि को POST में बदलने के लिए https://drupal.org/project/views_expost का उपयोग करना होगा , इसलिए चर उपयोगकर्ताओं के URL को प्रदूषित नहीं करेंगे।
लब्बोलुआब यह है कि अगर आप को उजागर फिल्टर के साथ सुंदर यूआरएल की आवश्यकता है - आप शायद कुछ गलत कर रहे हैं। क्योंकि मुझे लगता है कि वे केवल डेटा फ़िल्टर करने के लिए हैं, और वेबसाइट पर नए पृष्ठों को परिभाषित करने के लिए उपयोग नहीं किया जाना चाहिए। यदि आपको इसकी आवश्यकता है - आप एक मेनू होने के लिए कॉन्फ़िगर किया गया एक दृश्य बना सकते हैं, और उस मेनू में यूआरएल, उपयोगकर्ता को उसी दृश्य पर पुनर्निर्देशित करेंगे जो वह अब है, लेकिन विभिन्न संदर्भ फ़िल्टर के साथ।
प्रोग्राम के नजरिए से, आप हमेशा हुक_उर्ल_इनबाउंड_लेटर () और हुक_उर्ल_आउटबाउंड_अल्टर () हुक का उपयोग कर सकते हैं ।
आप क्वेरी पैरामीटर को URL मॉड्यूल पर देने का प्रयास कर सकते हैं या यदि आप खोज API और पहलुओं का उपयोग कर रहे हैं , तो आप Facet API का उपयोग कर सकते हैं ।
आप अपने मार्ग में तर्कों का उपयोग करने और रीडायरेक्ट मॉड्यूल का उपयोग करने के लिए अपना दृष्टिकोण भी बदल सकते हैं ।
उपरोक्त के अलावा, इसे प्राप्त करने का कोई आसान तरीका नहीं है, क्योंकि ड्रुपल 8 के लिए अभी भी लंबित सुविधा है; URL उपनामों में क्वेरी स्ट्रिंग की अनुमति दें देखें ।
जब आप ऐसे पैनल का उपयोग कर रहे हैं जो विचारों का उपयोग करते हैं और उदाहरण में बेहतर उजागर किए गए फ़िल्टर, तो आप कुछ हैक कर सकते हैं जैसे (URL उदाहरण: /___l? श्रेणी = 123):
/**
* Implements hook_url_inbound_alter().
*/
function foo_url_outbound_alter(&$path, &$options, $original_path) {
if (arg(0) == 'panel_url') {
// Convert URL like: /panel_url?category=29 into /panel_url/term_name (SEO friendly)
$path_info = parse_url($path);
switch (@$path_info['path']) {
case 'panel_url/term_name':
case 'panel_url/term_name2':
$path = 'panel_url/all'; // Convert loopy urls into base url
}
if (strpos($path, '?category=') !== FALSE) { // Convert term id into human name
list(, $tid) = explode('=', current(explode('&', $path_info['query']))); // get tid from URL
$term_name = strtolower(taxonomy_term_load((int)$tid)->name);
$path = '/panel_url' . '/' . $term_name; // See also: $path_info['path']
}
}
}
अधिक जानकारी के लिए, कृपया फलक या ब्लॉक देखें पैनल में URL से पासिंग तर्क देखें ।
अंत में, आप अपने कस्टम मेनू कॉलबैक को परिभाषित करने और अपने दृश्य को प्रोग्रामेटिक रूप से लोड करने के लिए हुक_मेनू () का उपयोग कर सकते हैं ।
आप निम्नलिखित कोड का उपयोग कर सकते हैं।
function hook_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "abcd") {
$form['#submit'] = array('custom_search_redirect');
}
}
function custom_search_redirect($form, &$form_state) {
$form_state['redirect'] = "members/valuea/valueb;
}