cck и preview

Комментарии

Аватар пользователя vermus.info vermus.info 4 октября 2006 в 16:08

Почитал тут:
http://drupal.org/node/86022
CCK-less, separate-textarea-teasers without hacking core

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

Аватар пользователя vermus.info vermus.info 4 октября 2006 в 17:02

После долгих ковыряний нашел хак:
http://www.nicklewis.org/node/844

Только он у меня работает со всеми материалами..
А нужно для одного:

<?php
//for teasers
if ($page == 0) {
print $cck_teaser;
}
//for fullpages
else {
print $node->field_body[0]['value'];?>
}
?>

Сейчас еще поковыряюсь - думаю нарулю.

Аватар пользователя vermus.info vermus.info 4 октября 2006 в 17:23

Поскажите, как в это месте вывести не только новую переменную $cck_teaser, но и стандартную переменную тизера (чтобы на стандартных нодах было отображение тизера (которое раньше видимо шло через <?php print $content ?>

Что бы вставить ее сюда:

if ($page == 0) {
print $cck_teaser;
}

А то на нодах типа cck работает а на нодах стандартного пусто.

Аватар пользователя vermus.info vermus.info 4 октября 2006 в 21:33

В общем, никто не хочет отвечать. Отвечу сам себе.
Поиски указали невозможность создания тизеров для типа материала созданного модулем cck с помощью каких-либо модулей.
Руководствуясь предложениями по данному адресу http://www.nicklewis.org/node/844 начал создавать тизеры для типа материала созданного модулем cck. В предложниях данным по указанному адресу решение великолепно, но недоставало одной маленькой детали - тизеры, очевидно создаваясь динамически, заменяли исходный тизер стандартных материалов нулем, так как в хуке указывалось поле (обычно содержание)созданного cck типа материала (что, ес-но не совпадает с полями стандартных материалов, да и лишняя нагрузка на сервер по динамическмоу созданию тизеров). В общем, от слов к делу вот код:

<?php

function _phptemplate_variables($hook, $vars) {

switch ($hook) {
case 'node':
if ($vars['page'] == 0)
{
// Create CCK teasers hack
/* Believe it or not, all you have to do is pass the field through
the existing node.module function node_teaser()! */
switch ($vars['node']->type) {
case 'content_':
$vars['cck_teaser'] = node_teaser($vars['field__'][0]['value']);
$vars['is_cck_node']= true;
if ($vars['cck_teaser'] != $vars['field__'][0]['value'])
{
$vars['links'] .= ($vars['links'] ? ' | ' : '') . l(t('Read the rest of this posting.'), 'node/'.$vars['node']->nid);
}
break;
}
}
break;
}
return $vars;
}
?>

Это код создания новых переменных для использования их в модуле node.tpl.php. Его надо добавить в template.php (просто добавить).

А вот код который надо вставить в div class="content" node.tpl.php для обработки наших переменных.

<?php
//for teasers
if ($is_cck_node==true)
{
print $cck_teaser;
}
else
{
print $content ;
}
?>

Переменная cck_teaser содержит наш тизер cck.
Переменная is_cck_node указывает, что мы действительно обработали тизером НАШ материал (не стандратный).
content_ - наш материал (системное название материала).
field__ - поле для тизера нашего материала.

ps. в исходном линке в камментах тоже была поптыка отделить стандартные материалы (но - только страницы, и у меня так и не заработал их код).

ps. Пример на http://vermus.info (новости - материал cck, исполнители материал page).
pps. Говорят есть cck-й cvs, который фиксит эту проблему, но я его не стал искать, так как заработал приведенный выше код.

Аватар пользователя seaji seaji 16 декабря 2006 в 15:51

Была у меня такая проблема.
Дело в том, что в стандартных условиях тизер создается из body, а в ССК body как такового нет. В таких условиях либо вводите тизер вручную (excerpt), либо для каждого типа ССК пишете свой алгоритм создания тизера в зависимости от существующих полей.
Теперь о contemplate.
в поле тизера вставляете:
<?php
$node_loaded = node_load($nid);
print $node_loaded->teaser;
?>
при этом во всех местах будет публиковаться реальных тизер ноды. А уж как Вы его создадите это уже дело Ваше.