Пишем модуль под Drupal. Часть 8. Оформляем вывод

чт, 15.04.2010 13:47 :: olk

В этой небольшой части мы оформим вывод трэкера (а проще - займемся «украшательством»)

Шаг номер 18:

Для начала в графическом редакторе создадим две небольшие картинки (иконки обозначающие «прикрепление» материала и иконку сигнализирующую о том, что нода помещена на главную страницу), я не стал сильно извращаться и сделал две несложные пнг-эшки размером 32х32.

Кнопка - кнопка (knopka.png)

На главной - на главной (promote.png)

Сохраним наши файлы в директории модуля.

Шаг номер 19:

Теперь мы опять подправим функцию темизации в файле cctracker.page.inc, чтобы вывести наши рисунки в нужных местах трэкера. Добавим в самое начало файла (что бы легче потом было искать) пару дефайнов для имен файлов иконок, ну и изменим функцию theme_cctracker_page.

  1. // имена файов иконок
  2. define(IMG_STICKY,'knopka.png');
  3. define(IMG_PROMOTE,'promote.png');
  4.  
  5. ...
  6. function theme_cctracker_page($tracker, $tp) {
  7.   $module_path = drupal_get_path('module', 'cctracker');
  8.   $header = array();
  9.   if ($tp != 'tab-types'){
  10.   $header[] = t('Type');
  11.   }
  12.   $header[] =  t('Post');
  13.   if ($tp != 'my-posts') {
  14.   $header[] =  t('Author');
  15.   }
  16.   $header[] =  t('Created');
  17.   $header[] =  t('Replies');
  18.   $header[] =  t('Last updated');
  19.   $rows = array();
  20.   foreach ($tracker as $key => $value){
  21.       $class = '';
  22.       $promote = ($value->promote == 1) ?  theme('image', $module_path.'/'.IMG_PROMOTE,  t('The main'), t('Located on the main page'), array('class' => 'pngfix ccfilter tooltip cctracker-icon-promote')) : '';
  23.       $class = ' cctracker-promote';
  24.       $sticky = ($value->cc_sticky == 1) ? theme('image', $module_path.'/'.IMG_STICKY,  t('Sticky'), t('Fixed on the top of the tracker'), array('class' => 'pngfix ccfilter tooltip cctracker-icon-sticky')) : '';
  25.       $class .= ' cctracker-promote';
  26.       $comments = 0;
  27.       if ($value->comment_count) {
  28.         $comments = $value->comment_count;
  29.         if ($new = comment_num_new($value->nid)) {
  30.           $comments .= '<br />';
  31.           $comments .= l(format_plural($new, '1 new', '@count new'), 'node/'. $value->nid,
  32.           array(
  33.            'query' => comment_new_page_count($value->comment_count, $new, $value),
  34.            'fragment' => 'new',
  35.            'html' => TRUE,
  36.            'attributes'=>array('title'=>t('Go to first new comment'),'class'=>'ccfilter tooltip new'),
  37.             ));
  38.         }
  39.       }
  40.      $row = array();
  41.      if ($tp != 'tab-types'){
  42.        $row[] = array('data' =>  $sticky . check_plain(node_get_types('name', $value->type)), 'class' => 'cctracker-type-' . $value->type. $class);
  43.        $sticky = '';
  44.      }
  45.      $row[] = array('data' =>  $sticky . $promote . l($value->title,'node/'.$key) .' '. theme('mark', node_mark($value->nid, $value->changed)) , 'class' => 'cctracker-title' . $class);
  46.      if ($tp != 'my-posts') {
  47.        $row[] = array('data' => theme('username',$value), 'class' => 'cctracker-user' . $class);
  48.      }
  49.      $row[] = array('data' => format_date($value->created,'small'), 'class' => 'cctracker-date-created' . $class);
  50.      $row[] = array('data' => $comments, 'class' => 'cctracker-replies' . $class);
  51.      $row[] = array('data' => t('!time ago', array('!time' => format_interval(time()-$value->last_update))), 'class' => 'cctracker-last-update' . $class);
  52.      $rows[] = array('data'=>$row, 'id' => 'cctracker-' . $value->nid, 'class' => 'cctracker-row' . $class);
  53.   }
  54.   $output = theme('table', $header, $rows);
  55.   return $output;
  56. }
На всякий случай (если кому будет лень рисовать свои иконки) в аттаче можно взять мои. В следующей части мы сделаем небольшие изменения в модуле, чтобы была возможность наконец совсем отказаться от стандартного модуля - tracker, а именно, добавим вывод трэкера в профиль пользователя.
Если вы не хотите выделять элементы трэкера иконками, то в принципе можно обойтись оформлением через CSS. Для этого ко всем элементам таблицы добавлен соответствующий класс.
Добавить комментарий
« Добавить комментарий
» Добавить комментарий