it-swarm-tr.com

Göreli menü bağlantılarını nasıl oluştururum?

Yerel ana bilgisayarımda Drupal'dan ayrı bir içeriğe bağlanması gereken bir sitede çalışmakla meşgulüm.

Geçerli menü yolları şu şekilde ayarlanmış: http://mylocalsite/the_folder_for_the_other_content. Eğer denersem <front>/the_folder_for_the_other_content veya /the_folder_for_the_other_content veya the_folder_for_the_other_content, "'Whatever_I_use' yolu geçersiz veya buna erişiminiz yok" hatasını alıyorum.

Canlı yayına başladığımda açıkçası tüm menü öğelerinin http://myrealsite/the_folder_for_the_other_content.

Yayınlamaya başladığımda tüm menü yollarını düzenlemem gerekmeyecek şekilde nasıl ayarlayabilirim?

10
Martin Duys

kiamlaluno'nun cevabı benim için pek işe yaramadı. % Menu_tail kullanımı, menu_tail_load işlevinin eksik argümanlarla ilgili sorun yaşadığına dair bir hata fırtınası oluşturdu:

Warning: Missing argument 2 for menu_tail_load(), called in  ... /includes/menu.inc on line 579 and defined in menu_tail_load() (line 827 of ... /includes/menu.inc).
Warning: Missing argument 3 for menu_tail_load(), called in ... /includes/menu.inc on line 579 and defined in menu_tail_load() (line 827 of ... /includes/menu.inc).

Benim için ne işe yaradı

function allow_menu_links_menu() {
  $items = array();
  $items['sites/d8/files/%'] = array(
    'title' => 'Folder Content',
    'page callback' => 'allow_menu_links_cb', /* never called */
    'access callback' => TRUE,
  );
  return $items;
}

Sonra, sites/d8/files/Documents/MyFile.pdf Gibi yolları olan menü öğelerini kullanarak sites/d8/files klasöründeki dosyaları (ve alt klasörleri) sunabilirim.

Menü sistemi daha sonra href="/sites/d8/files/Documents/MyFile.pdf" Gibi bir bağlantı oluşturur

Özel menü modülünü kullanmazsanız, menü sistemi yukarıdaki gibi başlayan bir yolu reddeder.

http:sites/d8/files/Documents/MyFile.pdf Gibi bir yol kullanmaya çalışırsanız, sitenin kök dizininde olduğunuzda ancak bir içerik sayfasında olduğunuzda çalışacak olan href="http:sites/d8/files/Documents/MyFile.pdf" Gibi bir bağlantı oluşturur. tarayıcı URL'yi içerik sayfasına göre yorumlar ve çalışmaz.

http:/sites/d8/files/Documents/MyFile.pdf Gibi bir yol kullanırsanız, menü sistemi bunu kabul eder, ancak menü sistemi href="http:/sites/d8/files/Documents/MyFile.pdf" Gibi bir tarayıcının (en azından Safari) href="http://sites/d8/files/Documents/MyFile.pdf" Ve "sites" adlı sunucuyu bulmaya çalışmaz.

(Daha ayrıntılı araştırmalarda, menu_tail kullanan kodun başarısız olmasının nedeni, burada belirtildiği gibi 'yükleme argümanlarını' eklemeniz gerektiğidir: http://api.drupal.org/api/drupal/includes--menu .inc/function/menu_tail_load/7 . Kiamlaluno'nun kodundaki $ item tanımına 'load arguments' => array('%map', '%index'), eklerseniz, işe yarayacaktır. menu_tail_load öğesinin açık yükleme bağımsız değişkenleri gerektirip gerektirmediği konusu da ele alınmıştır. burada: http://drupal.org/node/298561 )

(Yeni modülünüzü etkinleştirmeyi unutmayın, aksi takdirde menü sistemi yeni bağlantıları kabul etmez)

4
nachbar

Yeni bir bağlantı eklediğinizde, bağ, yolun geçerli olup olmadığını kontrol etmek için drupal_valid_path () öğesini çağıran menu_edit_item_validate () ile doğrulanır veya kullanıcıya erişilebilir.
drupal_valid_path() eğer TRUE döndürür

  • Yol <front> (<front>/directory veya benzeri yollar hariç tutulur)
  • Yol harici bir yoldur ( url_is_external () işlevi TRUE) döndürür
  • Yol, bir menü geri aramayla ilişkilidir

Mutlak URL'leri kullanmanın yanı sıra, tek çözüm kullanmak istediğiniz yolla ilişkilendirilmiş bir menü geri aramasını tanımlayan özel bir modüle sahip olmaktır.
Bir dosyayı veya dizini gösteren URL'yi kullandığınızda, web sunucusu bu dosyayı veya dizini Drupal'ı çağırmadan göstermelidir. Drupal ile gelen .htaccess dosyası aşağıdaki yönergeleri içerdiğinden Apache ile olan şey budur:

# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

Sizin durumunuzda, özel modül aşağıdakine benzer bir kod içermelidir:

function mymodule_menu() {
  $items = array();

  $items['the_folder_for_the_other_content/%menu_tail'] = array(
    'title' => 'Folder content', 
    'page callback' => 'mymodule_view', 
    'access callback' => TRUE,
    'load arguments' => array('%map', '%index'), 
  );

  return $items;
}

Bu menü olarak başlık ve sayfa geri araması için herhangi bir değer kullanabilirsiniz. asla geri çağırma yapılmamalıdır. erişim geri aramasının değeri, her kullanıcının o menü geri aramasına erişimi olduğunu Drupal) olarak belirtir.

Alternatif olarak "alias_for_directory /% menu_tail" ile ilişkili, kullanıcıyı gördükleri dizine yönlendiren ( drupal_goto () kullanarak) bir menü geri çağrısı tanımlayabilirsiniz. Sunucu .htaccess içeriğini kullanmadığında ve URL varolan bir dosya veya dizini işaret ederken bile Drupal çağırır.

5
kiamlaluno

Benim için aşağıdaki hile yaptı (on drupal 6).

Aynı alan adında başka bir URL'ye yönlendirmek istiyorum, diyelim Drupal http://www.example.com Üzerinde çalışıyor ve http://www.example.com/frontend

Menü öğesine, lütfen yol olarak girin:

http:/frontend

drupal menüsü şunlara bağlanır: http://www.example.com/frontend

Https kullandığınızda, menü öğesinin yol alanına https:/frontend girmelisiniz.

3
Paul

Bağlantı sorunlarımı aşağıdakilerle çözdüm:

http://groups.drupal.org/node/210308 ve http://drupal.org/node/372252

Görünüşe göre temam menüyü yanlış yazdırıyordu, böylece tüm öğeler geçerli konumuma göre (yani/oturum kapatma yerine admin/oturum kapatma).

Bu yardımcı olur umarım.

1
the_dillio

Menü yapısındaki bağlantıyı değiştirmek için sql kullandım:

UPDATE menu_links SET link_path = replace(link_path, "livesite.com", "localhost.com");

Bunu yapmak için gerekli, ancak sonra menü önbellek temizlendi emin değilim.

1
streamfan