Как на страницу программно вывести аудио-файл, привязанный к ноде, чтобы отображение было в формате audio?

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

Аватар пользователя rukoved rukoved 19 сентября в 22:29

Здравствуйте!
Создаю ноду с прикрепленным файлом аудио-записи.
Программно вывожу на страницу выборочные данные ноды - запрос делаю к таблице по определенному id-ноды, вывожу текст из текстового поля в переменную. Но так и не поняла как программно вывести аудио-файл, привязанный к ноде, чтобы отображение было в формате audio? Может кто сталкивался?

Лучший ответ

Аватар пользователя rukoved rukoved 22 сентября в 16:24

Напишу здесь, может пригодится кому-то рабочий вариант:

// Получить полный путь к файлу, прикреплённого к определённой ноде:
$node = \Drupal\node\Entity\Node::load($idNode);
$path = $node->field_audio->entity->getFileUri();
$rezult = \Drupal::service('file_url_generator')->generateAbsoluteString($path);
//
// Другой формат
$rezult = $node->field_audio->entity->getFileUri();
//
// Получить имя файла, прикреплённого к определённой ноде:
$node = \Drupal\node\Entity\Node::load($idNode);
$rezult = $node->field_audio->entity->getFilename();

Комментарии

Аватар пользователя ivnish ivnish 19 сентября в 22:55

А зачем выводить программно? Для базовой настройки вывода полей есть "настройка отображения". Для более продвинутой - шаблоны.

Для вывода аудио были модули. Ищите по ключевым словам "audio field"

Аватар пользователя rukoved rukoved 21 сентября в 10:53

Мне именно программно нужно вывести это поле на страницу, используя метод табличных запросов в Drupal, иначе бы не задавала вопрос

Аватар пользователя rukoved rukoved 21 сентября в 19:27

Напишу как сделала, я запрашиваю данные в php и вывожу их в html:

...
$num = '<audio controls='."controls".'>'.'<source src='."/sites/default/files/audiodesc/num_short_1.ogg".'/>'.'<source src='."/sites/default/files/audiofiles/num_short_1.mp3".'/>'.'</audio>';
...
 

Аудио-файл выводится виджетом на странице как надо сейчас, единственное, что не смогла ещё понять как программно написать sql-запрос на php для определения названия или пути прикрепленного файла к ноде, чтобы собрать ссылку в переменную.

Аватар пользователя OldWarrior OldWarrior 21 сентября в 20:16

rukoved wrote: как программно написать sql-запрос на php для определения названия или пути прикрепленного файла к ноде, чтобы собрать ссылку в переменную

ID файла вам известно?

<?php
...
$fid 1;// ID файла.
$file = \Drupal\file\Entity\File::load($fid);
$path $file->getFileUri();
// Если нужен абсолютный URL.
$path = \Drupal::service('file_url_generator')->generateAbsoluteString($path);
...
?>

или, например, сразу из значения поля ноды:

<?php
...
$path $node->field_audio->entity->getFileUri();
// Если нужен абсолютный URL.
$path = \Drupal::service('file_url_generator')->generateAbsoluteString($path);
...
?>
Аватар пользователя rukoved rukoved 21 сентября в 22:17

Не получается, может запрос неправильно строю, либо библиотеку надо добавить?
Известны id-ноды и поле файла в типе материала, запрашиваю таблицу, указываю ноду и ничего.

Аватар пользователя OldWarrior OldWarrior 21 сентября в 22:25

Что бы вам не перестать заниматься неуместной подпольщиной и не выкатить в студию всё, что вы там наплодили? Мне уже не хватает моих скромных телепатических способностей.

Аватар пользователя rukoved rukoved 22 сентября в 16:24

Напишу здесь, может пригодится кому-то рабочий вариант:

// Получить полный путь к файлу, прикреплённого к определённой ноде:
$node = \Drupal\node\Entity\Node::load($idNode);
$path = $node->field_audio->entity->getFileUri();
$rezult = \Drupal::service('file_url_generator')->generateAbsoluteString($path);
//
// Другой формат
$rezult = $node->field_audio->entity->getFileUri();
//
// Получить имя файла, прикреплённого к определённой ноде:
$node = \Drupal\node\Entity\Node::load($idNode);
$rezult = $node->field_audio->entity->getFilename();