ページがメニューにある場合はページが自動生成され、メニューにない場合は別のパスが必要です。ページがメニューにない場合、Pathautoのような空のパスは現在生成されません。
どうやってやるの?
詳細:ページがメニューにあるときに完全に機能する私のコンテンツタイプにこのパターンを使用しています。
[node:menu-link:parents:join-path]/[node:menu-link]
問題は、ページがメニューにない場合、空のパスを取得することです。たとえば、ページの「タイトル」に基づいて別のパスを与えたいと思います。
残念ながら、条件付きトークンは何度も要求され、実装されなかったため、要求したフォールバックは不可能です。
代わりに Rules を使用できます。 Drupal.orgの説明 は簡単だと主張しています-pathautoの代わりに、ノードの作成/更新に関するルールを設定し、必要なエイリアスを作成します。 Rules examples プロジェクトでわかるように、ルールは条件をサポートしているため、条件付きでエイリアスを作成できます。
これで、hook_pathauto_pattern_alter()を使用してこれを実現できます。何かのようなもの:
<?php
/**
* Implements hook_pathauto_pattern_alter().
*/
function mymodule_pathauto_pattern_alter(&$pattern, array $context) {
// Alter any node entity path patterns we need to
if (isset($context['data']['node'])) {
$node = $context['data']['node'];
switch ($node->type) {
case 'page':
// Check condition, and change the pattern when appropriate
$pattern = '[node:title]';
break;
}
}
?>
メニュー項目が生成されない場合、m4oliveiが書き込んだものを使用して、ノードタイトルにフォールバックするように機能させました。
/**
* Implements hook_pathauto_pattern_alter().
*/
function mymodule_pathauto_pattern_alter(&$pattern, array $context) {
// Set up pathauto fallback to node title if no menu item is generated
if (isset($context['data']) && isset($context['data']['node'])) {
if (isset($context['data']['node']->menu) && isset($context['data']['node']->menu['enabled'])) {
if (!$context['data']['node']->menu['enabled']) {
$pattern = '[node:title]';
}
}
}
}