Bagaimana cara mendapatkan path ke node yang diterjemahkan?

10

Saya telah menyiapkan situs multilanguage di Drupal 7. Dalam sebuah templat saya perlu menambahkan tautan ke simpul konten tertentu. Node ini memiliki terjemahan dan alias path seperti:

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

Dalam templat yang ingin saya panggil url()untuk mendapatkan tautan ke versi alias dari simpul konten dalam bahasa saat ini.

Pada halaman bahasa Jerman itu harus terhubung ke /de/pathalias_depada halaman bahasa Inggris ke/en/pathalias_en

Saya sudah mencoba beberapa variasi, seperti memanggil nid, memanggil alias, meneruskan objek bahasa saat ini url().

Apakah ini sesuatu yang url()harus dapat dilakukan atau apakah saya memerlukan fungsi yang berbeda? Terima kasih!

Dooderoo
sumber

Jawaban:

14

Setelah melihat sumber dari modul "Terjemahan konten", saya telah menemukan solusi ini:

    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

Ini akan menampilkan tautan ke alias simpul yang benar. Bekerja dan tidak terlalu rumit - masih bertanya-tanya apakah ada fungsi yang sudah melakukan ini.

Dooderoo
sumber
2
Atau gunakan $translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));untuk mencari alias alih-alih simpul id, itu lebih fleksibel. Anda harus melewati bahasa yang benar.
Dooderoo
5
global $language;

$translation_node = translation_path_get_translations("42");

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

$path = "node/{$nid}";
vetal4ik
sumber
2
Selamat Datang di Jawaban Drupal! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan penjelasan penting bersama dengan kode Anda.
Mołot
4

Lihatlah fuction drupal_get_path_alias

Diberikan jalur Drupal internal, kembalikan alias yang ditetapkan oleh administrator.

Jika tidak ada jalur yang disediakan, fungsi akan mengembalikan alias halaman saat ini.

Parameter

$ path: Jalur Drupal internal.

$ path_language: Kode bahasa opsional untuk mencari path.

Seperti yang Anda bisa lakukan, dibutuhkan parameter path_language. Jadi Anda bisa mengetahui bahasa saat ini dan kemudian meneruskan ke fungsi ini.

Atau cukup gunakan modul Multilink

  1. Dirancang untuk situs multi-bahasa. Terutama relevan untuk situs di mana tidak semua konten tersedia dalam semua bahasa, atau dapat dibuat tersedia (diterjemahkan) di lain waktu.
  2. Memungkinkan Anda dengan mudah membuat tautan dalam konten ke simpul lain, dan tautan itu diperbarui secara otomatis untuk menunjuk ke versi terjemahan yang sesuai dari simpul referensi, jika tersedia.
Gokul NK
sumber
1
drupal_get_path_alias()tidak akan mencari terjemahan dari node yang diberikan, hanya untuk alias yang sudah dalam bahasa yang diberikan. Saya menemukan solusi lain, lihat jawaban saya di bawah ini.
Dooderoo
3

Tidak ada jawaban di atas yang menggunakan i18n_path dengan benar. Jika Anda ingin menautkan ke node yang diterjemahkan, Anda cukup mengaktifkan modul i18n_path dan memformat path demikian,

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

Anda mungkin harus menggunakan fungsi tautan . Ini memungkinkan Anda untuk lulus bahasa sebagai parameter dan itu fungsi yang tepat untuk membuat tautan dengan Drupal.

Mat
sumber
l()menggunakan secara url()internal sehingga tidak masalah dalam hal ini.
Dooderoo
1

Menggunakan Redirect Penerjemahan Anda dapat menautkan ke node dengan awalan bahasa.

Inilah yang dikatakan:

Modul pengalihan Terjemahan mengalihkan pengguna anonim (termasuk perayap web) ke terjemahan halaman dalam bahasa yang diminta, jika ada, menggunakan 301 redirect code. Misalnya, jika permintaan untuk / de / node / 23 dan node / 23 sesuai dengan halaman bahasa Inggris, pengguna akan diarahkan ke terjemahan bahasa Jerman dari simpul bahasa Inggris jika ada. Jika terjemahan tidak ada, maka konten node sumber ditampilkan.

Sebagai contoh jika nid 22 adalah untuk versi bahasa Inggris dan memiliki yang Perancis dan Jerman maka Anda dapat dengan mudah menautkannya sebagai fr / node / 22 dan de / node / 22. 22 ini juga dapat berupa nid dari versi terjemahan.

Jika terjemahan tertentu tidak ditemukan misalnya jika Anda belum menambahkan untuk bahasa Jepang, maka ja / node / 22 akan memberikan 404 untuk pengguna Anonim.

AGA
sumber
0

Untuk mendapatkan jalur awalan yang benar, saya menggunakan:

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

Drupal_get_path_alias () hanya mengembalikan alias, url () adalah yang menambahkan awalan ("en /").

nimbfire
sumber