उजागर फ़िल्टर का url बदलना


15

जब मैंने एक उजागर फ़िल्टर का उपयोग किया तो फ़िल्टर चयन को url में नाम / मान जोड़ी के रूप में पारित किया जाता है:

members?field_a=valuea&field_b=valueb

मैं इसे "पथौतो" शैली url के अधिक उपयोग के लिए कैसे सेट कर सकता हूं:

members/valuea/valueb

बहुत बढ़िया सवाल। AFAIK, कोड के अलावा अभी तक संभव नहीं है। इस समस्या को हल करने के लिए लगता है, जो मिला , लेकिन यह अभी तक परीक्षण नहीं किया।
काउंट्ज़ेरो

आपको क्लीन URL की समस्या हो रही है, इस पोस्ट को drupal.org/getting-started/clean-urls
subhojit777

1
मेरे पास क्लीन यूआरएल सक्षम है, अन्य पृष्ठों के लिए यह एसईओ फ्रेंडली नोटेशन में है, लेकिन एक्सपोजर फिल्टर के लिए यह केवल क्वेरी स्ट्रिंग है जैसे जब मैं किसी भी लेख पर जाता हूं, तो यूआरएल एसईओ के अनुकूल है। कृपया मुझे बताएं कि क्या मुझे कुछ याद आ रहा है।
कल्पेश पटेल

मैं देख सकता हूं कि इसके कुछ बिंदु हो सकते हैं, लेकिन मुसीबत में जाने से पहले मैं वास्तव में सबूत तलाशूंगा। क्या अधिक मायने रखता है: एक "SEO-friendly URL" या ऐसी सामग्री जो सामान्य खोजों से मेल खाती है? यदि परिणाम पृष्ठ में एक मजबूत शीर्षक है, तो मुझे संदेह है कि यह इसके URL से बहुत अधिक मूल्यवान होगा। मैं निश्चित रूप से किसी भी मामले में पहले सामग्री पर ध्यान केंद्रित करूँगा।
अल्फ्रेड आर्मस्ट्रांग

जवाबों:


9

मेरे एक सहयोगी ने कुछ समय पहले पथ डेटा नामक एक मॉड्यूल बनाया । उनका इरादा इस समस्या को हल करना था। दुर्भाग्य से यह पता चला है कि यह नियमित पथ उपनामों के साथ संघर्ष करता है, इसलिए यह drupal.org जैसी साइट पर काम करेगा जो उपनाम का उपयोग नहीं करता है, लेकिन साइट का उपयोग करके एक पथ-उपनाम पर लिंक तोड़ देगा

वर्तमान में, यह मेरा विश्वास है कि इस मुद्दे को हल करने का एकमात्र सामान्य तरीका या तो httpd परत पर URL को जोड़-तोड़ कर रहा है, या हुक_url_inbound_alter और हुक_ url_outbound_alter का उपयोग कर रहा है । आप इस प्रश्न पर उल्लिखित हुक के बारे में थोड़ा और पढ़ सकते हैं ।

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

में hook_views_pre_build , एक तो "सदस्यों / valuea / VALUE अरब" की तरह एक यूआरएल से डेटा ले सकता है, $ _GET [ 'क्यू'] में इन मूल्यों को धक्का, विचारों यह की क्वेरी "यूआरएल में" मिल तर्कों को देखने का निर्माण करते हैं, संभवतः उन्हें हटाने फिर से hook_views_post_build में


धन्यवाद। यह तुच्छ नहीं दिखता है। मैं मुख्य रूप से इसे एसईओ प्रयोजनों के लिए चाहता हूं क्योंकि खोज इंजन मकड़ियों एक फार्म के पिछले क्रॉल नहीं करते हैं। मैं सिर्फ संदर्भ फिल्टर के साथ एक दूसरे दृश्य का उपयोग कर सकता हूं और अपने उजागर फ़िल्टर ब्लॉक को एम्बेड कर सकता हूं। तब मुझे बस कुछ जावास्क्रिप्ट की जरूरत होती है ताकि मेरे मूल दृश्य को उजागर फ़िल्टर सबमिट किया जा सके।
uwe

हम्म, अगर मैं ऐसा करता हूं कि मैं पेज से GET url को संशोधित करने के लिए जावास्क्रिप्ट का उपयोग कर सकता हूं? name1 = value1 & name2 = value2 to page / value1 / value2 stackoverflow.com/questions/5815995- " । यदि जावास्क्रिप्ट को अक्षम किया जाता है, तो मेरे पास एक कमबैक के रूप में मेरा मूल दृष्टिकोण है।
17

@letharion: Drupal 7. के लिए कोई समर्थन नहीं देख रहा है
डेवलपर

4

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] = डो

में http://example-site.com/events/p/field_category_id/0__100--1__101/field_author_name/0__John/field_author_surname/0__Doe

नीचे यह हुक_url_inbound_alter, हुक_url_outbound_alter और जहां आवश्यक हो पुनर्निर्देशन के साथ हुक_इनिट का उपयोग करता है।


Drupal 8 के बारे में क्या?
इंस्पायर्डकॉडर

1

एक्सपोज़्ड फ़ॉर्म्स फॉर्म होते हैं, जिसका अर्थ है कि वह स्थान जहाँ वे पुनर्निर्देशित कर रहे हैं ("एक्शन" विशेषता), उपयोगकर्ता को कोई भी विकल्प चुनने से पहले पता होना चाहिए। इसलिए हम उसे किसी भी सुंदर URL पर पुनर्निर्देशित नहीं कर सकते हैं जिसमें उसकी पसंद के बारे में जानकारी हो। कामगार:

  1. जावास्क्रिप्ट। उपयोगकर्ता द्वारा चुने गए विकल्पों के आधार पर उजागर फ़िल्टर फॉर्म की "एक्शन" विशेषता को बदलने के लिए जावास्क्रिप्ट का उपयोग करें और कॉन्फ़िगर किए गए उचित संदर्भ फिल्टर के साथ उचित दृश्य के URL पर "कार्रवाई" सेट करें। लेकिन मुझे संदेह है कि यह "एसईओ फ्रेंडली" होगा (यदि कोई गलत है तो कृपया मुझे सुधारें)।

  2. डबल रीडायरेक्ट करें। प्रपत्र प्राप्त करने के बाद हुक_फॉर्म_ल्टर का उपयोग करके, उपयोगकर्ता को उसके इनपुट के आधार पर, उचित संदर्भ फिल्टर को कॉन्फ़िगर करने के साथ, उचित दृश्य के url पर पुनर्निर्देशित करें। यह वास्तव में कुछ ब्राउज़रों पर उपयोगकर्ता की पुष्टि की आवश्यकता हो सकती है, इसलिए यह बहुत कष्टप्रद हो सकता है।

उपरोक्त दोनों विधियों में, आपको उन प्रपत्रों की विधि को POST में बदलने के लिए https://drupal.org/project/views_expost का उपयोग करना होगा , इसलिए चर उपयोगकर्ताओं के URL को प्रदूषित नहीं करेंगे।

लब्बोलुआब यह है कि अगर आप को उजागर फिल्टर के साथ सुंदर यूआरएल की आवश्यकता है - आप शायद कुछ गलत कर रहे हैं। क्योंकि मुझे लगता है कि वे केवल डेटा फ़िल्टर करने के लिए हैं, और वेबसाइट पर नए पृष्ठों को परिभाषित करने के लिए उपयोग नहीं किया जाना चाहिए। यदि आपको इसकी आवश्यकता है - आप एक मेनू होने के लिए कॉन्फ़िगर किया गया एक दृश्य बना सकते हैं, और उस मेनू में यूआरएल, उपयोगकर्ता को उसी दृश्य पर पुनर्निर्देशित करेंगे जो वह अब है, लेकिन विभिन्न संदर्भ फ़िल्टर के साथ।


1

प्रोग्राम के नजरिए से, आप हमेशा हुक_उर्ल_इनबाउंड_लेटर () और हुक_उर्ल_आउटबाउंड_अल्टर () हुक का उपयोग कर सकते हैं ।

आप क्वेरी पैरामीटर को 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 से पासिंग तर्क देखें

अंत में, आप अपने कस्टम मेनू कॉलबैक को परिभाषित करने और अपने दृश्य को प्रोग्रामेटिक रूप से लोड करने के लिए हुक_मेनू () का उपयोग कर सकते हैं ।


-1

आप निम्नलिखित कोड का उपयोग कर सकते हैं।

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;
}

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