Получить путь к файлу
20 апреля 2012 в 10:50
Как получить путь к прикрепленному файлу в ноде (файлы крепятся через файлфиелд)? По апи пошарился не нашел...
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Как получить путь к прикрепленному файлу в ноде (файлы крепятся через файлфиелд)? По апи пошарился не нашел...
Комментарии
Наверно стоит указать хотя бы версию друпал.
Получать программно файлы, прикрепленные к нодам лично мне не приходилось, однако, мне кажется, что любую хрень, связанную с нодой, можно получить из её объекта, структуру которого, в свою очередь, можно наглядно увидеть с помощью 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