Drupal - изменить место назначения для анонимных пользователей, используя custom_url_rewrite_inbound? - PullRequest
1 голос
/ 08 июля 2010

Можно ли перенаправить анонимных пользователей (или, точнее, пользователей без роли «участник») из определенного пункта меню на альтернативный узел по моему выбору, возможно, используя custom_url_rewrite_inbound?

затем разрешите мне иметь две версии определенных страниц для участников и не членов (это особенность сайта!).

Приветствия.

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Использование custom_url_rewrite_inbound() для этого было бы несколько похоже на использование кувалды для регулировки угла изогнутого изображения - это можно сделать, но это громоздко и сопряжено с риском причинения некоторого ущерба;)

Лучшее решение зависит от того, чего именно вы хотите достичь, и от того, как часто (то есть для скольких узлов) вам нужно это делать, поэтому вам следует объяснить свой сценарий более подробно. Некоторые возможные подходы включают в себя:

  • «Обогащайте» свои узлы данными / полями для обеих версий и корректируйте фактический вывод в зависимости от роли пользователя.
    • Если вы используете CCK, вы можете использовать для этого настройки разрешений полей.
    • Вы также можете внести некоторые коррективы в слой темы с помощью пользовательских шаблонов узлов.
    • Другой подход - использовать hook_nodeapi() (операция 'представление') из пользовательского модуля, удаляя записи из массива содержимого в зависимости от роли пользователя.
  • Обеспечение явного перенаправления на другие узлы в зависимости от роли пользователя (ваш явный вопрос)
    • заменить стандартный обратный вызов страницы узла через hook_menu_alter() на пользовательский. В этом вы проверяете роль. Если все в порядке, вы просто вызываете стандартный обратный вызов, иначе вы запускаете drupal_goto() (основываясь на некоторой общей логике, если это возможно).
    • Если «особые» случаи редки, вы можете сделать это также с помощью hook_nodeapi(), снова реагируя на операцию «просмотр», но вам нужно убедиться, что вы делаете это только для просмотров страницы узла, а не если узел просто отображается как тизер вместе с другими.
    • Реализуйте hook_init() в пользовательском модуле, проверьте путь (arg() или $_GET['q']) и роль, введите drupal_goto() при необходимости. (Остерегайтесь кэшированных страниц - если вам нужно их покрыть, используйте hook_boot()).

Etc. ... - Я уверен, что есть больше вариантов, поэтому вы можете предоставить более подробную информацию о вашей проблеме / цели / сценарии, чтобы дать более точное предложение.

1 голос
/ 08 июля 2010

Вы можете создать собственный обработчик меню для этой ссылки, а затем в функции, которая запускает этот обработчик, вы можете получить что-то вроде

if (user->role == 'access granted') {

  // do stuff

} else {

drupal_goto('anonymouspage');

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...