Kolejne zmiany na stronie.

tagi:

Wczoraj dodałem do strony moduł Pagination (Node), który pozwala na dzielenie treści na mniejsze kawałki (podstrony). Jest to takie wirtualne dzielenie, ponieważ wpis cały czas jest w jednym kawałku, jednak w treści przewijają się specjalne znaki kończące stronę. Przykład działania można zaobserować we wpisie o TinyMCE.

Dla mnie moduł był prawie idealny - brakowało mu jednej rzeczy. Zależało mi na wyświetlaniu spisu zawartości w bloku, a nie jako osobny div w zawartości wpisu, a samo 1 2 3 4 ... nie wystarcza. Dlatego postanowiłem napisać małe rozszerzenie do Pagination. Opiera się o rozwiązania zastosowane już w module i generalnie Ameryki nie odkryłem, poprostu upchnąłem rzeczony wcześniej div do bloku który jest wyświetlany tylko kiedy div z zawartością byłby wyświetlany.
Aby zastosować moją modyfikacje należy dodać na końcu pliku pagination.module dodać:

  1. /**
  2.  * Implementation of hook_block();
  3.  */
  4. function pagination_block($op = 'list', $delta = 0, $edit = array()) {
  5.   if ($op == 'list') {
  6.     $blocks[] = array('info' => t('Table of Content, module pagination.'));
  7.  
  8.     return $blocks;
  9.   }
  10.   else if ($op == 'view') {
  11.         if($delta == 0) {
  12.             // disable block on start
  13.         $block = null;
  14.        
  15.         // it's not front page
  16.         if(!drupal_is_front_page()) {          
  17.                
  18.                 // shows only on ?=node/$nid page
  19.                 if(arg(0) == 'node' && is_numeric(arg(1))) {
  20.                         $node = node_load(arg(1));
  21.                         $type   =   $node->type;
  22.                         $page   =   _get_page_var();
  23.                         $pages  =   _get_pages();
  24.                                 $paging =   _get_pagination_value($type);
  25.  
  26.                                 // paging is enabled for this node type, and dont show on all node, and number of pages is more then 1
  27.                                 if($paging && $page !== 'show' && $pages > 1) {
  28.                         $block = array('subject' => t('Table of Content'),
  29.                                 'content' =>  theme('item_list', _header('all', _get_page_var() ), null, 'ul', array('class' => 'toc-list') ));
  30.                         }      
  31.                 }
  32.         }
  33.     }
  34.     return $block;
  35.   }
  36. }

następnie włączyć blok i ustawić styl wyświetlania pagera na domyślny.
Poprawkę wysłałem na stronę modułu, może autorzy dorzucą to do kolejnego wydania :).

Oprócz tego ładnie wystylizowałem ów spis treści a żeby miniblogowi nie było smutno też został przyzdobiony.