Зміна URL-адреси відкритого фільтра


15

Коли я використовував відкритий фільтр, вибір фільтра передається як пара імен / значень у URL-адресі, наприклад:

members?field_a=valuea&field_b=valueb

Як я можу налаштувати його на використання більше URL-адреси "патауто":

members/valuea/valueb

Відмінне запитання. AFAIK, поки що це неможливо, за винятком коду. Виявив це, що, здається, вирішує проблему, але ще не перевірив її.
Countzero

Ви відчуваєте проблеми з чистою URL, прочитайте цей пост drupal.org/getting-started/clean-urls
subhojit777

1
У мене включена чиста URL-адреса, для інших сторінок вона знаходиться в seo-приємній нотації, але для експонованих фільтрів це лише рядок запиту, наприклад, коли я переходжу до будь-якої статті, URL-адреса є зручною. Будь ласка, дайте мені знати, якщо я щось пропускаю.
Kalpesh Patel

Я можу побачити, що в цьому може бути якийсь момент, але перш ніж піти на проблему, я насправді шукаю докази. Що ще важливо: "SEO-зручна URL-адреса" або вміст, який відповідає звичайним пошукам? Якщо на сторінці результатів є сильна назва, я підозрюю, що вона буде набагато ціннішою, ніж її URL. Я, безумовно, спершу зосереджуюсь на вмісті, у будь-якому випадку.
Альфред Армстронг

Відповіді:


9

Мій колега створив модуль під назвою дані про шлях деякий час назад. Його наміром було вирішити цю саму проблему. На жаль , виявилося , що він конфліктує з регулярними псевдонімами шляху, тому він буде працювати на сайті як drupal.org , який не використовує псевдоніми, але буде розривати зв'язку на шляху-псевдонім з допомогою сайту.

Наразі, я вважаю, що єдиним загальним способом вирішити цю проблему є або маніпулювання URL-адресами на шарі httpd, або використання гачка_url_inbound_alter та kuka_url_outbound_alter . Ви можете прочитати трохи більше про згадані гачки в цьому питанні .

Однак, якби я хотів би зробити цю ще одну зйомку самостійно, я б спробував вирішити специфічне рішення натомість, оскільки ця проблема є достатньо поширеною, щоб можна було виправдати наявність модуля для цього.

У mock_views_pre_build можна взяти дані з URL-адреси на зразок "members / valuea / valueb", ввести ці значення в $ _GET ['q'], нехай перегляди створюють запит, бачачи аргументи get "в URL-адресі", а потім, можливо, видаляють їх знову в mook_views_post_build .


Спасибі. Це не виглядає банально. В основному я хочу це для цілей SEO, тому що павуки пошукової системи не проходять повз форму. Я можу просто використати другий вигляд з контекстними фільтрами та вставити свій відкритий блок фільтрів. Тоді мені просто потрібен трохи javascript, щоб виставлений фільтр подав до мого оригінального перегляду.
uwe

Хмм, якщо я , що я міг би використовувати Javascript , щоб змінити форму GET URL зі сторінки? Name1 = value1 & name2 = value2 на сторінці / value1 / value2 stackoverflow.com/questions/5815995 / ... . Якщо javascript вимкнено, у мене є оригінальний режим подання.
uwe

@letharion: не бачите жодної підтримки для Drupal 7.
реагуйте на розробника

4

Існує модуль " Параметри запиту до URL" , який я нещодавно випустив, і вирішує проблему, яку ви описуєте:

Цей модуль надає можливість переписати параметри запиту URL-адреси в «Очистити компоненти URL-адреси» на вказаних шляхах.

Ви можете налаштувати, які шляхи повинні мати аргументи запитів, переписані як чисті компоненти URL-адреси, використовуючи простий регулярний вираз, або застосувавши гачок модуля.

Таким чином ви можете перетворити URL-адресу фільтру, що відкривається, як-от

http://example-site.com/events?field_category_id evidence0škar=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 та прив'язку_init з перенаправленнями, де це необхідно.


А як щодо Drupal 8?
InspiredCoder

1

Викриті фільтри - це форми, це означає, що місце, куди вони переспрямовуються (атрибут "дія"), повинно бути відомо, перш ніж користувач вибере будь-який варіант. Тож ми не можемо перенаправити його на будь-яку гарну URL-адресу, яка містить інформацію про його вибір. Обхідні шляхи:

  1. JavaScript. Використовуйте JavaScript, щоб змінювати атрибут "action" на відкритій формі фільтру на основі параметрів, які вибрав користувач, і встановіть "action" на URL-адресу належного перегляду за допомогою налаштованих належних контекстних фільтрів. Але я сумніваюся, що це було б "SEO дружньо" тоді (будь-хто виправить мене, якщо я помиляюся).

  2. Зробіть подвійне переспрямування. Користуючись гаком_form_alter, отримавши форму, перенаправляйте користувача на URL належного перегляду з налаштованими належними контекстними фільтрами на основі його даних. Насправді це може знадобитися підтвердження користувача в деяких браузерах, тому це може бути дуже прикро.

В обох вищезазначених методах вам потрібно буде використовувати https://drupal.org/project/views_expost, щоб змінити метод цих форм на POST, тому змінні не забруднюють URL-адресу користувачів.

Суть полягає в тому, що якщо вам потрібно мати гарні URL-адреси з відкритими фільтрами - ви, ймовірно, робите щось не так. Тому що я думаю, що вони призначені лише для фільтрації даних, і їх не слід використовувати для визначення нових сторінок на веб-сайті. Якщо вам це потрібно - ви можете створити представлення, налаштоване на меню, і URL-адреси в цьому меню перенаправлять користувача на той самий вигляд, який він є зараз, але з різними контекстними фільтрами.


1

З програмної точки зору, ви завжди можете використовувати для цього гачки kuk_url_inbound_alter () та гачки_url_outbound_alter () .

Ви можете спробувати Виправити параметри для модуля URL-адреси або якщо ви використовуєте API пошуку та грані , ви можете використовувати Додаткові шляхи API Facet API .

Ви також можете перетворити свій погляд, щоб використовувати аргументи на своєму шляху та використовувати модуль перенаправлення .

Крім вищезазначеного, не існує простого способу цього досягти, оскільки для Drupal 8 ще існує функція, що очікує на розгляд; див. Дозволити рядки запитів у псевдонімах URL .

Коли ви використовуєте панелі, які використовують представлення даних, і, наприклад, краще відкриті фільтри, ви можете зробити кілька таких хак, як-от (наприклад, URL-адреса: / panel_url? Kategorija = 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;
}

Перегляди не знають про нову URL-адресу вашого рішення !!
prabeen giri
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.