
<?php
/**
* Implementation of hook_perm
*/
function [your module]_perm() {
return array(
'view node type'
);
}
function [your module]_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
switch ($op) {
case 'view':
if (user_access('view node type')){
$node->content['node_type']['#value'] = '<div class="node-type">'. t('Material type :: '). node_get_types('name', $node) .'</div>';
$node->content['node_type']['#weight'] = -10;
}
}
}
?>Чтобы это работало, в теме в файлах типа node.tpl.php должна выводиться переменная $content.
(Если же вам не нужны какие-то поля в этой переменной, удалите их оттуда с помощью настроек - галочка в настройках полей Display fields )
Как создать с помощью views список категорий как это любят в рунете на форумах (см. картинку).
1. Первое - при создании view выбираем тип taxonomy term (а не node как обычно).
2. Так как мы хотим видеть 2 колонки терминов, добавляем display page для первой колонки и display attachment для второй колонки.
2. Для группировки терминов по родительскому термину добавляем relationship taxonomy:parent term
- это основные моменты, остальное видно на скриншоте.
Я писала про добавление шаблонов в WISYWIG редактор TinyMCE в Drupal -
TinyMCE template плагин в Drupal,
чтобы можно было, вставляя картинку в текст, добавлять html код для выравнивания этой картинки по левой или правой стороне вместе с подписью к картинке.
Теперь коротко о том же самом - о добавлении кнопки для картинки, только для BuEditor.
В настройках BuEditora (/admin/settings/bueditor)
есть раздел Import Buttons, с помощью которого можно импортировать кнопки -
пример во вложении к этому сообщению.
Иконки для кнопок (файл во вложении) можно положить в любой каталог,
указав путь к нему в разделе Editor paths тамже в настройках Bueditora.
(CSS код и разметку см. в заметке TinyMCE template плагин в Drupal)
При оформлении статьей очень частно возникает необходимость вставки картинок внутри текста,
например с выравниванием по левой или по правой стороне, часто с подписями к этим картинкам,
как это реализовать в Drupal с WYSIWYG редактором TinyMCE я писала в прошлый раз -
TinyMCE template плагин в Drupal
А теперь к этим картинкам добавим эффект Lightbox - увеличение картинки при клике на ней.
В самом модуле Lightbox уже есть фильтр, который автоматически добавит javascript для картинок с определенным классом (если этот фильтр отдельно включить).
Но вручную писать и ссылку на большую картинку, и делать thumbnail не удобно.
К счастью, есть модуль image_resize_filter (кстати, разработанный известной компанией Lullabot).
Этот модуль, как ясно из названия, сам за вас изменит размер картинки.
Работает он как фильтр, вы с помощью IMCE или даже просто в Bueditore
вставляете в текст большую картику (не thumbnail), но указываете в атрибутах width и height
размеры thumbnailа, а фильтр сделает все остальное - уменьшит картинку и добавит нужную ссылку для Lightbox.
Для начала посмотрим как вставлять картинку с эффектом Lightbox,
установив только модуль Lightbox2.
вариант #1
Для этого нужно img поместить внутри ссылки на картинку оригинального размера
и добавить аттрибут rel="lightbox":
<a href="images/image-1.jpg" rel="lightbox" title="my caption">image #1</a>
<a href="images/image-1.jpg" rel="lightbox[][my caption]">image #1</a>Чтобы сгруппировать картинки, т.е. чтобы можно было пролистывать их внутри lightbox стрелочками влево и вправо:
<a href="images/image-1.jpg" rel="lightbox[roadtrip]">image #1</a>
<a href="images/image-2.jpg" rel="lightbox[roadtrip][caption 2]">image #2</a>
<a href="images/image-3.jpg" rel="lightbox[roadtrip][caption 3]">image #3</a>(подробнее, в том числе как группировать картинки см. http://drupal.org/node/356124)
Чтобы это работало lighbox скрипт должен быть включен на всех страницах -
см. в настройках модуля (/admin/settings/lightbox2) в блоке Page specific lightbox2 settings.
вариант #2
Другой вариант заключается в том, что можно не добавлять атрибут rel и не мучаться с прописыванием правильных групп,
а добавить аттрибут class в тег img:
<a href="images/image-1.jpg" rel="lightbox" title="my caption"><img src="images/image-1-small.jpg" class="lb"/></a>Чтобы это работало в настройках модуля (/admin/settings/lightbox2/automatic) нужно прописать этот класс:

В обоих случаях, описанных выше, нужно
иметь две картинки - большую и маленькую,
вручную добавлять ссылку к картинке,
указывать атрибут (либо rel, либо class)
При использовании модуля Image resize filter
достаточно вставить картинку и указать размеры превьюшки в атрибутах width и height:
<img src="images/image-1.jpg" width="320" height="240">здесь /files/image-1.jpg - это большая картинка.
И если Image resize фильтр включен в настройках формата ввода,
а также в настройках самого фильтра указано, что нужно добавить тег rel=lightbox
то при просмотре страницы html будет выглядет вот так:
<a rel="lightbox" href="/files/image-1.jpg" class="lightbox-processed"><img height="240" width="320" src="/files/resize/image-1-320x240.JPG"></a>Модули, которые понадобятся -
http://drupal.org/project/wysiwyg
http://drupal.org/project/imce
http://drupal.org/project/lightbox2
http://drupal.org/project/image_resize_filter
P.S. Спасибо Андрею, за комментарии
(Screenshots by givchik)

Чтобы картинки листались внутри lighbox, укажите атрибут не lightbox, а lightbox[roadtrip]
Очень часто возникает такая задачка, когда пользователям нужно дать возможность вставлять
некоторые готовые HTML сниппеты. Даже если пользователи знакомы с html - это довольно долго каждый раз писать HTML код вручную, тем более это неудобно при использовании WYSIWYG редактора,
такого как tinyMCE.
Для таких случаев в tinyMCE есть плагин templates (документация по нему тут http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template),
остается только подружить его с Drupal.
В этом сниппете из цикла Theme by pieces о главном меню.
в page.tpl.php:
<?php if ($primary_menu): print $primary_menu; endif; ?>
<?php if ($secondary_menu): print $secondary_menu; endif; ?>В template.php в функции
mytheme_preprocess_page(&$vars, $hook):
<?php
if (!empty($vars['primary_links'])) {
$vars['primary_menu'] = theme('links_primary', $vars['primary_links'], array('class' => 'bookmarks'));
}
?>Для сложной верстки, когда не хватает стандартных тегов ul/li,
например, когда меню имеет круглые края.
В этом случае удобнее включить дополнительный шаблон.
<?php
?>
For example for Secondary links:
_preprocess_page(&$vars, $hook)
<?php
if (!empty($vars['secondary_links'])) {
$vars['secondary_menu'] = theme('links_secondary', $vars['secondary_links'], array('class' => 'static-menu'));
}
?><?php
/**.
* Implementation of hook_theme.
*
* Register custom theme functions.
*/
function renlife_theme() {
return array(
'links_secondary' => array(
'arguments' => array(
'links' => NULL,
'attributes' => array('class' => 'links'),
'settings' => array(
'delimiter' => '',
'leftcab' => NULL,
'rightcab' => NULL,
)
),
'template' => 'links-plain',
)
);
}
?>Для plain меню, когда разметка меню не содержит ul/li,
но содержит разделители между пунктами тип "|",
используем дополнительный шаблон
plain
<?php
/**
* This snippet changes links layout.
*/
$output = '';
if (
count($links) > 0) {
$output .= '<div'. drupal_attributes($attributes) .'>';
// Display the right cap of the 'button bar'.
if (!empty($settings['leftcab'])) {
$output .= $settings['leftcab'];
}
// Build the list of themed links.
$link_list = array();
foreach ($links as $link) {
if (isset($link['href'])) {
// Pass in $link as $options, they share the same keys.
$link_list[] = l($link['title'], $link['href'], $link);
}
else if (!empty($link['title'])) {
// Some links are actually not links, but we wrap these in <span> for adding title and class attributes
if (empty($link['html'])) {
$link['title'] = check_plain($link['title']);
}
$span_attributes = '';
if (isset($link['attributes'])) {
$span_attributes = drupal_attributes($link['attributes']);
}
$link_list[] = '<span'. $span_attributes .'>'. $link['title'] .'</span>';
}
}
// Add delimiter between the links.
if (!empty($settings['delimiter'])) {
$output .= implode($settings['delimiter'], $link_list);
}
else {
$output .= implode('', $link_list);
}
// Display the right cap of the 'button bar'.
if (!empty($settings['rightcab'])) {
$output .= $settings['rightcab'];
}
$output .= '</div>';
}
print
$output;
?>Это первая заметка из цикла Theme by pieces -
о логотипе, site name и slogan
В template.php в функции
mytheme_preprocess_page(&$vars, $hook)
<?php
// Set variables for the logo and site_name.
if (!empty($vars['logo'])) {
// Return the site_name even when site_name is disabled in theme settings.
$vars['logo_alt_text'] = variable_get('site_name', '');
$vars['site_logo'] = '<a href="'. $vars['front_page'] .'" title="'. t('Home page') .'" rel="home"><img src="'. $vars['logo'] .'" alt="'. $vars['logo_alt_text'] .' '. t('logo') .'" /></a>';
}
?>В page.tpl.php:
<?php if ($site_logo): ?><span id="logo"><?php print $site_logo; ?></span><?php endif; ?>
<?php if ($site_name): ?><span id="site-name"><?php print $site_name; ?></span><?php endif; ?> По Drupal сейчас очень много разной документации, особенно на английском,
в том числе и по созданию темы,
также существует на сегодня около десятка так называемых "базовых тем".
Базовая тема - это отличный инструмент для быстрого создания темы,
причем обычно в результате вы получаете не просто тему, заточенную под конкретный сайт
и конкретный дизайн, но и даете возможность легко с помощью настроек в виде
чекбоксов и текстфилдов себе и заказчику изменять те или иные параметры готовой темы.
Но если у заказчика по той или иной причине уже есть верстка,
и он настаивает (или это может быть действительно необходимо),
чтобы для новой темы для Drupal разработчик использовал уже готовую верстку,
то базовую тему уже не возьмешь - а можно взять только кусочки из нее.
Еще вариант - вы не хотите использовать все навороты какой-то темы,
и вам совсем не нужно такое количество настроек в теме,
которое предлагают большинство базовых тем, и даже lite вариант подтемы не устраивает.
В для таких случаев я и собираюсь начать писать здесь цикл заметок
под названием "Theme by pieces" - это сниппеты, которые можно использовать
для создания любой темы по отдельности.
Если мы хотим вывести CCK поле типа 'дата' (модуль date) в виде календарика, как на иллюстрации, то для этого:
<?php if (!empty($field_date[0]['value'])) {
$date = strtotime($field_date[0]['value']); ?>
<div class="field-field-newsdate">
<div class="mon"><?php print format_date($date, 'custom', 'M'); ?></div>
<div class="day"><?php print format_date($date, 'custom', 'j'); ?></div>
</div>
<?php } ?> .field-field-newsdate {
background:url("images/cal.png") no-repeat scroll center top transparent;
float:right;
font-size:8px;
height:30px;
line-height:13px;
text-align:center;
width:29px;
text-transform:uppercase;
}
.field-field-newsdate .mon {
color:#FDFEE9;
font-weight:bold;
}Подобрать фон для календарика можно здесь - Free Web 2.0 Calendar Icons
Очень частно нужно выводить содержание разделов, которые относятся к разным словарям по разному.
Т.е. например, для термина из словаря Catalog нужно выводить только короткое содержание соответствующих нодов (node teasers), а для словаря Tags нужно выводить только заголовки,
или например, для Catalog нужно выводить ноды с картинками, а для Tags - без них.
При этом основная страница терминов в Drupal - taxonomy/term/[tid], и по умолчанию показываются в виде ссылок в конце нода.