Решил сделать сайт веб-студии для того, чтобы показать свои работы (портфолио). При чем поставил задачу сделать все с использованием минимума сторонних модулей. Раздел с портфолио можно было бы конечно легко сделать с помощью модуля 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; }
В этой функции мы как раз описываем желаемое расположение нод.
Здравствуйте, у меня не получилось создать такое же портфолио, если Вас не затруднит связаться по электронке и обсудить возможность создания подобного портфолио для нас
Отправить комментарий