Доброго дня.
подскажите решение такой задачи:
1. Есть стандартный(условно) тип контента - story
2. Установлен модуль CCK
3. Создано поле "teaser-image" типа image. (фактически просто текстовое поле-линк на лежащие на серваке файлы)
4. Это поле привязано к типу контента story
Далее самое интересное.
Есть модуть по обработке rss-каналов.
Хочу чтобы содержание тега enclosure - присваивалось полю node->teaser-image.
Расскажите как обращаться к полям созданным cck .
Р.S. Знание пхп на уровне ученика первого класса.(но есть желание учится в 45-то лет....)
Комментарии
Если назвать поле "my_image", то получится примерно так:
<?php
$nid = 13;
$node = node_load(array('nid' => $nid));
$result = $node->my_image[0]['value'];
?>
а мой вариант чем не устраивает?
(нашел в коде неточность: вместо "my_image" должно быть "field_my_image")
Дык дело в том, что приходящий в функцию 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 = '
if ($teaser) {
$output .= '' ;
if ($result) {
$output .= $result; // вот тут вставляем наш image
}
$output .= $teaser . '';
}
$output .= '
';
return $output;
}
?>
И вобщем все заработало как надо! Однако внутренне ощущение, что такие манипуляции с создаваемыми объектами легко серваку не даются - не проходит.
Если ultraboy заверит меня что это ерунда и на хостинге в 32M памяти - это пройдет незамеченным - внедрю на боевой сервер..
Почему "секвестированный", мне тоже интересно. Я с таким не встречался. Может быть, влияют какие-то дополнительные модули?
По поводу увеличения загрузки, ставь модуль девел и смотри.
да думаю надо для начала загружать целую ноду нужного типа - в ней у же все поля будут, node_load($nid ) вроде , где nid - id ноды .А там уже делать, что требуется...
Пасиб - попробую!
Не обязательно загружать всю ноду, можно выбирать только нужные данные из таблицы 'content_type_имя-контента'. Еще в node-имя-контента.tpl.php можно использовать переменные вида $field_имя_поля[0].
--
romka.eu
А что в простом node.tpl.php жти поля недоступны?
пробую вывести
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) - так вообще все перестало работать)))
Вообщем перерыл весь хандбук, все статьи, нету нигде инфы как подступиться к полям сск.
Т.е. они, эти поля не становятся неотъемлемой частью типа контента и не ходят вместе с ним по всему ядру.
Если практически в любой ситуации можно обратиться к $node->teaser или $node->title. То к $node->мое_сск_поле нельзя.
Очень печально - буду сносить его нафик!
да, в блок приходит не весь $node, что-б его взять весь надо делать
$node1 = node_load($node->nid))
Вот результат упражнений..
хорошая работа.
а как вам удалось спрятать в url типичное для drupal "node"
???
pathauto
Кто-нибудь в курсе как лучше всего получить список полей материала CCK и узнать для каждого поля его тип (image, nodereference, text и т.д.)?
есть наверно много способов, а вот как лучше - мне самому интересно
content_types($node->type);
2emzy: спасибо!