Drupal - изменить место назначения для анонимных пользователей, использующих custom_url_rewrite_inbound?

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

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

Удачи.

1
задан james6848 8 July 2010 в 08:00
поделиться

2 ответа

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

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

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

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

1
ответ дан 2 September 2019 в 23:12
поделиться

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

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

  // do stuff

} else {

drupal_goto('anonymouspage');

}
1
ответ дан 2 September 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: