번역 된 노드의 경로를 얻는 방법?


10

Drupal 7에서 다국어 사이트를 설정했습니다. 템플릿에서 특정 콘텐츠 노드에 대한 링크를 추가해야합니다. 이 노드에는 다음과 같은 변환 및 경로 별칭이 있습니다.

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

템플릿 url()에서 현재 언어로 된 콘텐츠 노드의 별칭 버전에 대한 링크를 얻기 위해 호출하고 싶습니다 .

독일어 페이지 /de/pathalias_de에서는 영어 페이지에서/en/pathalias_en

nid 호출, 별칭 호출, 현재 언어 객체를에 전달하는 등 몇 가지 변형을 시도했습니다 url().

이것이 url()할 수 있어야합니까 아니면 다른 기능이 필요합니까? 감사!

답변:


14

"콘텐츠 번역"모듈의 소스를 살펴본 후이 솔루션을 찾았습니다.

    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

올바른 노드 별명에 대한 링크가 출력됩니다. 작동하고 지나치게 복잡하지는 않습니다. 이미이 기능을 수행하는지 궁금합니다.


2
또는 $translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));노드 ID 대신 별칭을 검색 하는 데 사용 하면 더 유연합니다. 그래도 올바른 언어를 전달해야합니다.
Dooderoo

5
global $language;

$translation_node = translation_path_get_translations("42");

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

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

2
Drupal Answers에 오신 것을 환영합니다! 이것이 이론적으로 질문에 대답 할 수는 있지만 필수 설명을 코드와 함께 포함시키는 것이 좋습니다.
Mołot

4

drupal_get_path_alias 기능을 살펴보십시오

내부 Drupal 경로가 주어지면 관리자가 설정 한 별칭을 반환하십시오.

경로가 제공되지 않으면 함수는 현재 페이지의 별명을 리턴합니다.

매개 변수

$ path : 내부 Drupal 경로.

$ path_language : 경로를 찾는 선택적 언어 코드입니다.

당신이 알 수 있듯이 path_language 매개 변수가 필요합니다. 따라서 현재 언어를 찾은 다음이 기능으로 넘어갈 수 있습니다.

또는 단순히 멀티 링크 모듈을 사용하십시오

  1. 다국어 사이트를 위해 설계되었습니다. 모든 콘텐츠가 모든 언어로 제공되지 않거나 나중에 제공 (번역) 될 수있는 사이트에 특히 적합합니다.
  2. 다른 노드에 대한 컨텐츠 내 링크를 쉽게 작성할 수 있으며 해당 링크는 사용 가능한 경우 적절한 변환 된 참조 노드 버전을 가리 키도록 자동으로 업데이트됩니다.

1
drupal_get_path_alias()이미 단지 별칭, 주어진 노드의 번역을 검색하지 않습니다 주어진 언어. 다른 해결 방법을 찾았습니다. 아래 답변을 참조하십시오.
Dooderoo

3

위의 답변 중 어느 것도 i18n_path를 올바르게 사용하지 않는 것 같습니다. 변환 된 노드에 링크하려면 i18n_path 모듈을 활성화하고 경로를 형식화해야합니다.

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

2

당신은 아마 링크 기능을 사용해야합니다 . 언어를 매개 변수로 전달할 수 있으며 Drupal과의 링크를 작성하는 데 적합한 기능입니다.


l()url()내부적으로 사용 하므로이 경우에는 중요하지 않습니다.
Dooderoo

1

번역 리디렉션 을 사용 하면 언어 접두사가있는 노드에 연결할 수 있습니다.

이것이 말하는 것입니다 :

번역 리디렉션 모듈은 301 리디렉션 코드를 사용하여 익명 사용자 (웹 크롤러 포함)를 요청 된 언어로 페이지의 번역으로 리디렉션합니다. 예를 들어, 요청이 / de / node / 23에 대한 것이고 node / 23이 영어 페이지에 해당하는 경우 사용자는 영어 노드의 독일어 번역 (있는 경우)으로 리디렉션됩니다. 변환이 존재하지 않으면 소스 노드 컨텐츠가 표시됩니다.

예를 들어, nid 22가 영어 버전이고 프랑스어 및 독일어 버전 인 경우 fr / node / 22 및 de / node / 22로 간단히 링크 할 수 있습니다. 이 22는 또한 번역 된 버전의 어떤 것도 될 수 있습니다.

예를 들어 일본어로 추가하지 않은 경우 특정 번역을 찾을 수없는 경우 ja / node / 22는 익명 사용자에게 404를 제공합니다.


0

올바른 접두사 경로를 얻으려면 다음을 사용하십시오.

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

drupal_get_path_alias ()는 별칭 만 반환하며 url ()은 접두사 ( "en /")를 추가하는 별칭입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.