Làm thế nào để có được đường dẫn đến nút dịch?


10

Tôi đã thiết lập một trang web đa ngôn ngữ trong Drupal 7. Trong một mẫu tôi cần thêm một liên kết đến một nút nội dung cụ thể. Nút này có các bản dịch và bí danh đường dẫn như vậy:

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

Trong mẫu tôi muốn gọi url()để nhận liên kết đến phiên bản bí danh của nút nội dung trong ngôn ngữ hiện tại.

Trên trang tiếng Đức nên liên kết đến /de/pathalias_detrên trang tiếng Anh để/en/pathalias_en

Tôi đã thử một vài biến thể, như gọi nid, gọi bí danh, chuyển đối tượng ngôn ngữ hiện tại sang url().

Đây có phải là một cái gì đó url()có thể làm hoặc tôi cần một chức năng khác? Cảm ơn!

Câu trả lời:


14

Sau khi xem nguồn của mô-đun "Dịch nội dung", tôi đã tìm ra giải pháp này:

    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

Điều này sẽ xuất liên kết đến bí danh nút chính xác. Hoạt động và không quá phức tạp - vẫn tự hỏi nếu có một chức năng đã làm điều này.


2
Hoặc sử dụng $translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));để tìm kiếm bí danh thay vì id nút, nó linh hoạt hơn. Bạn phải vượt qua ngôn ngữ chính xác mặc dù.
Dooderoo

5
global $language;

$translation_node = translation_path_get_translations("42");

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

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

2
Chào mừng đến với câu trả lời của Drupal! Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các giải thích thiết yếu cùng với mã của bạn.
Mołot

4

Hãy nhìn vào đấu giá drupal_get_path_alias

Đưa ra một đường dẫn Drupal nội bộ, trả về bí danh do quản trị viên đặt.

Nếu không có đường dẫn nào được cung cấp, hàm sẽ trả về bí danh của trang hiện tại.

Thông số

$ path: Một đường dẫn Drupal nội bộ.

$ path_l Language: Mã ngôn ngữ tùy chọn để tra cứu đường dẫn trong.

Như bạn có thể nhận ra, nó cần một tham số path_lingu. Vì vậy, bạn có thể tìm ra ngôn ngữ hiện tại và sau đó chuyển sang chức năng này.

Hoặc đơn giản là sử dụng mô-đun Multilink

  1. Được thiết kế cho các trang web đa ngôn ngữ. Đặc biệt có liên quan cho các trang web không phải tất cả nội dung đều có sẵn bằng tất cả các ngôn ngữ hoặc có thể được cung cấp (dịch) sau đó.
  2. Cho phép bạn dễ dàng tạo các liên kết trong nội dung đến các nút khác và các liên kết đó tự động cập nhật để trỏ đến một phiên bản dịch phù hợp của các nút được tham chiếu, khi khả dụng.

1
drupal_get_path_alias()sẽ không tìm kiếm bản dịch của một nút nhất định, chỉ cho các bí danh đã có trong ngôn ngữ đã cho. Tôi tìm thấy một cách giải quyết khác, xem câu trả lời của tôi dưới đây.
Dooderoo

3

Không có câu trả lời nào ở trên dường như sử dụng đúng i18n_path. Nếu bạn muốn liên kết đến nút được dịch, bạn chỉ cần kích hoạt mô-đun i18n_path và định dạng đường dẫn, do đó,

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

2

Bạn có thể nên sử dụng chức năng liên kết . Nó cho phép bạn truyền ngôn ngữ dưới dạng tham số và đó là chức năng phù hợp để tạo liên kết với Drupal.


l()sử dụng url()nội bộ nên không thành vấn đề trong trường hợp này.
Dooderoo

1

Sử dụng Dịch chuyển hướng, bạn có thể liên kết đến các nút có tiền tố ngôn ngữ.

Đây là những gì nó nói:

Mô-đun chuyển hướng dịch chuyển hướng người dùng ẩn danh (bao gồm cả trình thu thập dữ liệu web) sang bản dịch của trang theo ngôn ngữ được yêu cầu, nếu có, sử dụng mã chuyển hướng 301. Ví dụ: nếu yêu cầu dành cho / de / node / 23 và nút / 23 tương ứng với một trang tiếng Anh, người dùng sẽ được chuyển hướng đến bản dịch tiếng Đức của nút tiếng Anh nếu nó tồn tại. Nếu bản dịch không tồn tại, thì nội dung nút nguồn được hiển thị.

Ví dụ: nếu nid 22 dành cho phiên bản tiếng Anh và nó có phiên bản tiếng Pháp và tiếng Đức thì bạn chỉ cần liên kết với chúng dưới dạng fr / node / 22 và de / node / 22. 22 này cũng có thể là bất kỳ nid của phiên bản dịch.

Nếu không tìm thấy bản dịch cụ thể nếu bạn chưa thêm tiếng Nhật, thì ja / node / 22 sẽ cung cấp 404 cho người dùng ẩn danh.


0

Để có được đường dẫn tiền tố chính xác, tôi sử dụng:

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

Drupal_get_path_alias () chỉ trả về bí danh, url () là cái thêm tiền tố ("en /").

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.