Темизация ноды с таксономией и CCK без использования VIEWS

Прислано: HIgor1968

ср, 03/12/2008 - 11:53

Товарищ с темы http://drupal.ru/node/22152 сподвиг на это описание:)
Тем более что только что сделал.

- node.tpl.php переименовываем в node-НашТипДанных.tpl.php
- убираем штатный вывод контента типа

  <div class="content">
    <?php print $content ?>
  </div>
И начинаем писать вывод
Для разделения вывода списком и отдельных нод используем $page
  <?php if ($page): ?>
    <?php //здесь выводим то что надо на отдельные ноды ?>
   <?php else: ?>
    <?php //здесь выводим то что надо для списка нод ?>
  <?php endif;?>

Теперь отдельно переменные для вывода полей:
Описание: $node->content['body']['#value']
Поле ССК в ноде: $node->ИмяCCKполя[0]['view']

Если полями ноды являются термины таксономии то вот конструкция

//Выводим все словари  таксономии
foreach(taxonomy_node_get_terms($node, 'vid') as $name3 => $value3) {
	$vocabulary = taxonomy_vocabulary_load($name3);
	echo '<div class = "pole_l0" id = "term' . $vocabulary->vid . '"><p><b>' . $vocabulary->name . ': </b>';
	$cc = '';
	$rr = '';
	$ii = 1;
	foreach (taxonomy_node_get_terms_by_vocabulary($node, $name3,'description') as $name => $value1) {
	if($ii>1){$rr = ', ';}
	$cc = $cc . $rr . $name;
	$ii +=1;}
	echo $cc . '</p></div>';		
}
Ваводит следующее
НаименованиеСловаряТаксономии: термин1, термин2

Примеры темизации без использования вьюса только node.tpl.php и разбор массива $node:
- Объект недвижимости
- список новостроек

И напоследок не забываем конструкцию:

 <?php print '<pre>'. check_plain(print_r($node, 1)) .'</pre>'; ?>

Для просмотра массива $node.

P.S.: Топик с исправлениями перенес на свой сайт

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Химический Али в ср, 03/12/2008 - 13:21.

Наименование термина: = Словарь?


Опубликовано HIgor1968 в ср, 03/12/2008 - 13:23.

Да, наименование словаря таксономии.


Опубликовано alex_ku в вс, 14/12/2008 - 16:39.

спасибо за информацию!
попутно вопрос - возможно ли выключить рендеринг контента в друпале для данного типа ноды ?
потому как в $node->body лежит уже готовое тело, которое теперь и не нужно. возможно получится выиграть в производительности.


Опубликовано HIgor1968 в вс, 14/12/2008 - 17:43.

Задача конечно интересная, но для этого надо разбиратся с модулем node. Возможно решается перекрытием какой-то функции.


Опубликовано alex_ku в вс, 14/12/2008 - 21:43.

поковырял node.
решение не очень, но работает:
node.module:

function node_view($node, $teaser = FALSE, $page = FALSE, $links = TRUE) {
  $node = (object)$node;
  $node = node_build_content($node, $teaser, $page);
 
  if ($links) {
    $node->links = module_invoke_all('link', 'node', $node, $teaser);
    drupal_alter('link', $node->links, $node);
  }
 
  // Set the proper node part, then unset unused $node part so that a bad
  // theme can not open a security hole.
  // alex
  // if($node->type == 'reality') // skip render for reality nodes
  if($node->tnid != 0) // skip render for this tnid
    $content = drupal_render($node->content);


Опубликовано ingumsky@drupal.org в сб, 20/12/2008 - 18:05.

Спасибо. Прочитал ваш пост и в голове стало проясняться, как это работает, и что нужно сделать в моём случае.


Опубликовано HIgor1968 в сб, 20/12/2008 - 19:07.

Рад, что помог;) Собственно сам чайник, учусь тихонько и выкладываю чему научился;)


Опубликовано ingumsky@drupal.org в сб, 20/12/2008 - 19:14.

Хорошо, что есть такие «чайники», как Вы ;) А то, бывает, люди отпишутся с вопросом, а о том, помог ли предложенный вариант, и не скажут, да и если найдут где-то ещё решение своей проблемы, всё равно не отпишутся.


Опубликовано HIgor1968 в сб, 20/12/2008 - 19:18.

;) Я учусь писать ;) В этом я точно чайник. А опыт программирвания 20 лет;)


Опубликовано ingumsky@drupal.org в сб, 20/12/2008 - 19:31.

У меня как такового опыта программирования нет, зато есть довольно обширный опыт получения коммьюнити саппорта по различным вопросам, связанным с Линукс -) Опыт как положительный, так и отрицательный -))


Опубликовано HIgor1968 в сб, 20/12/2008 - 20:00.

Полезно. Только что настраивал VPS на Агаве. непонятки пока остались, но отдвинул пока их.


Опубликовано siteograf в ср, 31/12/2008 - 15:21.

Спасибо! Мне был полезен этот материал.
Успехов вам.


Опубликовано HIgor1968 в ср, 31/12/2008 - 18:32.

Рад помочь, С Новым Годом!!!


Опубликовано kseniaflor в вт, 21/04/2009 - 19:33.

как раз то, что мне нужно! спасибо за подробности


Опубликовано HIgor1968 в вт, 21/04/2009 - 19:37.

Пожалуйста, пользуйтесь на здоровье.


Опубликовано Gats в пт, 24/04/2009 - 09:08.

А как сделать, чтобы повторяющиеся поля CCK в нескольких нодах выводились в виде ссылки, ведущей на все ноды, в которых присутствует это поле, словно это был бы термин словаря таксономии? content_taxonomy не предлагать интересует конкретный вопрос по реализации на CCK


Опубликовано HIgor1968 в пт, 24/04/2009 - 14:02.

Самое правильное будет именно таксономия. Иначе придется дублировать уже имеющийся функционал.
Можно отобрать ноды по значению CCK полю и по его значению можно SQL запросом и делать с ними что хочешь. Только ЗАЧЕМ?


Опубликовано Gats в сб, 25/04/2009 - 16:18.

Ясно. Значит будем юзать таксономию. Просто мне CCK показался гибче.

"HIgor1968" написал(а):

Только ЗАЧЕМ?

Например вот на этой странице имеются следующие текстовые поля CCK:

Тип дома: Индивидуальная планировка
Тип жилья: Квартиры Пермь
Материал стен: Монолитно-каркасный
Тип сделки: Пермь продажа недвижимости
Район: Свердловский, р-н г. Пермь
Улица: ул. Сибирская
Тип недвижимости: Новостройки Перми
Адрес: Сибирская, 46
Квартиры в продаже: список
Cдача объекта: Дом введен в эксплуатацию.

Было бы не плохо в качестве дополнительной навигации по сайту, что бы эти поля были ссылками. Например при нажатии на ссылку "Индивидуальная планировка" открывался бы список всех превьюшек страниц, где это поле повторяется.
Мне казалось будет проще и правильнее эти текстовые поля CCK сделать ссылками, нежели под каждое поле отдельно заводить словарь таксономии.


Опубликовано HIgor1968 в вс, 26/04/2009 - 13:53.

Gats написал(а):

Ясно. Значит будем юзать таксономию. Просто мне CCK показался гибче.

Тип дома: Индивидуальная планировка
Тип жилья: Квартиры Пермь
Материал стен: Монолитно-каркасный
Тип сделки: Пермь продажа недвижимости
Район: Свердловский, р-н г. Пермь
Улица: ул. Сибирская
Тип недвижимости: Новостройки Перми
Адрес: Сибирская, 46
Квартиры в продаже: список
Cдача объекта: Дом введен в эксплуатацию.

Было бы не плохо в качестве дополнительной навигации по сайту, что бы эти поля были ссылками. Например при нажатии на ссылку "Индивидуальная планировка" открывался бы список всех превьюшек страниц, где это поле повторяется.
Мне казалось будет проще и правильнее эти текстовые поля CCK сделать ссылками, нежели под каждое поле отдельно заводить словарь таксономии.

Все поля кроме сдачи объекта и адреса - Таксономия. А ссылки внизу. Просто клиент не хотел их видеть ссылками и я их вынес вниз ноды.

Таксономией правильнее и более того надо жестко задавать словари где это возможно. То нафантазируют так:)


Опубликовано Strycker в пт, 02/10/2009 - 06:54.

Полезный материал. Разобрался, работает, спасибо.


Опубликовано Sponger в чт, 28/01/2010 - 12:40.

Спасибо! очень пригодился ваш пост.

А не знаете можно ли тут организовать поиск по полям CCK на подобии exposed filters в Views при выводе списка нод?


Опубликовано HIgor1968 в пт, 29/01/2010 - 16:18.

Здесь я рассматривал темизацию одной ноды. Даже когда идет вывод списком в node.tpl.php темизируется только одна нода из списка.
По Вашему вопросу почитайте здесь и здесь


Новое на сайте

Ссылки партнёров