Про шаблоны для типов материала вопрос (решено)

Главные вкладки

Аватар пользователя gooamoko gooamoko 21 декабря 2010 в 11:02

Здравствуйте.

Установил CCK, добавил различные типы полей (в частности, fileField и imageField). Создал произвольный тип материала.
Проблема вот в чем. Страничка отображается немного не так, как хотелось бы. Возникла мысль создать шаблон для данного типа материала, но возникает вопрос - как из шаблона можно получить доступ к содержимому добавленых мною полей?
Есть название и описание - это практическе у всех типов нод.
В файле node.tpl.php есть такой кусок кода:

<?php
  
<div class="content clear-block">
    <?
php print $content ?>
  </div>
?>

Насколько я понял, этот кусочек и выводит все содержимое. А мне надо, получается, вывести его (содержимое) по частям. У меня еще есть три поля и картинка (помимо описания). Вот хотелось бы, чтобы картинка и те три поля выводились более компактно, Такое вообще возможно?
Не приведет ли кто-нить примерчик, как это реализовать?

Комментарии

Аватар пользователя starcomputer starcomputer 21 декабря 2010 в 11:09

Через template.tpl.php (Content Templates)

<?php
<style type="text/css">
h1
{
  
font-familyArialHelveticaSans-Serif;
  
font-size18px;
  
font-styleitalic;
  
font-weightbold;
  
text-alignleft;
  
color#298321;

  

}

h2
{
  
font-familyArialHelveticaSans-Serif;
  
font-size16px;
  
font-stylenormal;
  
font-weightbold;
  
text-alignleft;
  
color#298321;
}

h3
{
  
font-familyArialHelveticaSans-Serif;
  
font-size12px;
  
font-stylenormal;
  
font-weightbold;
  
text-alignleft;
  
color#298321;
  
floatleft;
}

TABLE {bordernone !important;}
TD {bordernone !important;}
</
style>
<?
php
//заголовок
echo '<table<tr><td><h1>'$node->field_lat_plant[0]['view'],
     
'</h1></td></tr>',
     
'<tr><td><h2>',$node->field_rus_plant[0]['view'],'</h2></td></tr>',
     
'</table>'
//таблица
echo '<table border = "1" width="100%">',
     
'<tr valign = "center">',
     
'<td rowspan="9" align = "center" valign = "center" width = "200" height = "200">',
     
$node->field_foto_plant[0]['view'],
     
'</td>',
     
'<td width = "140"><h3>Высота:</h3></td>',
     
'<td>',
     
$node->field_height_plant[0]['view'],' см',
     
'</td>',
     
'</tr>',
     
'<tr>',
     
'<td><h3>Ширина:</h3></td>',
     
'<td>',
     
$node->field_weight_plant[0]['view'],' см',
     
'</td>',
     
'</tr>',
     
'<tr>',
     
'<td><h3>Освещение:</h3></td>',
     
'<td>',
     
$node->field_light_plant[0]['view'],' Вт/л',
     
'</td>',
     
'</tr>',
     
'<tr>',
     
'<td><h3>Температура:</h3></td>',
     
'<td>',
     
$node->field_temp_plant[0]['view'],' C',
     
'</td>',
     
'</tr>',
     
'<tr>',
     
'<td><h3>Жесткость воды:</h3></td>',
     
'<td>',
     
$node->field_gh_plant[0]['view'],' dgH',
     
'</td>',
     
'</tr>',
     
'<tr>',
     
'<td><h3>Кислотность воды:</h3></td>',
     
'<td>',
     
$node->field_ph_plant[0]['view'],
     
'</td>',
     
'</tr>',
     
'<tr>',
     
'<td><h3>Скорость роста:</h3></td>',
     
'<td>',
     
$node->field_speed_plant[0]['view'],
     
'</td>',
     
'</tr>',
     
'<tr>',
     
'<td><h3>Условия содержания:</h3></td>',
     
'<td>',
     
$node->field_condition_plant[0]['view'],
     
'</td>',
     
'</tr>',
     
'<tr>',
     
'<td><h3>Растет над водой:</h3></td>',
     
'<td>',
     
$node->field_paludarium_plant[0]['view'],
     
'</td>',
     
'</tr>',
     
'</table>',
     
'<table border = "1" width = "100%">',
     
'<tr>',
     
'<td align = "justify">',
     
$node->content['body']['#value'],
     
'</td>',
     
'</tr>',
     
'</table>';
?>
Аватар пользователя tolykot tolykot 21 декабря 2010 в 11:14

Есть модуль Contemplate. Можно использовать его, или просто подсмотреть как выводить все отдельно, и запихнуть готовое вместо переменной content

Аватар пользователя gooamoko gooamoko 21 декабря 2010 в 12:14

«Есть модуль Contemplate. Можно использовать его, или просто подсмотреть как выводить все отдельно, и запихнуть готовое вместо переменной content»

Этот модуль надо ставить дополнительно? Хотелось бы поменьше модулей. В остальном, думаю, это то, что мне нужно. А где еще помимо модуля contemplate можно вмешаться в процесс обработки контента?

P. S. Спасибо всем за отзывы.

Аватар пользователя tolykot tolykot 21 декабря 2010 в 12:34

Как вариант: в модуле посмотреть все ваши переменные, затем скопировать все необходимое в ваш node.tpl.php, далее отключить Contemplate

Аватар пользователя gooamoko gooamoko 22 декабря 2010 в 8:26

Есть продвижения...
Набрав наобум в node.tpl.php такой код

<?php print_r($field_shortname); ?>

Я получил распечатку массивчика, который связан с моим полем. Подумав еще немного, написал строку

<?php print $field_shortname[0][value]; ?>

И вот оно нарисовалось - значение поля. Теперь остается получить заголовок поля, текст ноды и все... задача решена.
Либо... что-то сделать с настройками отображения картинки.

Аватар пользователя gooamoko gooamoko 22 декабря 2010 в 12:59

Установил модуль contemplate, посмотрел в нем интересующие меня переменные. Удобнее, чем с помощью print_r($node) ковырять. Спасибо, проблема вроде решена.

Аватар пользователя finraag finraag 26 декабря 2010 в 18:56

Переменные удобнее смотреть, если ставить модуль [module=devel]. Тогда на странице с материалом рядом со ссылками Просмотр и Редактировать появляется ссылка Devel.
Я сам правда бьюсь с проблемой темизации ноды. Из вопросов несколько:
1. у материала cck поле связанное со словарем таксономии и в нем несколько значений. мне нужно чтобы выводились все значения (которые будут ссылками на материал), через запятую.
2. если мне нужно "перекроить" полностью вывод всей ноды, а в ней около 10 полей и картинки и taxonomy_fields, как мне правильнее переписать вывод? при чем не использовать conteplate.