comment obtenir le chemin absolu des fichiers basé sur fid
13
Comment puis-je obtenir le chemin absolu d'un fichier basé sur la fidélité? Désolé si c'est une répétition, j'ai fait une recherche mais je n'ai pas pu trouver la réponse.
Tout d'abord, vous devez transformer le $ fid en URI Drupal:
$file = file_load($fid);
$uri = $file->uri;
Maintenant, vous pouvez transformer cela en URL
$url = file_create_url($uri);
file_create_url()crée toujours une URL absolue, soit en utilisant le global $base_pathque vous avez défini, soit en utilisant celui que Drupal a deviné lors du bootstrap.
Je suis surpris que vous ayez à charger le fichier juste pour obtenir le chemin d'accès, semble être un gaspillage de ressources.
Russ
2
@Russ Il charge l'objet fichier, pas le fichier lui-même. Vous pouvez également faire une requête db_query pour obtenir l'URI, mais j'essaie d'utiliser l'API autant que possible.
mpdonadio
Merci, je me suis dit que je pensais juste qu'il y aurait une fonction propre qui pourrait la retourner en une seule étape. Peut-être quelque chose à considérer dans drupal 8.
Russ
1
Dans votre exemple, vous avez 'field_load ($ fid)', ce devrait être 'file_load ($ fid)'.
Steve Mulvihill
2
@SteveMulvihill Wow, belle prise. Quatre ans et plus et 33 votes, et personne ne l'a remarqué.
mpdonadio
3
Dans Drupal 7, vous pouvez également utiliser la requête MYSQL, si vous ne voulez pas charger tous les champs du fichier
Ceux-ci travaillent tous les deux pour moi dans Drupal 8:
// top of fileuseDrupal\file\Entity\File;useDrupal\Core\Url;// load the file object from some file id
$file_object =File::load(123);// way 1
$file_uri = $file_object->uri->value;
$file_url = file_create_url($file_uri);// way 2
$file_uri = $file_object->getFileUri();
$file_url =Url::fromUri(file_create_url($file_uri))->toString();
Réponses:
Drupal 7
Il s'agit d'un processus en deux parties, utilisant
file_load()
etfile_create_url()
Tout d'abord, vous devez transformer le $ fid en URI Drupal:
Maintenant, vous pouvez transformer cela en URL
file_create_url()
crée toujours une URL absolue, soit en utilisant le global$base_path
que vous avez défini, soit en utilisant celui que Drupal a deviné lors du bootstrap.la source
Dans Drupal 7, vous pouvez également utiliser la requête MYSQL, si vous ne voulez pas charger tous les champs du fichier
la source
Drupal 8
la source
Ceux-ci travaillent tous les deux pour moi dans Drupal 8:
la source