Как установить псевдоним URL автоматически для типа контента БЕЗ использования Pathauto? Какой хук реализовать?

11

Pathauto может легко выполнять эту работу для всех типов контента, но в моем случае у меня есть только один URL-адрес типа контента, который необходимо настроить, и я бы предпочел не устанавливать Pathauto и Token.

Может кто-нибудь посоветовать мне, как это сделать?

gilzero
источник
2
Избавь себя от головной боли и просто используй pathauto. Эта проблема уже решена, зачем ее решать? Pathauto вызывает снижение производительности только при сохранении узлов (и даже тогда, только минимально).
Мэтью Шарли
4
Поскольку можно генерировать URL-адреса лучше, чем pathauto, и если все, что вам нужно, это генерировать URL-адреса для одного или двух типов, вы можете избавиться от двух модулей, реализовав один хук. Кроме того, массовый импорт довольно медленный (и даже в какой-то момент прервался лично, он просто отказывается импортировать что-либо после 400 узлов), в то время как моему легкому скрипту cron / bulk удалось импортировать 500 узлов в секунду, что неплохо, когда у вас есть 100k. узлы для создания псевдонимов для.
wildpeaks

Ответы:

12
/**
 * Implements hook_node_insert()
 */
 function mymodule_node_insert($node) {
   if ($node->type == 'mytype') {
     $node->path['alias'] = 'mytype/' . $node->nid;
   }
 }

Кроме того, вы можете добавить этот код в hook_node_update ()

ya.teck
источник
1

Смотрите стр. 149 Pro Drupal Development, используйте hook_insert (). Когда новый узел сохраняется, вызывается hook_insert (). Это место для обработки любой пользовательской обработки содержимого узла до его сохранения. Также посмотрите на с. 152-156 Pro Drupal Development, которая рассказывает обо всех различных функциях hook_node_xxxx ().

Я думаю, что использование hook_node_insert (), как предложено в предыдущем ответе, приведет к подключению к ВСЕМ созданиям узла, что не будет соответствовать вашей необходимости изменять определенный тип контента.

DeeZone
источник
Посмотрите, что сообщается в hook_insert () , который содержит следующее предложение: «Этот хук вызывается только в модуле, который определяет тип содержимого узла (используйте hook_node_insert()для действия для всех вставок узла)».
kiamlaluno