После нескольких часов борьбы с той же проблемой, я нашел хорошее решение.(с использованием Drupal 7.2) Вам необходимо создать ловушку предварительной обработки для book_navigation.
Некоторые улучшения:
- Пользователи, имеющие права доступа к схеме, могут получить доступ к странице верхнего уровня (полезно добавить 1-йуровень ребенка)
- Предыдущая ссылка на первой дочерней странице на страницу верхнего уровня удалена.
Я думаю, что даже если пользователь с правами администратора может получить доступ к книге верхнего уровнястраница более удобна для SEO, чтобы сделать перенаправление 301 при попытке перейти на страницу верхнего уровня для других пользователей.
Вот код:
/**
* This preprocess hook avoids the top-level page of a book to be displayed.
* Instead, if the top-level book is being requested, user is redirected to
* the first child page.
* This only occurs if user does not have outline permission.
* Also on the first child page, the prev link to the top-level page is removed.
*/
function mytheme_alpha_preprocess_book_navigation(&$variables) {
template_preprocess_book_navigation($variables);
// normal behaviour for privileged users
if(user_access('administer book outlines')) return;
// redirect to first child
if($variables['current_depth']==1) {
$first_child_link = book_next($variables['book_link']);
if($first_child_link['link_path']) {
drupal_goto($first_child_link['link_path'],array(),301);
}
}
// Remove prev link for first child
// and remove up link for first level children
if($variables['current_depth']==2) {
if($variables['parent_url'] == $variables['prev_url']) $variables['prev_url']='';
$variables['parent_url']='';
}
}
ПРИМЕЧАНИЕ. Я используюомега тема, поэтому префикс ловушки - mytheme_alpha.