CMS Drupal

Решил сделать сайт веб-студии для того, чтобы показать свои работы (портфолио). При чем поставил задачу сделать все с использованием минимума сторонних модулей. Раздел с портфолио можно было бы конечно легко сделать с помощью модуля views, но я решил данную задачу средствами ядра.
Задача такая: надо чтобы на странице со списком работ выводились небольшие картинки с названиями сайтов. Вывод списка надо сделать в виде таблицы с 3-мя работами в ряд. И, естественно, кликнув на картинку или название попадаем на развернутое описание работы.
Пример того, что должно получится можно посмотреть здесь.

Во первых, заводим тип материала portfolio и создаем файл node-portfolio.tpl.php (в вашей теме).
В файл переписываем то, что находится по умолчанию в файле node.tpl.php и меняем превью этого типа материала:

<?php if ($page == 0): ?>
  <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
  <img src="<?php echo base_path().file_directory_path().'/portfolio/'.$node->path;?>.jpg">
<?php endif; ?>

Расшифровывая этот код, скажу, что я не стал делать загрузку картинок к типу материала, а просто принял за правило, что подгружаемая для превью картинка будет иметь имя совпадающее с адресом ноды (с типом portfolio).

Для вывода списка работ воспользуемя модулем таксономии. Заведем словарь "Материалы сайта" и в нем добавим термин "Портфолио" и для каждого материала с типом portfolio выбираем соответствующий термин. На этом можно было бы и закончить, т.к. страница со список работ у нас уже готова: taxonomy/term/код_термина_портфолио. Но нам нужен вывод в виде таблицы, поэтому продолжаем.

В файл template.php (из вашей темы) вставляем функцию, позаимствованную из модуля таксономии.

function phptemplate_taxonomy_term_page($tids, $result){
  drupal_add_css(drupal_get_path('module', 'taxonomy') .'/taxonomy.css');
 
  $output = '';
 
  // Only display the description if we have a single term, to avoid clutter and confusion.
  if (count($tids) == 1) {
    $term = taxonomy_get_term($tids[0]);
    $description = $term->description;
 
    // Check that a description is set.
    if (!empty($description)) {
      $output .= '<div class="taxonomy-term-description">';
      $output .= filter_xss_admin($description);
      $output .= '</div>';
    }
  }
 
  $output .= _taxonomy_render_nodes($result);
 
  return $output;
}

Единственное отличие от оригинальной функции это строка:
$output .= _taxonomy_render_nodes($result);
Мы просто задаем свою функцию, которую пишем в этом же файле:
function _taxonomy_render_nodes($result) {
  $output = '<table id="portfolio-list" border="0"><tr>';
  $has_rows = FALSE;
  $counter = 0;
  while ($node = db_fetch_object($result)) {
    $counter += 1;
    $output .= '<td>'.node_view(node_load($node->nid), 1).'</td>';
    $has_rows = TRUE;
    if ($counter%3 == 0) {
      $output .= '</tr><tr>';
    }
  }
  $output .= '</tr></table>';
  if ($has_rows) {
    $output .= theme('pager', NULL, variable_get('default_nodes_main', 10), 0);
  }
  else {
    $output .= '<p>'. t('There are currently no posts in this category.') .'</p>';
  }
  return $output;
}

В этой функции мы как раз описываем желаемое расположение нод.

Комментарии

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Здравствуйте, у меня не получилось создать такое же портфолио, если Вас не затруднит связаться по электронке и обсудить возможность создания подобного портфолио для нас

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".