poniedziałek, 4 maja 2015

Drupal: dodawanie plików do systemu przez url

Coraz częściej w sieci napotykamy formularze, które dopuszczają dodawanie plików zarówno w sposób tradycyjny jak również poprzez url. Niektóre prowadzą wyłącznie do zapisania tego zewnętrznego adresu, część pozwala na stworzenie 'lustra'.


Stworzenie we własnym module w systemie Drupal rozwiązania drugiego typu nie jest trudne. Generalnie wystarczy nam jedna funkcja aby osiągnąć nasz cel.

$file = system_retrieve_file($image_uri, 'public://files', TRUE);

Funkcja system_retrieve_file znajduje się w module system i jest przez CMS Drupal wykorzystywana na przykład do pobierania paczek modułów. Funkcja przyjmuje cztery całkiem przydatne parametry:
  • url
  • miejsce docelowe
  • managed
  • replace

Pierwsze dwa nie pozostawiają wątpliwości. Parametry trzeci i czwarty są dość istotne i bardzo przydatne. Parametr 'managed' to flaga wskazująca, czy system Drupal ma zająć się zarządzaniem plikiem. Zmienia to 2 rzeczy. Po pierwsze plik zostaje dodany do systemu i operujemy na nim tak, jak po użyciu funkcji file_load. Po drugie funkcja system_retrieve_file zwróci obiekt implementujący FileInterface, a nie tylko wartość boolowską wskazującą powodzenie.

Ostatni parametr wskazuje, co ma się zdarzyć jeśli plik istnieje. Nazwy stałych do wykorzystania tutaj są łatwe do zrozumienia:
  • FILE_EXISTS_REPLACE - zamiana istniejącego pliku
  • FILE_EXISTS_RENAME - zmiana nazwy poprzez dodanie numeru aż do uzyskania nazwy unikalnej
  • FILE_EXISTS_ERROR - funkcja zwraca FALSE, a w systemie nie ma żadnej zmiany
Domyślnie ostatni parametr korzysta z wartości (...)RENAME. Dzięki temu mechanizm jest bardzo wygodny. Szczególnie, że plik jest identyfikowany tylko po nazwie.

Brak komentarzy:

Prześlij komentarz