モジュールによって作成されたカスタムコンテンツタイプがあります。ノードの作成時にカスタムコンテンツタイプのパスエイリアスを設定するために使用できるフックはありますか?
私のフィールドの1つは英数字コードであり、パスでそれを使用したいと思います。例: 'event / myc0d3'
この関数(path_set_alias)が6に存在することに気付きましたが、7に相当するものを見つけることができません。また、どこで呼び出すかわかりません。
モジュールによって作成されたカスタムコンテンツタイプがあります。ノードの作成時にカスタムコンテンツタイプのパスエイリアスを設定するために使用できるフックはありますか?
私のフィールドの1つは英数字コードであり、パスでそれを使用したいと思います。例: 'event / myc0d3'
この関数(path_set_alias)が6に存在することに気付きましたが、7に相当するものを見つけることができません。また、どこで呼び出すかわかりません。
回答:
フックを使用する代わりに、Pathautoモジュールを使用する必要があります。ここでは、コンテンツタイプごとに(atで/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()と呼ばれています。例については、path_taxonomy_term_insert()を参照してください。
私の場合、hook_node_insert()は機能していませんでした。いくつかの検索で、このブログ投稿を思いつきました。同じ方法でprestoでhook_insert()を実装しました。
/**
* Implements hook_insert().
*/
function mymodule_insert($node) {
// Set the URL alias
if (empty($node->path['alias'])) {
$node->path['alias'] = 'slug/' . $node->nid;
}
}
hook_insert()
実装するモジュールがコンテンツタイプを定義している場合にのみ使用されることに注意してください。フックを使用して、別のモジュールから定義されたコンテンツタイプのノードに作用することはできません。
hook_node_insert()を実装します。