Mengubah semua url untuk memasukkan informasi tambahan


8

Kait apa yang tersedia untuk mengubah url? Misalnya, ada modul bahasa yang, ketika diaktifkan, memberikan url seperti /en/node/1tidak membiarkannya /node/1.

Saya ingin memiliki sesuatu yang serupa di url, yang dapat saya akses tanpa terganggu fungsi lainnya.

Bagaimana ini dicapai?

Jawaban:


4

Jadi, Anda mencari cara untuk mengubah URL tautan saat sedang ditulis? Saya melihat ke dalam ini baru-baru ini dan terkejut melihat berapa banyak perburuan yang diperlukan.

Saya ikut hook_url_outbound_alter( &$path, &$options, $original_path ), yang memungkinkan Anda untuk mengubah URL tautan yang sedang ditulis oleh sistem URL Drupal.

Ada juga hook_url_inbound_alter( &$path, $original_path, $path_language ), yang mungkin lebih baik karena termasuk langauge khusus jalan - itu tergantung di mana Anda ingin perubahan terjadi. Saya pribadi menemukan hook_url_outbound_alter()andal dan mudah untuk dikerjakan - itu mengubah semua URL yang sesuai saat ditulis, dan menggunakan $ options Anda dapat dengan andal menambahkan dan mengedit string kueri (...? Kueri = string & foo = bar) dan hash frangments (... #someId).

Ubah $ path dan itu akan memperbarui jalur aktual yang ditulis ke dalam URL href. Tentu saja, ini berjalan di semua tautan, jadi Anda harus memulai dengan memeriksa bahwa itu tautan yang ingin Anda modifikasi.

Itu dieksekusi sebelum aliasing, jadi itu akan didasarkan pada default Drupal. Untuk memberikan dua contoh yang sangat sederhana, jika Anda hanya ingin memodifikasi jalur taksonomi:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  if(strpos($original_path, 'taxonomy/term') === 0) {
    // do stuff
  }
}

Dan / atau jika Anda hanya ingin menjalankannya pada halaman tertentu, misal halaman edit node:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  $current_path = explode("/", current_path() );
  if (count($current_path) >= 3 && $current_path[0] == "node" && $current_path[2] == "edit") {
    // do stuff
  }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.