Получать программно файлы, прикрепленные к нодам лично мне не приходилось, однако, мне кажется, что любую хрень, связанную с нодой, можно получить из её объекта, структуру которого, в свою очередь, можно наглядно увидеть с помощью 100500 способов, половина из которых раскидана по этому форуму.(лично мне удобнее юзать devel)
взято от сюда http://www.drupal.ru/node/10529[/quote]
Ну и, получил я эту кашу, есть там да же путь файла, но опять таки, зачем мне разгребать всю кашу ноды, если нужен только путь к аттаченному файлу. Должен быть отдельный метод получения пути.
Да блин, эта каша - всего лишь структура ноды, в которой наглядно показано какие поля объекта у неё вообще есть, и как их правильно задать.
Дальше выделяете мышкой нужный вам кусок, нажимаете Ctrl+C, открываете Ваш модуль, в нем в нужном месте жмете Ctrl+V, правите этот кусок под правила PHP и свои нужны, и пользуетесь.
Если там действительно все верно, то не работать оно может только, если вызывается не по правилам. Проверить можно через print "текст"; в том месте, где у Вас тот код. А если этот текст где-либо все таки вылезет, то скорей всего $node->field_file[0]['filepath']; неверно.
field_get_items, вроде функция локализации, позволяет получить текст на определенном языке, т.е. совершенно здесь не нужна. Т.е. в 1м варианте Вы пытаетесь получить 'filepath', во 2м 'uri'
$get_field_name = field_get_items('node', $node, 'field_file'); будет полным аналогом $get_field_name->field_name, если $get_field_name == $node(в данном случае)
$get_field_name = field_get_items('node', $node, 'field_file'); будет полным аналогом $get_field_name->field_name, если $get_field_name == $node(в данном случае)
"sg85" написал(а):
$get_field_name = field_get_items('node', $node, 'field_file'); будет полным аналогом $get_field_name->field_name, если $get_field_name == $node(в данном случае)
"sg85" написал(а):
field_get_items, вроде функция локализации
и где логика ваша?
стало модным?)
Нет, я согласен, что в некоторых ситуациях, когда, к примеру, имя поля изначально неизвестно, использовать можно, но в данном варианте, выглядит именно так)
field_get_items это вспомогательная функция, с помощью которой удобно извлекать значения (с учётом текущего языка) из полей ноды. Даже если на сайте используется только один язык, значения полей в ноде буду находится в массиве с соответствующим индексом. Поэтому извлекать их оттуда удобней с помощью данной функции. http://www.davereid.net/content/hlkd7fotw-field-get-items
field_get_items это вспомогательная функция, с помощью которой удобно извлекать значения (с учётом текущего языка) из полей ноды. Даже если на сайте используется только один язык, значения полей в ноде буду находится в массиве с соответствующим индексом. Поэтому извлекать их оттуда удобней с помощью данной функции. http://www.davereid.net/content/hlkd7fotw-field-get-items[/quote]
Спасибо за разъяснение, но для себя по прежнему не нахожу в ней смысла, кроме случаев с языком, либо, когда имя поля является переменной, особенно, если требуется получить значения десятка полей, но это, видимо, уже мои проблемы
Комментарии
Наверно стоит указать хотя бы версию друпал.
Получать программно файлы, прикрепленные к нодам лично мне не приходилось, однако, мне кажется, что любую хрень, связанную с нодой, можно получить из её объекта, структуру которого, в свою очередь, можно наглядно увидеть с помощью 100500 способов, половина из которых раскидана по этому форуму.(лично мне удобнее юзать devel)
Не выходит:
<?php
$nid=8;
$node = node_load($nid);
print $node->field_file[0]['filepath'];
?>
Результат — ничего...
взято от сюда http://www.drupal.ru/node/10529
Да блин, эта каша - всего лишь структура ноды, в которой наглядно показано какие поля объекта у неё вообще есть, и как их правильно задать.
Дальше выделяете мышкой нужный вам кусок, нажимаете Ctrl+C, открываете Ваш модуль, в нем в нужном месте жмете Ctrl+V, правите этот кусок под правила PHP и свои нужны, и пользуетесь.
Я беспонятия как объяснить более доходчиво...
Если что то выше я код приводил, в котором и написано получение с ноды того что мне нужно, по правилам, только не работает оно.
Если там действительно все верно, то не работать оно может только, если вызывается не по правилам. Проверить можно через print "текст"; в том месте, где у Вас тот код. А если этот текст где-либо все таки вылезет, то скорей всего $node->field_file[0]['filepath']; неверно.
Разобрался, так заработало:
<?php
<?
$nid=12;
$node = node_load($nid);
$get_field_name = field_get_items('node', $node, 'field_file');
print $get_field_name[0]['uri'];
?>
Но это немного не такой путь, он вида public://book/1_7.txt а мне нужен sites/default/files/book/1_7.txt
обычно в параметре URI поля типа файл ноды содержиться путь к файлу от папки files , что-то типа public://dir/file.ext
полный путь к файлу можно получить функцией drupal_realpath($uri) http://api.drupal.org/api/drupal/includes!file.inc/function/drupal_realp...
field_get_items, вроде функция локализации, позволяет получить текст на определенном языке, т.е. совершенно здесь не нужна. Т.е. в 1м варианте Вы пытаетесь получить 'filepath', во 2м 'uri'
откуда такие выводы ?
langcode в ней вроде как опциональный аргумент.
она скорее для того ,чтобы после неё вывести поле через field_view_value()
спасибо, написал что нужно было (загрузка книги на сервер и ее чтение в ноде).
из самой функции
$langcode = field_language($entity_type, $entity, $field_name, $langcode);
return isset($entity->{$field_name}[$langcode]) ? $entity->{$field_name}[$langcode] : FALSE;
}
$get_field_name = field_get_items('node', $node, 'field_file'); будет полным аналогом $get_field_name->field_name, если $get_field_name == $node(в данном случае)
и где логика ваша?
А где Ваша?)
Или писать такое:
return $arg;
}
print f1($data);
стало модным?)
Нет, я согласен, что в некоторых ситуациях, когда, к примеру, имя поля изначально неизвестно, использовать можно, но в данном варианте, выглядит именно так)
field_get_items это вспомогательная функция, с помощью которой удобно извлекать значения (с учётом текущего языка) из полей ноды. Даже если на сайте используется только один язык, значения полей в ноде буду находится в массиве с соответствующим индексом. Поэтому извлекать их оттуда удобней с помощью данной функции.
http://www.davereid.net/content/hlkd7fotw-field-get-items