Tercüme edilmiş düğüme nasıl ulaşılır?


10

Drupal 7'de çok dilli bir site kurdum. Bir şablonda belirli bir içerik düğümüne bir bağlantı eklemem gerekiyor. Bu düğüm şöyle çeviriler ve yol takma adları içeriyor:

node/42 = pathalias_de (german version)
node/43 = pathalias_en (english version)

Şablonda url(), geçerli dilde içerik düğümünün diğer adı olan sürümüne bağlantı almak için aramak istiyorum .

Almanca sayfasında /de/pathalias_deİngilizce sayfasına bağlantı vermeli/en/pathalias_en

Nid çağırmak, takma adı çağırmak, geçerli dil nesnesini iletmek gibi çeşitli varyasyonları denedim url().

Bu bir şey url()yapabilmeli mi yoksa farklı bir işleve ihtiyacım var mı? Teşekkürler!

Yanıtlar:


14

"İçerik çevirisi" modülünün kaynağına baktıktan sonra bu çözümü buldum:

    global $language;
    $translations = translation_path_get_translations("node/42");
    /*
    Returns the paths of all translations of a node, based on its Drupal path:
    array(2) {
        ["de"]=>string(7) "node/42"
        ["en"]=>string(7) "node/43"
    }
    */
    print l(t('Link Title'), $translations[$language->language]); //l() will return the alias to node/42

Bu, bağlantıyı doğru düğüm diğer adına gönderir. Çalışır ve aşırı karmaşık değildir - bunu zaten yapan bir işlev olup olmadığını merak ediyorum.


2
Veya $translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));düğüm kimliği yerine diğer adı aramak için kullanın, daha esnektir. Yine de doğru dili geçmelisiniz.
Dooderoo

5
global $language;

$translation_node = translation_path_get_translations("42");

$nid = $translation_node[$language->language]->nid;

$path = "node/{$nid}";

2
Drupal Cevaplarına Hoşgeldiniz! Bu teorik olarak soruyu cevaplayabilirken, kodunuzla birlikte temel açıklamaların dahil edilmesi tercih edilir.
Mołot

4

Drupal_get_path_alias işlevine bir göz atın

Dahili bir Drupal yolu verildiğinde, yönetici tarafından ayarlanan diğer adı döndürün.

Hiçbir yol sağlanmazsa, işlev geçerli sayfanın diğer adını döndürür.

Parametreler

$ path: Dahili bir Drupal yolu.

$ path_language: Yolu aramak için isteğe bağlı bir dil kodu.

Yapabileceğiniz gibi bir path_language parametresi alır. Böylece geçerli dili bulabilir ve daha sonra bu işleve geçebilirsiniz.

Veya Multilink modülünü kullanın

  1. Çok dilli siteler için tasarlanmıştır. Özellikle tüm dillerde tüm içeriğin bulunmadığı veya daha sonra sunulabildiği (çevrilebilir) siteler için geçerlidir.
  2. Diğer düğümlere kolayca içerik içi bağlantılar oluşturmanıza olanak tanır ve bu bağlantılar, varsa, başvurulan düğümlerin uygun bir çevrilmiş sürümüne işaret edecek şekilde otomatik olarak güncellenir.

1
drupal_get_path_alias()belirli bir düğümün çevirilerini aramaz, yalnızca belirli bir dilde bulunan takma adları arar . Başka bir çözüm buldum, cevabımı aşağıya bakın.
Dooderoo

3

Yukarıdaki cevapların hiçbiri i18n_path'i doğru şekilde kullanmıyor gibi görünüyor. Çevrilmiş düğüme bağlanmak istiyorsanız, i18n_path modülünü etkinleştirmeniz ve yolu bu şekilde biçimlendirmeniz gerekir,

drupal_get_path_alias('node/'.$node->nid, $node->language);

2

Muhtemelen link fonksiyonunu kullanmalısınız . Dili bir parametre olarak geçirmenizi sağlar ve Drupal ile bağlantı oluşturmak için uygun işlevdir.


l()url()dahili olarak kullanır, bu nedenle bu durumda önemli değildir.
Dooderoo

1

Çeviri Yönlendirme'yi kullanarak dil önekine sahip düğümlere bağlanabilirsiniz.

Yazdığı bu:

Çeviri yönlendirme modülü, anonim kullanıcıları (web tarayıcıları dahil) 301 yönlendirme kodu kullanarak sayfanın istenen dilde çevirisine yönlendirir. Örneğin, istek / de / node / 23 içinse ve node / 23 bir İngilizce sayfasına karşılık geliyorsa, kullanıcı varsa İngilizce düğümün Almanca çevirisine yönlendirilir. Çeviri yoksa, kaynak düğüm içeriği görüntülenir.

Örneğin, nid 22'nin İngilizce sürümü içinse ve Fransızca ve Almanca sürümleri varsa, onlara fr / node / 22 ve de / node / 22 olarak bağlayabilirsiniz. Bu 22, çevrilmiş versiyonun herhangi bir numarası olabilir.

Örneğin, Japonca eklemediyseniz belirli bir çeviri bulunamazsa, ja / node / 22 Anonim kullanıcılar için 404 verecektir.


0

Doğru önek yolunu almak için şunu kullanıyorum:

$node_url = url(drupal_get_path_alias('node/' . $row->nid));

Drupal_get_path_alias () yalnızca takma adı döndürür, url () öneki ("en /") ekleyen URL'dir.

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.