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

чт, 15.04.2010 13:47 :: olk

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

Шаг номер 18:

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

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

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

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

Шаг номер 19:

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

...
function theme_cctracker_page($tracker, $tp) {
  $module_path = drupal_get_path('module', 'cctracker');
  $header = array();
  if ($tp != 'tab-types'){
  $header[] = t('Type');
  }
  $header[] =  t('Post');
  if ($tp != 'my-posts') {
  $header[] =  t('Author');
  }
  $header[] =  t('Created');
  $header[] =  t('Replies');
  $header[] =  t('Last updated');
  $rows = array();
  foreach ($tracker as $key => $value){
      $class = '';
      $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')) : '';
      $class = ' cctracker-promote';
      $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')) : '';
      $class .= ' cctracker-promote';
      $comments = 0;
      if ($value->comment_count) {
        $comments = $value->comment_count;
        if ($new = comment_num_new($value->nid)) {
          $comments .= '<br />';
          $comments .= l(format_plural($new, '1 new', '@count new'), 'node/'. $value->nid,
          array(
           'query' => comment_new_page_count($value->comment_count, $new, $value),
           'fragment' => 'new',
           'html' => TRUE,
           'attributes'=>array('title'=>t('Go to first new comment'),'class'=>'ccfilter tooltip new'),
            ));
        }
      }
     $row = array();
     if ($tp != 'tab-types'){
       $row[] = array('data' =>  $sticky . check_plain(node_get_types('name', $value->type)), 'class' => 'cctracker-type-' . $value->type. $class);
       $sticky = '';
     }
     $row[] = array('data' =>  $sticky . $promote . l($value->title,'node/'.$key) .' '. theme('mark', node_mark($value->nid, $value->changed)) , 'class' => 'cctracker-title' . $class);
     if ($tp != 'my-posts') {
       $row[] = array('data' => theme('username',$value), 'class' => 'cctracker-user' . $class);
     }
     $row[] = array('data' => format_date($value->created,'small'), 'class' => 'cctracker-date-created' . $class);
     $row[] = array('data' => $comments, 'class' => 'cctracker-replies' . $class);
     $row[] = array('data' => t('!time ago', array('!time' => format_interval(time()-$value->last_update))), 'class' => 'cctracker-last-update' . $class);
     $rows[] = array('data'=>$row, 'id' => 'cctracker-' . $value->nid, 'class' => 'cctracker-row' . $class);
  }
  $output = theme('table', $header, $rows);
  return $output;
}

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