Как заставить модуль книги Drupal перейти к первой главе при нажатии на книгу? - PullRequest
1 голос
/ 29 июля 2010

У меня есть страница со списком всех книг, например,

book 1
  [description]
book 2
  [description]
book 3
  [description]

Если вы нажмете book 1, вы попадете на страницу с точно таким же описанием, которое вы только что видели, с таблицейсодержания.Я бы предпочел, чтобы нажатие на book 1 привело вас к первой странице.

Я играю в модуле книги и не могу понять, с чего начать.

1 Ответ

3 голосов
/ 29 июня 2011

После нескольких часов борьбы с той же проблемой, я нашел хорошее решение.(с использованием 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.

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