neděle 19. února 2012

Fotogalerie v Drupalu 7

Takže se mi konečně podařilo udělat v Drupalu 7 fotogalerii podle mých představ. Sice se všude dá najít spousta návodů, ale ty se zabývají převážně výsledným vzhledem a už ne způsobem, jak je na server efektivně dostat.

Moje představa byla, prostě nahrát přes FTP na server složku s názvem galerie a obrázky, a potom je při vytváření galerie najednou označit a přiřadit k dané galerii, jak to běžně funguje u specializovaných aplikací na fotogalerie.

S tím byl ale u Drupalu trochu problém. Existují moduly na připojené existujících souborů ze serveru k příspěvku, ale zas to nejde dělat hromadně.

Předpokládám, že to lze udělat i jinak a lépe, ale zatím jsem skončil u následujícího.

Potřebný seznam modulů:

  • Chaos tool suite
  • File (Field) Paths
  • Views
  • Plupload integration module
  • Colorbox
  • Libraries
  • Plupload widget
  • Token
Samotný Plupload je třeba stáhnout a rozbalit do sites/all/libraries podobně jako plugin pro Colorbox.

Takže základ je klasický, mám nový typ obsahu Fotogalerie, pole si lze navolit libovolně, já jsem zvolil klasickou kombinaci Titulek, Popis a Obrázek. Samozřejmě zde je nejdůležitější obrázek. Takže jeho nastavení za předpokladu funkčních výše uvedených modulů:

Styl obrázku - thumbnail
Povolené přípony souboru - zvolte dle pořeby
Ukázat File (Field) Path settings - tady je opět více možností nastavení. Nejlépe prostudovat dokumentaci. Já jsem ze pouze nastavil do sekce File Path hodnotu galerie/[node:title], takže pro každou galerii se mi v adresáři sites/default/files/galerie vytvoří podadresář podle názvu galerie. Funguje to naprosto spolehlivě i s češtinou a mezerami v názvech adresářů.
Do položky Název souboru jsem nechal pouze [file:name], což mi zachová původní název souboru, opět, zatím žádný problém s českými znaky nebo mezerami v názvech.

Dál jsem u tohoto políčka Obrázek nechal zapnout Popis a Název a neomezený počet hodnot. To je vše.

Typ widgetu by měl jít zvolit Plupload.

Ve správě zobrazení jsem nechal vypnul popisky pro oba elementy, formát Popisu je default a u Obrázku je zvolen formát Colorbox s nastavením:

Node image style: thumbnail
Colorbox image style: Original image
Colorbox gallery type: Per field in post gallery
Colorbox caption: Automatic


 Pokud je vše OK, mužeme nyní přidat obsah typu fotogalerie. Kromě titulku a popisku je teď vidět i možnost přidaní obrázků přes Plupload. 

 
Funguje i metoda Drag&Drop z lokálního počítače, nebo tlačítko Add. Lze vybrat pochopitelně více obrázků najednou. Poté je lze pomocí Upload nahrát a poté ještě doplnit popisky.

Co se týká samotného zobrazení detailu galerie jsem modifikoval styl obrázku pro thumbnail (Konfigurace >> Média >> Styly obrázků) na Změnit velikost se zachováním poměru stran a oříznout 100x100. A na každý element class="field-item", který obaluje jeden obrázek galerie aplikoval styl:


    floatleft;
    height100px;
    margin-right10px;
    padding-top20px;

To je ovšem už dost individuální, každý si to může opravit dle svých potřeb.

Toť vše o zobrazování obrázků se už postará Colorbox.

Já jsem si ještě vytvořil vlastní View na zobrazování stránky se seznamem galerií, ale jádro mého řešení je opravdu kombinace Colorbox, Plupload File (Field) Paths.

Případné dotazy do komentářů.

úterý 23. srpna 2011

Drupal: Migrace z verze 6 na verzi 7 - Část první

Provozuji několik webů, hlavně tedy svůj vlastní ;-) na redakčním systému Drupal a to tuším do verze 4.7. Začal jsem s ním hlavně proto, že jsem přestával mít čas na nějaký velké hraní si s HTML a CSS a vůbec klasickou tvorbou webu. To se dosud nezměnilo, takže systém využívám v podstatě jen k rychlému poskládání webovek z již připravených komponent a za využití většinou jen minimálně modifikované grafické šablony.

Jelikož jsem v současnosti potřevobal udělat pár nových webů a jelikož je aktuální Drupal ve verzi 7.7 (v době psaní příspěvku) pochopitelně jsem jej nasadil na nové weby a nevypadal vůbec zle (na první pohled - na ten druhý už to tak růžové nebylo, ale o tom jindy) a tak jsem se rozhodl pokusit se o upgrade nějakého stávajícího, který spokojeně funguje na Drupalu 6. Volba padla ma soukromé rodinné stránky, které jsou již skoro 2 roky neaktualní a případné odstavení napáchá minimum škody.

Tedy začněmež. Výchozí stav byl - nejaktulálnější Drupal verze 6, nějaké ty celkem běžné moduly a lehce modifikované téma vzhledu (foliage). Postup přesně dle návodu (tedy souboru UPGRADE.txt v rozbaleném Drupalu 7). Po zadání obligátního http://domena.com/update.php jsem celkem s klidem ignoroval hromadu Warning hlášek v hlavičce stránky a pokračoval klasickým Continue. Po dokončení procesu upgrade databáze začala teprve ta správná zábava.

Takže první kolo dopadlo následovně:

The following updates returned messages
user module
Update #7000

    User passwords rehashed to improve security

Update #7002

    Migrated user time zones

node module
Update #7008

    Failed: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'weight' in 'order clause': SELECT r.rid AS rid, r.name AS name FROM {role} r INNER JOIN {role_permission} p ON r.rid = p.rid WHERE (p.permission = :db_condition_placeholder_0) ORDER BY weight ASC, name ASC; Array ( [:db_condition_placeholder_0] => administer nodes ) in user_roles() (line 2741 of /home/www/ciganek.cz/www/modules/user/user.module).

filter module
Update #7003

    Failed: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-filter_autop' for key 1: INSERT INTO {filter} (format, module, name, weight, settings, status) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5); Array ( [:db_insert_placeholder_0] => 1 [:db_insert_placeholder_1] => filter [:db_insert_placeholder_2] => filter_autop [:db_insert_placeholder_3] => 2 [:db_insert_placeholder_4] => a:0:{} [:db_insert_placeholder_5] => 1 ) in filter_update_7003() (line 334 of /home/www/ciganek.cz/www/modules/filter/filter.install).

system module
Update #7007

    Inserted into {role_permission} the permissions for role ID 1, Inserted into {role_permission} the permissions for role ID 2, Inserted into {role_permission} the permissions for role ID 3

Update #7061

    Upload module has been migrated to File module.

Update #7067

    Failed: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'weight' in 'order clause': SELECT r.rid AS rid, r.name AS name FROM {role} r INNER JOIN {role_permission} p ON r.rid = p.rid WHERE (p.permission = :db_condition_placeholder_0) ORDER BY weight ASC, name ASC; Array ( [:db_condition_placeholder_0] => access administration pages ) in user_roles() (line 2741 of /home/www/ciganek.cz/www/modules/user/user.module).


Tedy celkem 3 Failed aktualizace. Vyřešit problém s aktualizací modulu user a system se podařilo celkem brzo pomocí dotazu do fóra. Zájemcům mohu zaslat modifikovaný system.install a user.install. Zajímavé je, že jsem musel tyto upravené soubory použít ve všech verzích Drupalu - 7.2, 7.4 i 7.7 - předpokládám, že chyba je tedy spíš u mne, protože při čisté instalaci D7.7 nebo update z 7.4 na 7.7 žádný problém není.

Horší to bylo s tím filtrem. Nevím uplně přesně k čemu ta tabulka je, každopádně jsem to řešil na fóru snad několik měsíců.

Zjednodušeně: chybová hláška říká, že při vkládání dat do tabulky filter došlo k poruše integrity - tedy vkládaný záznam nevyhovuje nějakému unikátnímu indexu, tedy ještě jinak, záznam obsahuje nějakou kombinaci nějakých hodnot, které v tabulce již jsou a tato kombinace je definována jako unikátní a tedy se nesmí opakovat.

No a vzhledem k tomu, že se chyba objevila zřejmě při převodu starých dat do nově vytvořené tabulky, tak bylo zjištěno (pochopitelně ne mnou, ale někým kdo tomu opravdu rozumí), že mi opravdu v tabulce filter chyběl unikátní index fmd (sloupce format, module a delta).

Řešení pak bylo nasnadě. Celkem drze jsem vymazal "duplicitní" záznamy a index vytvořil. POZOR, při novém pokusu o upgrade musíte vycházet znovu z původní databáze, znovuspuštění update.php způsobí úplně jsou chybu ;-)

Takže po několika měsících zkoušení a rezignovaných návratu k Drupalu 6 jsem po konečně bezchybném průběhu procesu upgrade uviděl následující administrační stránku Drupalu verze 7:



A jak sami vidíte, to již dávalo naději na snadné dokončení průběhu migrace.
Ale o tom zas příště.