2009-11-24 1 views
1

Я знаю, что stackoverflow.com использует модуль pathauto. Я хотел бы использовать pathauto в drupal для создания pathauto uris. Но я не знаю, как это сделать.Как создать pathauto же stackoverflow.com

Пример: domain.com/node/1 после использования Pathauto затем domain.com/article/1/title-node

Теперь я хочу, чтобы перейти к domain.com/article/1/???, то все же он показывает узел 1, а не страницу показа не найден.

+1

Итак ...? Вы решили проблему с любым из ответов, приведенных ниже? Вы все еще в этом трудно? Или... ? – mac

+0

Кстати, StackOverflow не использует Drupal - он основан на структуре ASP.NET MVC. – MaxVT

ответ

2

Вы не можете сделать это с помощью pathauto, поскольку все, что он делает, создает псевдонимы для ваших URL-адресов. Таким образом, вы должны использовать такой URL как http://example.com/article/1/title точно так же, как он был сгенерирован.

Переполнение стека идет несколько иначе в том смысле, что они просто игнорируют все, что входит в заголовок вопроса в URL. Они могут это сделать, поскольку парсер URL-адресов полностью отличается. Для Drupal вы можете искать другой модуль или сворачивать свой собственный. Pathauto просто вписывается в обычные псевдонимы URL и автоматически генерирует их для вас. Не больше, не меньше.

A search for modules which deal with URLs на drupal.org дает довольно много матчей. Некоторые из них могут делать то, что вы хотите.

4

EDIT - я получил лучшее представление

Я уезжаю мой первоначальный ответ ниже, но я думаю, что есть идея получше ... Вы могли бы реализовать hook_init() в пользовательском модуле вашего или custom_url_rewrite_inbound() в settings.php, чтобы разделить запрос страницы дефисной части, чтобы URL-адрес /article/1/my-title был изменен на /article/1 все время. Псевдоним от узла/XXX к статье/XXX все равно будет выполнен pathauto.

Мой первоначальный ответ был:

Я не знаю, если есть модуль, который уже делает это, но добиться того, что вы хотите, довольно легко. Вы должны реализовать свою собственную версию hook_menu(), определяющую функцию, которая будет инициироваться URL-адресом, начинающимся с «статьи» (например, «article/1/title-node»).

Для hook_menu каждый бит, разделенный косой чертой, является аргументом, который может быть передан обратному вызову, поэтому вы захотите передать обратный вызов номер (чтобы обратный вызов загрузил нужный узел) и отбросить все остальное ,

Предполагая, что вы используете Drupal 6 Вашего меню определение пункта должен выглядеть примерно так:

$item['article'] = array(
    'title' => 'My URL article redirect', 
    'page callback' => 'name_of_my_callback_function', 
    'page arguments' => array(1), //this passess the second bit of the URL 
    'type' => MENU_CALLBACK, 
); 

Надеется, что это помогает!

+0

Закрытый пароль после 'name_of_my_callback_function' не нужен, я полагаю. –

+0

Исправлено, спасибо! – mac

+3

+1 - оба являются хорошими решениями. В случае, если это необходимо для сайта с интенсивным движением, новое предложение (удаление последней части перед обработкой) также может быть выполнено с помощью 'custom_url_rewrite_inbound' (http://api.drupal.org/api/function/custom_url_rewrite_inbound/6) вместо 'hook_init()'. Это сэкономит некоторые циклы обработки, поскольку настройка будет происходить до любой другой обработки пути, но ценой того, что нужно положить этот несколько странный «псевдо-крючок» в settings.php. –

1

Я иду на предположении, что вы хотите сделать, это иметь структуру URL-адрес, как http://example.com/article/ID/title где title часть в значительной степени игнорируется, и он будет идти к http://example.com/article/ID независимо от того, что было введено для title. Что вы могли сделать, это настроить вид, который имеет путь http://example.com/article, который принимает ID в качестве аргумента, который используется, чтобы указать отдельную статью - скорее всего по НИЗ. Затем он должен игнорировать все, что приходит после него.

+0

Это тоже решение. Это имеет смысл, если вы используете представления для чего-то другого, кроме этого ... иначе это похоже на охоту на птиц, как базуку. [views - это тяжеловесный модуль, и его не стоит устанавливать, если все, что вам нужно сделать, это простой трюк] :) – mac

0

Вы пробовали глобальное перенаправление, которое гарантирует, что вы увидите только путь с псевдонимом? http://drupal.org/project/globalredirect а как насчет псевдонима подката? он также позволяет использовать псевдоним в качестве подпутей. , например, скажем, узел/1 псевдоним блог/JohnDoe/мой-первый пост, вы можете редактировать его с помощью блога/JohnDoe/мой-первый пост/редактировать http://drupal.org/project/subpath_alias

я думаю, вы можете работать с этими модулями ,

 Смежные вопросы

  • Нет связанных вопросов^_^