Thay đổi url của bộ lọc tiếp xúc


15

Khi tôi sử dụng bộ lọc bị lộ, lựa chọn bộ lọc được truyền dưới dạng cặp tên / giá trị trong url, ví dụ:

members?field_a=valuea&field_b=valueb

Làm cách nào tôi có thể thiết lập nó để sử dụng nhiều hơn kiểu url "pathauto":

members/valuea/valueb

Câu hỏi tuyệt vời. AFAIK, hiện tại không thể, ngoại trừ mã. Tìm thấy điều này dường như để giải quyết vấn đề, nhưng chưa thử nghiệm nó.
Countzero

Bạn đang gặp vấn đề với URL sạch, hãy đọc bài đăng này drupal.org/getting-started/clean-urls
subhojit777

1
Tôi đã bật url sạch, đối với các trang khác, nó có ký hiệu thân thiện với seo, nhưng đối với bộ lọc bị lộ chỉ là chuỗi truy vấn, ví dụ như khi tôi đi đến bất kỳ bài viết nào, url đều thân thiện với seo. Xin vui lòng cho tôi biết nếu tôi đang thiếu một cái gì đó.
Kalpesh Patel

Tôi có thể thấy có thể có một số điểm cho vấn đề này, nhưng trước khi gặp rắc rối tôi thực sự tìm kiếm bằng chứng. Điều gì quan trọng hơn: "URL thân thiện với SEO" hoặc nội dung tương ứng với các tìm kiếm phổ biến? Nếu một trang kết quả có tiêu đề mạnh, tôi nghi ngờ rằng nó sẽ có giá trị hơn nhiều so với URL của nó. Tôi chắc chắn sẽ tập trung vào nội dung đầu tiên, trong mọi trường hợp.
Alfred Armstrong

Câu trả lời:


9

Một đồng nghiệp của tôi đã tạo ra một mô-đun gọi là dữ liệu đường dẫn một lúc trước. Ý định của anh là giải quyết vấn đề này. Thật không may, nó đã chỉ ra rằng nó xung đột với các bí danh đường dẫn thông thường, vì vậy nó sẽ hoạt động trên một trang web như drupal.org không sử dụng bí danh, nhưng sẽ phá vỡ các liên kết trên một bí danh đường dẫn sử dụng trang web.

Hiện tại, tôi tin rằng cách chung duy nhất để giải quyết vấn đề này là thao túng các URL ở lớp httpd hoặc sử dụng hook_url_inbound_alterhook_url thừng ra_alter . Bạn có thể đọc thêm một chút về các móc được đề cập tại câu hỏi này .

Tuy nhiên, nếu tôi tự thực hiện một cảnh quay khác, tôi sẽ thử một giải pháp cụ thể cho Lượt xem, vì vấn đề này đủ phổ biến để có thể có lý do để có một mô-đun cho việc này.

Trong hook_view_pre_build , người ta có thể lấy dữ liệu từ một url như "thành viên / valuea / valueb", đẩy các giá trị này thành $ _GET ['q'], để chế độ xem xây dựng truy vấn của nó khi thấy các đối số "trong url", sau đó có thể xóa chúng một lần nữa trong hook_view_post_build .


cảm ơn. Nó không có vẻ tầm thường. Tôi chủ yếu muốn nó cho mục đích SEO vì các công cụ tìm kiếm không thu thập dữ liệu qua một biểu mẫu. Tôi chỉ có thể sử dụng chế độ xem thứ hai với các bộ lọc theo ngữ cảnh và nhúng khối bộ lọc được hiển thị của mình. Sau đó, tôi chỉ cần một số javascript để bộ lọc được hiển thị gửi đến chế độ xem ban đầu của tôi.
uwe

hmm, nếu tôi làm điều đó tôi có thể sử dụng javascript để sửa đổi biểu mẫu GET url từ trang? name1 = value1 & name2 = value2 thành page / value1 / value2 stackoverflow.com/questions/5815995/ . Nếu javascript bị vô hiệu hóa, tôi có chế độ xem ban đầu là dự phòng.
uwe

@letharion: không thấy bất kỳ sự hỗ trợ nào cho Drupal 7.
Nhà phát triển React

4

Có một mô-đun, Tham số truy vấn đến URL , gần đây tôi đã phát hành để giải quyết vấn đề bạn đang mô tả:

Mô-đun này cung cấp khả năng viết lại các tham số truy vấn URL thành các thành phần URL sạch trên các đường dẫn được chỉ định.

Bạn có thể định cấu hình các đường dẫn nên viết lại các đối số truy vấn của chúng dưới dạng các thành phần URL sạch bằng cách sử dụng một biểu thức chính quy đơn giản hoặc bằng cách thực hiện một móc mô-đun.

Bằng cách đó, bạn có thể chuyển đổi URL bộ lọc hiển thị như

http://example-site.com/events?field_carget_id[0[=100&field_carget_id 1 = 101 & field_ Author_name [0] = John & field_ Author_surname [0] = Doe

vào http://example-site.com/events/p/field_carget_id/0__100--1__101/field_ Author_name / 0__John / field_ Author_surname / ____

Bên dưới nó sử dụng hook_url_inbound_alter, hook_url thừng hướng_alter và hook_init với các chuyển hướng khi cần thiết.


1

Các bộ lọc tiếp xúc là các biểu mẫu, có nghĩa là nơi chúng đang chuyển hướng (thuộc tính "hành động"), cần được biết trước khi người dùng chọn bất kỳ tùy chọn nào. Vì vậy, chúng tôi không thể chuyển hướng anh ấy đến bất kỳ URL đẹp nào có chứa thông tin về lựa chọn của anh ấy. Cách giải quyết:

  1. JavaScript. Sử dụng JavaScript để thay đổi thuộc tính "hành động" nhanh của biểu mẫu bộ lọc được hiển thị dựa trên các tùy chọn mà người dùng đã chọn và đặt "hành động" thành URL của chế độ xem phù hợp với các bộ lọc theo ngữ cảnh phù hợp được định cấu hình. Nhưng tôi nghi ngờ nó sẽ "thân thiện với SEO" (xin vui lòng ai đó sửa tôi nếu tôi sai).

  2. Làm chuyển hướng kép. Bằng cách sử dụng hook_form_alter, sau khi nhận được biểu mẫu, hãy chuyển hướng người dùng đến url của chế độ xem phù hợp, với các bộ lọc theo ngữ cảnh phù hợp được định cấu hình, dựa trên đầu vào của anh ta. Điều này thực sự có thể cần một xác nhận người dùng trên một số trình duyệt, vì vậy nó có thể cực kỳ khó chịu.

Trong cả hai phương pháp trên, bạn sẽ cần sử dụng https://drupal.org/project/view_Exost để thay đổi phương thức của các biểu mẫu đó thành POST, vì vậy các biến sẽ không gây ô nhiễm URL của người dùng.

Điểm mấu chốt là nếu bạn cần có các url đẹp với các bộ lọc bị lộ - có lẽ bạn đang làm sai điều gì đó. Bởi vì tôi nghĩ rằng chúng chỉ để lọc dữ liệu và không nên được sử dụng để xác định các trang mới trên trang web. Nếu bạn cần điều đó - bạn có thể tạo một chế độ xem được định cấu hình thành một menu và các url trong menu đó, sẽ chuyển hướng người dùng đến cùng chế độ xem hiện tại, nhưng với các bộ lọc theo ngữ cảnh khác nhau.


1

Từ phối cảnh theo chương trình, bạn luôn có thể sử dụng hook hook_url_inbound_alter ()hook_url thừng gửi_alter () cho điều đó.

Bạn có thể thử mô-đun truy vấn tham số đến URL hoặc nếu bạn đang sử dụng API tìm kiếm và các khía cạnh , bạn có thể sử dụng các đường dẫn đẹp của API Facet .

Bạn cũng có thể chuyển đổi chế độ xem của mình để sử dụng các đối số trong đường dẫn của mình và sử dụng mô-đun Redirect .

Ngoài những điều trên, không có cách nào dễ dàng để đạt được điều đó, vì vẫn còn tính năng chờ xử lý cho Drupal 8; xem Cho phép chuỗi truy vấn trong bí danh URL .

Khi bạn đang sử dụng bảng điều khiển sử dụng chế độ xem và trong các bộ lọc được hiển thị tốt hơn, bạn có thể thực hiện một số hack như (ví dụ URL: / panel_url? Category = 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']
    }
  }
}

Để biết thêm thông tin, vui lòng xem Truyền đối số từ URL trong Bảng điều khiển để xem ngăn hoặc chặn .

Cuối cùng, bạn có thể sử dụng hook_menu () để xác định các cuộc gọi lại menu tùy chỉnh và tải chế độ xem của bạn theo chương trình.


-1

Bạn có thể sử dụng mã sau đây.

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

Lượt xem không biết url mới với giải pháp của bạn !!
prabeen giri
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.