Jak automaticky třídit nahrávané soubory a obrázky v Drupalu

Několikrát za sebou jsem v poslední době dostal dotaz na to, jak se lze vyhnout nahrávání všech obrázků a souborů z nějakého pole v Drupalu do jediné složky. Opravdu k tomu nepotřebujete žádný speciální modul.

Reklama

Drupal 7 vám umožňuje i ve výchozí instalaci bez nějakých doplňkových modulů nastavit složku, do které se budou nahrávat obrázky či jiné soubory v obrázkovém nebo souborovém políčku u editace článků nebo jiného obsahu a entit.

Je to sice pokrok proti předchozí verzi, kde jste bez modulu FileField Path nemohli nastavit ani základní cestu a vše se nahrávalo do sites/default/files, ale stále jen určujete maximálně podsložku v rámci hlavního souborového umístění.

V čem je problém? Není dobré nahrávat velké množství souborů do jediné složky. Nedávno jsem koukal na web s 200 000 soubory v jediné složce. Jen samotné zobrazení obsahu této složky trvá několik minut, nehledě na to, že se to pak nelíbí ani aplikacím, které mají s něčím takovým pracovat.

Přestože v Drupalu 7 modul FileField Path na roztřídění souborů nepotřebujete a odstranění diakritiky zajistí modul Transliteration, pro pohodlné roztřídění něco doinstalovat musíte. Pro dynamicky vytvářené složky a podsložky vám velmi dobře poslouží modul, od kterého byste to možná nečekali. Token.

Jak nastavit tokeny pro automaticky vytvářené složky souborů

Modul Token zprostředkovává v Drupalu speciální nahrazovací vzorky, za které jsou v příslušných situacích nahrazeny nějaké skutečné hodnoty. Například pomocí tokenu [node:title] říkáte, že tam, kde je možné tento token aplikovat, se má použít název aktuálního uzlu.

A podobným způsobem lze tokeny využít i při nastavování cest k souborům, které budou nahrávány přes souborové nebo obrázkové políčko.

Po instalaci modulu Token tedy jděte do administrační sekce Struktura » Typy obsahu » Článek » Obrázek nebo do jiného takového pole a najděte v jeho nastavení položku Adresář souborů. Zde zadejte cestu, kam se soubor nahraný přes toto pole v rámci složky sites/default/files uloží.

Mým oblíbeným tříděním je umístění ikonek článků do podsložky ikonky, ve které vznikne vždy složka s označením aktuálního roku a v ní ještě složky s čísly aktuálního měsíce, ve kterém je soubor nahráván. Pro takové třídění stačí použít tuto cestu s tokeny: ikonky/[current-date:custom:Y]/[current-date:custom:m].

Chcete-li do cesty zabudovat ještě název článku, pak stačí lehká modifikace: ikonky/[current-date:custom:Y]/[current-date:custom:m]/[node:title].

Jinou možností, kterou jsem nedávno nastavoval, je tvorba cesty na základě nějakého jiného speciálního pole v editaci článku. Do něj si může uživatel zadat vlastní umístění, například pro roztřídění obrázků v nějaké galerii. Text z políčka pojmenovaného strojově folder pak pomocí tokenů zabudujete takto galerie/[node:field_folder]/[node:title].

Token vám nabízí spoustu dalších možností, jak nahrazovací vzorky využít pro třídění souborů do složek. Stačí využít jeho proklikávací rozhraní (viz nápověda přímo v Drupalu, stránka admin/help/token). Uvidíte, že do cesty nemusíte zabudovat jen aktuální datum a vlastnosti editovaného článku, ale třeba i vlastnosti uživatele a další věci.

Rozklikávací tabulka s dostupnými tokeny

Tip: Věděli jste, že pomocí nahrazovacích vzorků z modulu Token můžete nastavit dynamickou změnu nadpisu bloků na webu?

Tagy: 

Reklama

Komentáře

To je zajímavé , to se mi líbí a bude se mi to hodit. Funguje tohle
ikonky/[current-date:custom:Y]/[current-date:custom:m]/[node:title] i při zakládání nového nodu , nebo až teprve při editaci? Když nahrávám soubor jako přílohu k nodu , tak ještě není v databázi uložený title .

Pokud se to ještě nezměnilo od doby, kdy jsem to zkoumal naposledy, tak se soubor dá do sites/default/files a po uložení se přesune.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

hmmmm, tak jsem se nyní díval do 7.31 a token [node: ] tam vůbec není. Je to docela škoda, protože takhle je velmi nepohodlné používání souborů přiložených i nodu, spolu s IMCE editorem .....

Proč by v Drupalu 7.31 nebyl token [node:title]? Bez toho by použití modulu Token bylo v podstatě k ničemu. Používám denně.

Nebo nerozumím popisu, co říkáte.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Mám typ obsahu, ve kterém je pole "nahrávka" (soubor mp3) a pole "datum nahrávky". Přílohy chci třídit do složek podle roku nahrání. Podle vašeho návodu jsem zadala nahravky/[node:field_nahravka_datum:custom:Y] , ale drupal mi píše, že token je invalidní. V čem je chyba? Nechce vzít nic typu "[node:xxxxx]". Je to tím, že uzel ještě neexistuje? Poradíte mi něco?

Hm, koukal jsem se na web, kde mám políčka pro zadání data a Token mi ten nahrazovací vzorek nabízí s pomlčkami, nikoli s podtržítky. Zkuste to přepsat a uvidíte.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

1) Situace se trochu posunula. Rozhodla jsem se, že bude lepší datum nahrávky vůbec nezadávat, ale místo toho použít "Node Reference" na akci, kdy byla nahrávka pořízena (typ obsahu "akce" obsahuje pole s datem konání akce). Ale úspěšná jsem nebyla s žádnou variantou tokenu, ani s podtržítky, ani s pomlčkami. Nebere to žádný token typu "[node:xxx]".
2) Problém možná souvisí s tím, že "Available tokens" u nastavení pole s nahrávkou nabízí jen velmi krátký seznam dostupných tokenů (Aktuální uživatel, Current date, Current page, Informace o webu, Random) a já zadávám tokeny ze seznamu všech tokenů na /admin/help/token, ale některé z nich v "Available tokens" nejsou.
Skutečně lze použít jen tokeny z nabídky "Available tokens"? Je možné tuto nabídku nějak rozšířit?

Zkuste nahodit modul FileField Paths, má o něco více možností.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

OK, funguje. Modul FileField Paths pomohl. A používám variantu tokenu s pomlčkami.

Dobrý den,

nevíte, jak to udělat s obrázky uživatelů v profilech (avatar)? Hodnotu si to bere z nastavení účtu (admin/config/people/accounts) a tam to pole tokeny nebere. Do nastavení pole obrázku v profilu (admin/config/people/accounts/fields) se nedá dostat - nemá nastavení. Navíc si to ty obrázky ukládá pod názvy jako picture-1-1424571146.jpg.
Děkuji Ivo Musil

Dobrý den, zkuste modul File (Field) Paths.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Jenže k nastavení uživatelského obrázku v profilu uživatele (to je systémové pole) se nedá dostat, takže to nemohu nastavit ani modulem File (Field) Paths. Mluvím o tom obrázku, který je součástí standardní registrace a uživatelského profilu. FFP mi umožňuje nastavení path jen v nastavení konkrétního pole v konkrétním typu obsahu, nikoliv globálně (např. pro jakýkoliv obrázek na webu). Pole pro uživatelský obrázek nemá přístupné nastavení (upravit v admin/config/people/accounts/fields) a hodnotu path pro ukládání si to bere z nastavení účtů (admin/config/people/accounts) sekce Přizpůsobení, pole Adresář pro obrázky. A tam to tokeny nebere. (Zkusil jsem to a pak jsem to musel opravit až v databázi, protože, i když jsem to změnil v nastavení, pořád si to pamatovalo tu starou hodnotu a tvrdošíjně mně to nadávalo, že cesta users/foto/[user:name] není platná.)

Hm, tak to se bojím, že asi neporadím.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Vypadá to, že řešením je nepoužívat systémový obrázek, přidat k editaci (příp. registraci) normální Image field, tam nastavit tokeny, a použít modul User picture field. Ten funguje jak v systémovém profilu, tak i v Profile2, zdá se. Ale je to zase další modul.

Přidat komentář