Entityform: jak na lepší formuláře v Drupalu (+ videnonávod)

Pokud budeme mluvit o formulářích a Drupalu, obvykle skončíme u modulu Webform. Jenže při pokročilejším používání zjistíte, že ten má spoustu nevýhod. Jako zajímavá alternativa se nabízí modul Entityform.

Reklama

Modul Webform mám rád. Stále jej používám na většině webů, které stavím. Je odladěný, existuje pro něj řada doplňků, snadno se používá. Vytvoříte obsahový uzel, přiřadíte k němu formulářová políčka, data od lidí sbíráte do Excelu a případně si je necháváte odesílat na mail.

Nevýhodou Webformu je však jeho odlišný přístup k práci s políčky. Zřejmě z historických důvodů využívá vlastní implementaci formulářových polí na rozdíl od zbytku Drupalu a dalších modulů, které staví na entitách a formulářových polích pro ně. Z toho vyplývá, že nemůžete využívat výhod, které to nabízí.

Když si tedy do Drupalu nainstalujete například modul Link přidávající políčko pro zadávání webové adresy, nebudete jej moci automaticky použít ve formulářích tvořených Webformem. Podobně pole pro telefon či adresu, a to už vůbec nemluvím o „vícepolíčkových“ polích, které jste si schopni sami sestrojit díky Field collection.

Jelikož Webform nepoužívá drupalovské entity, tak vůbec není jednoduché dostat data z něj odeslaná například do Views. Chcete-li údaje z formuláře zobrazovat v nějakém výpisu, musíte buď sáhnout přímo do databáze, nebo použít poměrně složité řešení na propojení Webformu a Views. Navíc není úplně komfortní.

Entityform jako vylepšené formuláře pro Drupal

Tohle všechno výše uvedené však řeší modul Entityform. Funguje podobně jako Webform, tedy vytvoříte si úvodní nadpis a text k formuláři, přidáte k němu políčka a data z formuláře se vám pak ukládají do databáze.

Typy políček v tomto formuláři vycházejí z toho, co máte momentálně ve svém Drupalu dostupné. Propojení s Views je bez problémů. O něco složitější je konfigurace mailů, které mají odcházet po vyplnění formuláře. Na druhou stranu se zde využívá spojení s modulem Rules, takže při troše snahy jste schopni nastavit flexibilnější pravidla pro mailování.

Tvorba formuláře s Entityform krok za krokem

Tím je formulář hotov. Zobrazíte si jej na adrese, kterou jste zvolili v položce Nastavení URL > Submit URL alias v základním nastavení formuláře při jeho vytváření. Pokud si ji nepamatujete, najdete ji v Struktura > Entityform Types pod odkazem Submit link. Výsledek může vypadat například takto:

Drupal a Entityform

Tip: Často používám umístění formuláře do nějakého bloku, který mohu zobrazit na libovolné jiné URL adrese u jiného obsahu. Tuto funkcionalitu vám doplní modul Entityform block, aktivaci formuláře coby bloku najdete při jeho vytváření nebo editaci ve vertikálních záložkách.

Prohlížení dat z formuláře

Údaje, které lidé do formuláře napsali, si můžete prohlédnout poté, co použijete odkaz Uložené výsledky v administrační části Struktura > Entityform Types. Uvidíte zde jména uživatelů, kteří formulář odeslali. Po klepnutí na odkaz Zobrazit pak i konkrétní údaje.

K dispozici je i tabulkové zobrazení v horní části administračního přehledu. Data jsou pak zobrazena v následující podobě:

Drupal a Entityform

Odeslání e-mailu po vyplnění formuláře

Jestliže jste aktivovali i součástku, která slouží k odesílání e-mailového upozornění na vyplněný formulář, postupujte k dokončení tohoto nastavení následovně:

Těch pravidel pro mailování si můžete přidat opakovaně celou řadu. Pokud umíte pracovat s modulem Rules a chcete se podívat trochu hlouběji, jak jsou tato pravidla definována, případně si vytvořit úplně nové na míru, koukněte se do administrační části Nastavení > Postup práce > Entity Rules a přepněte se tam na záložku Entityform Submission Rules.

Zobrazení dat z formuláře ve Views

Vzhledem k tomu, že Entityform, jak název napovídá, pracuje s entitami v Drupalu, není problém data z formuláře zpracovat pomocí Views. Vyzkoušíme si vytvoření nového administračního přehledu pro konkrétní formulář s využitím AJAXu a uživatelského filtrování.

Tolik tedy k vytváření formulářů pomocí modulu Entityform, odesílání e-mailového upozornění a zobrazování odeslaných dat pomocí modulu Views. Pokud dáte přednost videonávodu před stručným popisem, můžete si jej pustit z mého YouTube kanálu.

Na videu ukazuji i využití modulu Address Field. Entityform pro Drupal 8 funguje podobně, jen se jmenuje EForm.

Reklama

Komentáře

Dobrý den,
pokusil jsem se o formulář by Entityform pro následující účel:
Mám dva tucty provozoven, každá má svou stránku - uzel. Každá má otevírací dobu, která může mít občas nějaké omezení. Kolega řešil kdysi toto zobrazováním samostatného políčka - Omezení otevírací doby. To je ale pro provozní, kteří se o doplňování těchto informací starají, dost nepohodlné.
Chci, aby měli práva ne pro úpravu jednotlivých stránek, ale jen pro odeslání omezení z jednoho místa stránek po přihlášení.
Proto mám formulář se dvěma poli:
1 - zaškrtávací políčka pro výběr konkrétních provozoven (obsahující odkaz na konkrétní uzel)
2 - textové pole pro zadání omezení otevírací doby
Odeslaný formulář zobrazuji pomocí Views v bloku - v patičce stránek jsou vidět všechna omezení všech provozoven, potud vše super.
Jak docílím toho, aby se u konkrétní provozovny, u konkrétního uzlu, zobrazil navíc blok s omezením, týkající se dané provozovny? Tudíž nahradit původní pole s omezením provozní doby přímo na konkrétní stránce. Napadlo mě u bloku použít tu možnost - kde PHP kód vrátí TRUE. Ale nejsem expert.
A druhá část mé otázky se týká nastavení časové platnosti formuláře. Omezení provozovny samozřejmě platí pro konkrétní den či dny, poté bych rád informaci automaticky svěsil. U uzlů používám Scheduler, u Webformu, ani Entityformu jsem takovou možnost nenalezl.

Dobrý den. Nastavení platnosti bych asi vyřešil tím, že budou ještě vyplňovat, od kdy do kdy omezení platí. Prostě přidáte do formuláře políčko s datem. Ve Views pak jen budete filtrovat aktuální záznamy.

Co se týče zobrazení konkrétní provozovny, tak si myslím, že cestou je použití kontextového filtru ve Views. Vezmete políčko z formuláře a v kontextovém filtru nastavíte, že musí odpovídat aktuálně zobrazenému uzlu prodejny. Mělo by to tím pádem jít i bez psaní PHP.

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Dobrý den, děkuji za nakopnutí, objevil jsem sílu kontextuálních filtrů, ač mi to chvíli trvalo. Teď to funguje podle mých představ.
Ještě se musím poprat s tím svěšováním na základě data, takže vzhůru hlouběji do skládačky jménem Drupal.
Díky!

Přidat komentář