Tüm URL'leri ek bilgiler içerecek şekilde değiştirme


8

URL'leri değiştirmek için hangi kancalar mevcuttur? Örneğin, etkinleştirildiğinde, URL'leri olduğu gibi /en/node/1bırakmak yerine URL'ler sağlayan dil modülleri vardır /node/1.

URL'de benzer bir şeye sahip olmak istiyorum, başka işlevsellikten ödün vermeden erişebiliyorum.

Bu nasıl başarılır?

Yanıtlar:


4

Bir bağlantı URL'sini yazıldığı sırada değiştirmenin bir yolunu mu arıyorsunuz? Son zamanlarda bunu inceledim ve ne kadar avlanma gerektiğine şaşırdım.

hook_url_outbound_alter( &$path, &$options, $original_path )Drupal URL sistemi tarafından yazılan bağlantı URL'lerini değiştirmenize izin veren gittim .

Ayrıca hook_url_inbound_alter( &$path, $original_path, $path_language ), yolun belirli dilini içerdiği için daha iyi olabilir - bu, değişikliğin nerede yapılmasını istediğinize bağlıdır. Şahsen çalışmak için hook_url_outbound_alter()güvenilir ve basit buluyorum - yazıldığı gibi tüm uygun URL'leri değiştirir ve $ seçeneklerini kullanarak güvenilir bir şekilde sorgu dizeleri ekleyebilir ve düzenleyebilirsiniz (...? Query = string & foo = bar) ve karma düzenlemeleri (... #someId).

$ Yolunu değiştirin, URL href dosyasına yazılan gerçek yolu güncelleyecektir. Tabii ki, bu tüm bağlantılar üzerinde çalışır, bu yüzden değiştirmek istediğiniz bir bağlantı olup olmadığını kontrol ederek başlamak istersiniz.

Takma addan önce yürütülür, bu nedenle Drupal varsayılanlarına dayanacaktır. Yalnızca sınıflandırma yollarını değiştirmek istiyorsanız, çok basit iki örnek vermek için:

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

Ve / veya yalnızca belirli sayfalarda çalışmasını istiyorsanız, örneğin düğüm düzenleme sayfaları:

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
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.