노드가 생성 될 때 프로그래밍 방식으로 경로 별칭 생성


8

모듈에 의해 생성 된 사용자 정의 컨텐츠 유형이 있습니다. 노드를 만들 때 사용자 정의 컨텐츠 유형의 경로 별명을 설정하는 데 사용할 수있는 후크가 있습니까?

내 필드 중 하나는 영숫자 코드이며 경로에서 사용하고 싶습니다. 예 : 'event / myc0d3'

이 함수 ( path_set_alias )가 6에 존재하지만 7에 해당하는 것을 찾을 수 없다는 것을 알았습니다.

답변:


10

후크를 사용하는 대신 컨텐츠 유형 (at ) 당 별명이 생성되는 특정 패턴을 정의 할 수있는 Pathauto 모듈을 사용해야합니다 /admin/config/search/path/patterns. 거기에서 대체 패턴을 사용하거나 직접 코딩 할 수 있습니다. 훨씬 깨끗한 접근 방식입니다.

그렇지 않으면 hook_node_presave($node)별명을 직접 시도 하고 변경할 수 있습니다.

$node->path['pathauto'] = 0; // Required only if Pathauto is enabled.
$node->path['alias'] = "foo/bar";

또는 path_save(&$path)아래와 같이 기능을 직접 사용하십시오 .

$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);

나에게는 둘 다 조합하여 효과가 있었으므로 별칭 텍스트 필드의 끝에서 올바른 별칭이 작성되었습니다. path_save () 만 작동했지만 노드 편집의 별칭 텍스트 필드에 잘못된 별칭이 있었으므로 간단한 다시 저장하면 잘못된 별칭이 다시 나타납니다.
leymannx


9

내 경우에는 hook_node_insert () 가 작동하지 않았으며 일부 검색에서는이 블로그 게시물을 찾았 습니다 . 동일한 방식으로 pre_post ()hook_insert () 를 구현 했습니다 .

/**
 * Implements hook_insert().
 */
function mymodule_insert($node) {
    // Set the URL alias
    if (empty($node->path['alias'])) {
        $node->path['alias'] = 'slug/' . $node->nid;
    }
}

2
이를 hook_insert()구현하는 모듈이 컨텐츠 유형을 정의 할 때만 사용됩니다. 후크는 다른 모듈에서 정의 된 컨텐츠 유형의 노드에서 작동하는 데 사용할 수 없습니다.
kiamlaluno

이것이 바로 기사로 연결되는 것이 아니라 답변을 확장하여 해당 기사에서 주요 유용한 정보를 추출하는 이유입니다. '블로그 게시물'링크는 더 이상 유효하지 않으며 결과는 404
Titi입니다.

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