Isshou filter - obrázky a flash v Drupalu

S Drupalem se bavím sice jen chvíli, ale i tak jsem už prošel a vyzkoušel spoustu modulů, které by se mi mohly na tomto webu hodit. Zatím jich používám jen pár a to hlavně proto, že ne všechny mi funkčně tak úplně vyhovují. Řešil jsem hlavně vkládání obrázků a flash videa.

Obrázky

Než se dostanu k vlastním filtru, zmíním se o několika modulech, které jsem vyzkoušel a které mě vedly nakonec k tomu, že jsem si vytvořil modul, který mi vkládání obrázků usnadní tak, jak se mi to hodí nejvíc. Nejprve k obrázkům… vyzkoušeno mám ImageField, Image, Image assist a Inline. Svým způsobem sem ještě patří i ImageCache.

ImageCache se o zobrazování obrázků, na rozdíl od ostatních jmenovaných modulů, přímo nestará. Na starost má vytváření obrázků z daného originálu změnou rozměru nebo použitím vybraného (spíš jednoduchého) filtru. Stačí jen vytvořit profil, který bude udávat parametry nového obrázku a před cestu vedoucí k němu z adresáře files dopsat navíc imagecache/název_profilu. Pokud se v této cestě žádný vytvořený obrázek zatím nenachází, bude vytvořen automaticky. Změnou jakéhokoliv parametru profilu dojde ke smázání všech obrázků, které se v něm do té doby vytvořily. Asi první důvod, který se nabízí, proč využít tento modul, je vytvoření zmenšených náhledů na obrázky třeba za účelem vytvoření galerie. Některé další moduly i právě z tohoto důvodu ImageCache přímo podporují. Jinou variantou, a jedinou, kerou zatím využívám sám, je definování relativních rozměrů obrázku vzhledem k šířce stránky – definujete profil, ve kterém určítě maximální šířku obrázku na stránku a všechny obrázky zobrazíte přes něj. Tím máte zjednodušenou práci do budoucna například při změně tématu (vzhledu) celého webu, při kterém může dojít právě ke změně šířky stránky. Stačí pak jen nastavit v příslušném profilu ImageCache novou šířku, tím se smažou všechny dosud vytvořené obrázky a při prvním pokusu o jejich nové zobrazení se vygenerují v nových požadovaných rozměrech. Originály samozřejmě musí být po celou dobu k dispozici. To je možná jediná „nevýhoda“ toho modulu, zvlášť v případě, kdy nemáte pro své stránky dostatek prostoru. Tento modul jsem se rozhodl použít za každou cenu, takže jsem hledal nějaký vhodný doplněk.

ImageField je modul založený na CCK. To mimo jiné znamená, že je potřeba definovat nové pole typu obrázek, ve kterém bude zobrazen. Zvlášť jdou nastavit parametry pro zkrácený úvodník a zvlášť pro celý publikovaný text. Těmi parametry mám na mysli i přímo profil z ImageCache. Bohužel si s CCK zatím moc nerozumím a podle toho, co jsem se dočetl, není dost dobře možné bez úpravy kódu přesně určit, kde se má CCK pole zobrazit (kromě pořadí daného při jeho definování) a v případě obrázku nastavit obtékání textu a další vlastnosti. Tím se pro mě (zatím) stává nepoužitelným.

Modul Image řeší obrázky pro mě dost nešikovným způsobem – vytvářní vlastní typ obsahu Image, do kterého je nutno obrázek nejprve vložit. Na tento obsah se lze pak z jiného typu obsahu odkázat. Nepřišel jsem ani na způsob, jak zobrazit více obrázků najednou, protože do obsahu Image lze nahrát jen jeden… takže ani tudy cesta nevede.

Image assist už vypadá o něco lépe. Umožňuje vkládat obrázky metodou vlastních tokenů v textu a ty se pak vždy vloží na místo, kde je příslušný token. Obrázek se obsahu vloží nejprve jako příloha (kterou je vhodné odstranit ze seznamu viditelných pro čtenáře) a na tuto přílohy se odkážete právě Image assist tokeny.

[img_assist|nid=2|title=My title|desc=My description|align=right|width=200|height=150|link=url,http://www.google.com]

Zatím to zní skoro skvěle, ale… nějaké „ale“ muselo přijít. Obrázky se vybírají z Image obsahu vytvořených Image modulem. Při tom lze specifikovat několik vlastností, mimo jiné (nutně) i profil, ve kterém bude obrázek zobrazen (Image obsahuje profily podobně jako ImageCache). Nevýhodou tohoto řešení je to, že parametrem v Image assist tokenu není profil (s definovanými rozměry, které by se daly v administraci změnit), ale přímo rozměry tohoto profilu… toto řešení vůbec nechápu. Při změně vlastnosti profilu se změny rozměrů samozřejmě samy od sebe nezmění, takže nezbývá, než vše upravovat ručně. Takže ani Image assist nebude tou pravou volbou.

Inline pracuje více méně podobně, jako Image assist. Nevyužívá však jako zdroj obrázků Image modul, ale vystačí si s klasickým Upload modulem. Obrázky se do obsahu vkládají opět přes tokeny, ve kterých je definováno, která příloha (tj. obrázek) se má na tom daném místě zobrazit.

[inline_upload|file=filename.ext|title=Any title]

V administraci modulu lze navíc nastavit, který profil ImageCache má být využíván. To je na jednu stranu dobrá zpráva, na druhou už tolik ne, protože tento profil platí vlastně globálně pro úplně všechny obrázky. Navíc umístění obrázku lze definovat CSS stylem opět pro všechny najednou (tj. všechny obrázky budou zarovnány vždy stejně apod.). Myslím, že se pracuje na dalším parametru tokenu, který by měl umožňovat definovat profil ImageCache. Navíc bych ale uvítal možnost definovat pro každý obrázek zvlášť i CSS styly třeba pro případ, kdy bych chtěl zobrazit obrázky vedle sebe. Modul vypadá slibně, ale zatím to nevyhrál ani tento…

Video

A jak je na tom video? Tady se mi podařilo najít FlashVideo, FLV Media Player a Video moduly.

Modul FlashVideo vypadá už na první pohled docela pokročile. Umožňuje zobrazit video i v CCK polích, konvertovat videa do FLV formátu vhodného pro přehrávání ve flash přehrávači a pár dalších věcí. „Oficiálně“ podporuje dva přehrávače – Dash Media Player a JW Player . A jak se tento modul používá? Při tvorbě obsahu jsou ke stránce přidány další prvky pro nahrání videa, které se při tom automaticky zkonvertuje. Videí lze nahrát několik a do stránky vkládat opět s pomocí tokenů.

[video: index=2: width=320: height=240]

Parametrů lze specifikovat víc, než jsem zde uvedl. Kromě toho automaticky vytváří náhled na video. Co mi na tomto modulu nevyhovuje? Třeba nutnost konverze. Ta je totiž prováděna ffmpeg aplikací, která by měla být již dostupná na serveru. To se Vám podle mě ve většině případů, kdy máte stránky na webhostingu, nejspíš nepodaří. Naštěstí to příliš nevadí, konverze se prostě jen neprovede. Znamená to však, že nahrávat můžete jen FLV soubory, které pochopitelně další konverzi nevyžadují. Nebudou se ovšem generovat ani náhledy. Dalším negativem je pro mě nemožnost specifikovat více parametrů v tokenu, například délku, protože se pak v některých případech nezobrazuje ve flash přehrávači celková délka přehrávaného videa. To lze naštěstí obejít (nemám vyzkoušeno) vložení meta dat přímo do videa. Modul by se dal nakonec použít, ale není to úplně ono.

Přímo šitý na míru JW Playeru je FLV Media Player. Díky tomu můžete nastavit snad opravdu cokoliv, co na tomto přehrávači nastavit lze a dokonce i vytvořit profily s těmito nastaveními. Další výbornou věcí je to, že přímo při vytváření článku můžete z takového profilu vycházet a změnit jen parametry, které je potřeba upravit. Kámenem úrazu mi přišlo nemožnost vložit do článku více než jedno video… můžete totiž nastavit parametr cestu k souboru jen jednou, jako ostatně všechny ostatní parametry. Nemusí se sice jednat přímo o soubor, ale třeba i o playlist, ale přehrávač bude v článku vždy jen jeden. Může to být sice postačující, ale pro mě to bylo spíš překážkou. V současné době víc jak jeden nevyužiju, ale nechci se tím v budoucnu omezovat. Ale komu jeden přehrávač postačí, je to podle mě skvělá volba.

Posledním modulem, který jsem vyzkoušel, byl Video modul. Ten shrnu jen krátce, protože už první věc, která mě zarazila, byla ta, že videa se vkládají pouze do speciálního typu obsahu. Tím pro mě tento modul skončil :) .

Isshou filter

Takže co je vlastně Isshou filter? V této chvíli čistě soukromý modul jako vstupní filtr, který usnadňuje zobrazování obrázků a zanedlouho i flash videa. V tuto chvíli dělá vlastně podobnou práci jako modul Image assist, ale je pro mě vhodněji nastavitelný.

[Isshou Lightbox2InTexy(1image, obsah/software/synchronizace/synchronizace-souboru-online/dropbox-folder.png, border: 1px solid black)]

Už z názvu funkce jde asi poznat, že výstupem bude kód pro Lightbox2, který bude nejprve zpracován Texy modulem. Prvním parametrem funkce je preset pro ImageCache, díky kterému může modul sestavit cestu k imagecache adresáři přímo s názvem profilu. Druhým parametrem je pak cesta k obrázku vycházející z adresáře images a posledním parametrem je CSS styl elementu img. Výsledkem je odkaz tvořený obrázkem v imagecache/název_profilu/images na obrázek nacházející se v images asi v této podobě:

"[* /sites/isshou.org/files/imagecache/1image/images/obsah/software/synchronizace/synchronizace-souboru-online/dropbox-folder.png .[img-lightbox]{border: 1px solid black} *]":/sites/isshou.org/files/images/obsah/software/synchronizace/synchronizace-souboru-online/dropbox-folder.png

Ve výsledném kódu je navíc automaticky doplněna třída img-lightbox, kterou si Lightbox2 identifikuje obrázky, které ma seskupovat. Inspirací pro toto řešení mi byly moduly Custom Tokens a Token Filter, které jsem do té doby používal. Custom Token umožňuje definovat vlastní tokeny, ovšem „bez parametrů“, jejichž výstupem je libovolný PHP kód. Měl jsem takto definovanou alespoň cestu k imagecache a images. Token Filter se pak při generování obsahu stará o zpracování PHP kódu pro tyto tokeny.

Něco podobného mám ještě v plánu pro přehrávání flash videa, kde parametry budou cesta k souboru a rozměry přehrávače. Podle potřeby pak i doba přehrávaného videa, pokud nepůjde doplnit meta daty přímo do videa. Tím se ušetří, stejně jako u obrázků, nutnost psát větší mnoství „kódu“ při tvorbě článku. Dalším výhodu je navíc to, že například při změně flash přehrávače nebude potřeba upravovat všechny články, ve kterých se přehrávač nachází, ale změní se jen kód v modulu.

Toto (moje :) ) řešení mi přijde jednoduší a takové použitelnější, než předchozí jmenované. V PHP jsem sice do této doby nedělal, naštěstí kód modulu je velmi krátký. Přesto mi nějakou tu hodinku zabral, včetně vytváření regulárního výrazu (kdybych uměl v PHP, odhadl bych vývoj modulu tak na 15 minut). Veřejně je tento modul zatím nepoužitelný hlavně z toho důvodu, že generování cest je na pevno dáno přímo v modulu. Tím mám na mysli prefix před cestou k obrázku. Řešení je více méně jednoduché – administrační rozhraní modulu, kde bude políčko pro vložení cesty k obrázkům. Do toho se zatím pouštět nebudu, snad jen v případě, že by byl o modul čirou náhodou zájem, nebo až se budu opravdu hodně nudit…