jak uzyskać bezwzględną ścieżkę do plików opartych na FID
13
Jak mogę uzyskać bezwzględną ścieżkę do pliku opartego na FID? Przepraszam, jeśli to powtórzenie, przeprowadziłem wyszukiwanie, ale nie mogłem znaleźć odpowiedzi.
Najpierw musisz zmienić $ fid w identyfikator URI Drupala:
$file = file_load($fid);
$uri = $file->uri;
Teraz możesz zmienić to w adres URL
$url = file_create_url($uri);
file_create_url()zawsze tworzy bezwzględny adres URL, albo przy użyciu $base_pathzdefiniowanego globalnie , albo przy użyciu tego, który Drupal odgadł podczas ładowania.
Dziwię się, że musisz załadować plik tylko po to, aby uzyskać ścieżkę, wydaje się marnowaniem zasobów.
Russ
2
@Russ Ładuje obiekt pliku, a nie sam plik. Możesz również wykonać komendę db_query, aby uzyskać identyfikator URI, ale staram się używać interfejsu API tak często, jak to możliwe.
mpdonadio
Dzięki, pomyślałem, że właśnie pomyślałem, że będzie czysta funkcja, która zwróci ją w jednym kroku. Może coś do rozważenia w drupalu 8.
Russ
1
W twoim przykładzie masz „field_load ($ fid)”, powinno to być „file_load ($ fid)”.
Steve Mulvihill,
2
@ SteveMulvihill Wow, nice catch. Cztery lata i 33 głosy i nikt tego nie zauważył.
// 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();
Odpowiedzi:
Drupal 7
Jest to dwuczęściowy proces, wykorzystujący
file_load()
ifile_create_url()
Najpierw musisz zmienić $ fid w identyfikator URI Drupala:
Teraz możesz zmienić to w adres URL
file_create_url()
zawsze tworzy bezwzględny adres URL, albo przy użyciu$base_path
zdefiniowanego globalnie , albo przy użyciu tego, który Drupal odgadł podczas ładowania.źródło
Drupal 8
źródło
W Drupal 7 możesz także użyć zapytania MYSQL, jeśli nie chcesz ładować wszystkich pól pliku
źródło
Oba działają dla mnie w Drupal 8:
źródło