web-dev-qa-db-ja.com

ノードの作成時にプログラムでパスエイリアスを作成する

モジュールによって作成されたカスタムコンテンツタイプがあります。ノードの作成時にカスタムコンテンツタイプのパスエイリアスを設定するために使用できるフックはありますか?

私のフィールドの1つは英数字コードであり、パスでそれを使用したいと思います。例: 'event/myc0d3'

この関数( path_set_alias )が6に存在することに気づきましたが、7に相当するものを見つけることができません。どこで呼び出すかわかりません。

8
cbaigorri

hook_node_insert() は私の場合機能しませんでした、そしていくつかの検索で私はこれを思いつきました ブログ投稿hook_insert() を同じ方法で実装しました。

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

フックを使用する代わりに、コンテンツタイプごとにエイリアスを生成する特定のパターンを定義できる 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);
_
10
kenorb

この関数は現在 path_save() と呼ばれています。例については path_taxonomy_term_insert() を参照してください。

9
Berdir

hook_node_insert() を実装します。

0
Oswald