Zůstaneme-li u jádra redakčního systému Drupal, pak najdeme dvě věci, které se starají o spouštění různých akcí na základě různých událostí v systému. Jsou jimi modul Trigger a sekce Actions. S jejich pomocí můžete například poslat zprávu poté, co v systému přibude nějaký nový článek nebo komentář.
Tip: Jak pracovat s výchozími akcemi ukazuji v článku Drupal – jak na oznámení o novém obsahu a komentářích na e-mail.
V momentě, kdy ale budete chtít například sofistikovanější rozesílání upozorňovacích mailů, pak vám výbava jádra Drupalu stačit nebude. Představte si, že byste chtěli poslat mail s upozorněním na nový obsah na webu skupině lidí podle toho, do jaké kategorie bude onen obsah spadat.
To je poměrně častý scénář. Máte například inzertní web, do kterého uživatelé vkládají inzeráty. O každou inzertní rubriku se stará nějaký správce, který inzeráty schvaluje a zveřejňuje. Určitě nechcete, aby všichni správci dostávali upozornění na všechny inzeráty. Chcete, aby dostávali maily pouze o nových inzerátech v jejich rubrice.
Jiný příklad: máte na webu diskuzní fórum a máte pro něj několik moderátorů, kteří sledují příspěvky v jednotlivých sekcích fóra. A opět chcete, aby svoje upozornění dostali jen pro případ, že nový záznam přibude právě v sekci, kterou mají na starosti.
Právě podobné úkoly jsou jako stvořené pro modul Rules. Ukážeme si jej na druhém příkladu krok za krokem. Pro následující návod si tedy nainstalujte modul Rules, zapněte v Drupalu diskuzní fórum a přidejte do něj několik fór.
Sofistikovaná upozornění na nové příspěvky ve fóru
Přejděte do administrační části Nastavení > Postup práce > Rules. Zde klikněte na odkaz Přidat pravidlo. Nazvěme jej například Fórum – obecná diskuze. Z rozbalovací nabídky React on event vyberte, na co má nové pravidlo reagovat, tedy na Uzly – Po uložení nového obsahu.
V dalším kroku musíme specifikovat podmínky, tedy že pravidlo bude odpovídat jen určitému typu obsahu, které byl nově uložen. Klikněte na odkaz Add condition. Z rozbalovací nabídky vyberte Content – is of type. V upřesňujícím nastavení pak Téma diskuze jako požadovaný typ obsahu.
Nyní by se akce provedly pokaždé, když by někdo vložil nový příspěvek do fóra. My ale ještě pravidlo upřesníme a bude nás zajímat jen vložení do určité části fóra. Přidejte tedy operátor A (Add and) a další podmínku (Add condition). Tou bude nyní Data comparison. Jako porovnávané pole si postupně naklikejte node:taxonomy-forums:tid (nebo node:taxonomy-forums:name).
Klikněte na tlačítko Pokračovat. Na další stránce pak zadejte hodnotu, kterou musí pole obsahovat, aby bylo podmínce vyhověno (a operátor ponechejte na equals). V prvním případě uveďte TID číslo termínu taxonomie pro dané fórum, v případě, že chcete porovnávat dle názvu fóra zadejte řetězec jeho názvu.
Doporučuji podmínky vázat na číslo termínu, nebudete tak muset pravidla předělávat poté, co byste sekci fóra přejmenovali.
V definici pravidla už zbývá pouze zvolit akci, která se při splnění dvou definovaných podmínek (záznam do fóra a zároveň jen do určité kategorie) provede. Klikněte na odkaz Add action a vyberte položku System: Send mail. Zadejte mailovou adresu, na kterou chcete upozornění na nový záznam v dané sekci fóra poslat. Podobně vyplňte předmět, tělo zprávy a odesilatele. Poté nastavení uložte.
Tip: v těle e-mailu můžete uvést jak název nového příspěvku, tak jeho URL. Stačí použít vhodné nahrazovací vzorky, které vám Rules vypisují. Například pro doplnění adresy nového uzlu, na který upozorňujete, vložte do těla zprávy nahrazovací vzorek [node:url].
Nové pravidlo by mělo být v tuto chvíli aktivní a můžete vyzkoušet vložit nový záznam do dané sekce fóra a vyzkoušet, zda se upozornění odešle.
Rules neslouží jen k posílání e-mailů
Jak jste si mohli ve výběru akcí všimnout, modul Rules neslouží pouze k posílání mailů. S jeho pomocí lze například manipulovat s objednávkami v eshopu, zobrazovat různá hlášení uživatelům, nastavovat drobečkovou navigaci, manipulovat s obsahem i s uživateli a dokonce spouštět vaše vlastní PHP skripty.
S pomocí dalších modulů lze Rules použít ke zpracování dat z formulářů a k jejich úpravě, k okamžitému odeslání newsletterů po jejich vložení do systému, k nespočtu akcí v eshopech Ubercart i Drupal Commerce a jiným věcem.
Jestliže se budete s modulem Rules chtít seznámit, doporučuji vyzkoušet právě sestrojení podmínek a akcí pro posílání upozorňovacích e-mailů. Je to jednoduché a můžete si hned vyzkoušet, zda jste pravidlo sestrojili správně.
A ještě jeden tip na závěr: s modulem Mime Mail můžete posílat i HTML zprávy.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Podobné články
Komentáře k článku
Ve Windows jsem dělal ve Visual Sudiu s koupeným VS.PHP. Pak jsem přešel na Eclipse. To jsem chvíli používal i na Macovi v OS X, ale přestalo se mi líbit. Nakonec jsem zkusil freewarový Komodo Edit a následně si koupil Komodo IDE. Nic lepšího jsem zatím nenašel a funguje mi to jak v OS X, tak ve Windows, navíc to umí synchronizaci mezi systémy, podobně jako webový prohlížeč. Což je super.
Ve Windows jsem ještě na nějaké věci používal PSPad, v OS X občas pro rychlou editaci vezmu TextWrangler. Hrál jsem si i s Netbeans a Zend Studiem, ale nějak jsem se s nimi nesžil, přes jejich nesporné kvality.
Zajímavý článek. Poprosil bych článek k Mimemail a odesílání html emailů z Drupal webu vůbec.
Myslíte jako programově v nějakém custom modulu?
Rád by som sa opýtal ako presmerujem stránku contact po odoslaní mailu naspat na contact. Skúšal som to nastaviť pomocou modulu redirect, ale drupal hlási, že v tom prípade padne do nekonečnej slučky. Skúsil som modul rule, no tu som som niečo také ako "po odoslaní mailu" nenašiel.
Na stránke používam aj modul webform a tam by sa mi nejaké presmerovanie tiež hodilo. Samotný webform v nastaveniach má niečo také ako Redirection location => No redirect (reload current page), ale to môj problém nerieši. Po odoslaní mailu sa nenačíta stránka s obsahom, ale namiesto obsahu sa zobrazí ten moj formulár.
Ak sú moje otázky smiešne, tak sorry, ale s drupalom iba začínam.
Ďakujem.
Takže už som na to prišiel. Ak používate webform a zobrazujete ho ako block len na niektorých stránkach v niektorom regione, je ľahké ho presmerovať.
Príklad: ja požívam webform ako block v Right Sidebar len na niektorých stránkach kde je obsah zameraný na popis nejakej služby. Užívateľ ak chce vedieť cenu služby, môže napísať mail priamo cez tento webform. V nastaveniach webform sú tri možnosti: Confirmation page, Custom URL a No redirect (reload current page). Nech som zvolil hoci ktorú možnosť, obsahová časť stránky stále zmizla a buď sa zobrazil v tejto časti formulár alebo nejaká iná hláška. Ja som potreboval aby po odoslaní mailu užívateľ videl stránku tak ako predtým (obsah s popisom služby...). Ak niečo také potrebujete, treba urobiť dve úpravy. V nastaveniach webform konkrétne form settings, zaškrtnúť možnosť No redirect (reload current page). Potom v blokoch si vyhľadajte ten svoj webform blok a v nastaveniach označte možnosť Show all webform pages in block.
Možno som objavil teplú vodu, ale aj napriek tomu sa rád podelím so skúsenosťami.
Muzu trosku OT, v cem (jake prostredi) programujete pro Drupal? Eclipse, Netbeans? Pokud delate jen vyhradne v Macu a je to app jen pro Macy, tak v cem jste delal jeste pod MS. Dekuji za odpoved.