Доступ к полям CCK в коде других модулей

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

Аватар пользователя Toologic Toologic 11 апреля 2007 в 13:30

Доброго дня.

подскажите решение такой задачи:

1. Есть стандартный(условно) тип контента - story
2. Установлен модуль CCK
3. Создано поле "teaser-image" типа image. (фактически просто текстовое поле-линк на лежащие на серваке файлы)
4. Это поле привязано к типу контента story

Далее самое интересное.

Есть модуть по обработке rss-каналов.
Хочу чтобы содержание тега enclosure - присваивалось полю node->teaser-image.

Расскажите как обращаться к полям созданным cck .

Р.S. Знание пхп на уровне ученика первого класса.(но есть желание учится в 45-то лет....)

Комментарии

Аватар пользователя Toologic Toologic 12 апреля 2007 в 0:36

Дык дело в том, что приходящий в функцию theme_taxonomy_block_list_item($node)
содержит почему-то минимум полей
-nid
-body
-title
-teaser
-sticky И все....

Мож конечно пойти по твоему пути и попробовать хватать входящий $node->nid и по-новой загрузить $node
Но, сдается мне, эта функция полчаса выполняться будет и жрать ресурсы как мышь крупу.

В качестве эКскремента (оо) сделаю на локалке и отпишу резалт!
____________ ОТЧЕТ ______________
Итак привожу код
<?php
function vortex_taxonomy_block_list_item($node, $teaser) {

$nid = $node->nid; // Запоминаем входящий ID ноды
$node1 = node_load(array('nid' => $nid)); // Заново формируем объект ноды. Не совсем понятно почему приходящий в функцию такой секвестированный?
$result = content_format('field_mainimage', $node1->field_mainimage[0]); //берем значение нашего сск поля и сразу конвертим его в линк на image

$output = '

  • ' . l($node1->title, 'node/'. $node1->nid, array('title'=>t("view title in full", array('title'=>$node1->title)) ));
    if ($teaser) {
    $output .= '' ;
    if ($result) {
    $output .= $result; // вот тут вставляем наш image
    }
    $output .= $teaser . '';
    }
    $output .= '
  • ';
    return $output;
    }
    ?>
    И вобщем все заработало как надо! Однако внутренне ощущение, что такие манипуляции с создаваемыми объектами легко серваку не даются - не проходит.

    Если ultraboy заверит меня что это ерунда и на хостинге в 32M памяти - это пройдет незамеченным - внедрю на боевой сервер..

    Аватар пользователя ultraboy@drupal.org ultraboy@drupal.org 12 апреля 2007 в 9:58

    Почему "секвестированный", мне тоже интересно. Я с таким не встречался. Может быть, влияют какие-то дополнительные модули?

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

    Аватар пользователя jason32 jason32 11 апреля 2007 в 13:43

    да думаю надо для начала загружать целую ноду нужного типа - в ней у же все поля будут, node_load($nid ) вроде , где nid - id ноды .А там уже делать, что требуется...

    Аватар пользователя Ромка Ромка 11 апреля 2007 в 14:10

    Не обязательно загружать всю ноду, можно выбирать только нужные данные из таблицы 'content_type_имя-контента'. Еще в node-имя-контента.tpl.php можно использовать переменные вида $field_имя_поля[0].

    --
    romka.eu

    Аватар пользователя Toologic Toologic 11 апреля 2007 в 19:38

    А что в простом node.tpl.php жти поля недоступны?

    пробую вывести

    print $field_teaserimage[0]['view'];
    print $field_teaserimage[0];
    print $field_teaserimage[0]['value'];  

    пустота!

    И потом не совсем в ту сторону ушло обсуждение.

    Мне не нужен доступ к полям внутри шаблона страницы - здесь как раз все понятно...

    Мне нужен доступ к полям cck:
    1. внутри template.php
    -- например есть настройка (theme_) для вывода списков материалов по терминам (модуль taxonomy_block). Ну и там соответсвенно в фукнции моя_тема_taxonomy_block_list_item() есть раскладка как выводить title и teaser материала. Вот тут-то я и хочу проверив наличие и значение поля $field_teaserimage - вывести его на страницу...

    Как это сделать...

    Посмотрел пример использования (определения полей) в приложенном к cck примере (\theme\template.php) - так вообще все перестало работать)))

    Аватар пользователя Toologic Toologic 11 апреля 2007 в 20:20

    Вообщем перерыл весь хандбук, все статьи, нету нигде инфы как подступиться к полям сск.

    Т.е. они, эти поля не становятся неотъемлемой частью типа контента и не ходят вместе с ним по всему ядру.
    Если практически в любой ситуации можно обратиться к $node->teaser или $node->title. То к $node->мое_сск_поле нельзя.

    Очень печально - буду сносить его нафик!

    Аватар пользователя Dan Dan 22 апреля 2007 в 16:11

    Кто-нибудь в курсе как лучше всего получить список полей материала CCK и узнать для каждого поля его тип (image, nodereference, text и т.д.)?