Створюйте псевдонім шляху програмно при створенні вузла


8

У мене є власний тип вмісту, який створюється модулем. Чи є гачок, який я можу використовувати для встановлення псевдоніму мого користувальницького типу вмісту, коли створюється вузол?

Одне з моїх полів - це буквено-цифровий код, і я хочу його використовувати в шляху. Наприклад: "подія / myc0d3"

Я помітив, що ця функція ( path_set_alias ) існувала в 6, але я не можу знайти еквівалент для 7. І не знаю, де я б її назвав.

Відповіді:


10

Замість використання гака слід використовувати модуль 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 () працювала, але тоді я мав неправильний псевдонім у текстовому полі псевдоніму під час редагування вузла, тому просте збереження знову отримало б мені неправильний псевдонім.
leymannx

9

Тепер функція називається path_save () , див. Для прикладу path_taxonomy_term_insert () .


4
Ви дійсно повинні розширити цю відповідь не просто на посилання на ресурси, що знаходяться за межами сайту, однак посилання, поки вони залишаються дійсними, були корисними.
DrCord

9

kuk_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;
    }
}

2
Помітити, що hook_insert()використовується лише тоді, коли модуль, що реалізує його, визначає тип вмісту; гак не може бути використаний для дії на вузлі для типу вмісту, визначеного в іншому модулі.
kiamlaluno

саме ця причина не рекомендується просто посилатися на статті, а замість цього розширювати відповідь та витягати головну корисну інформацію з цих статей - те, що посилання на повідомлення в блозі більше не дійсне і призводить до 404
Тіті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.