Rules: jak podmínit uložení příspěvku zaškrtnutím checkboxu
Cílem je, aby se uzel uložil jen při splnění podmínky (typicky: zaškrtnutí políčka – něco jako „Souhlasím s pravidly…“; to je ale jen příklad, teoreticky může být podmínka jakákoliv).
Příklad zadání
Z webu odeslat přihlášku ke vzdělávacímu programu, kde jsou specifikované „Podmínky účasti v programu“ a u nich zaškrtávací políčko s hodnotou „Souhlasím“. Pokud uživatel políčko nezaškrtne, přihláška se nesmí uložit a musí se vypsat chybová hláška.
Jak na to
Budete potřebovat moduly: Content Construction Kit – CCK, Rules, případně Token (pokud chcete používat tokeny třeba pro obsah chybové hlášky, v daném případě to není nutné; pozn. – pokud vím, s Rules zatím spolupracuje pouze -dev verze modulu Token).
Vytvořte typ obsahu Přihláška (strojový název
prihlaska) a naklikejte pole, jaká potřebujete (kdo neví,
základní tutoriál k CCK je zde).
Podstatné je vytvořit pole s podmínkami účasti a zaškrtávacím polem.
Já jsem to v reálu udělala tak, že jsem vytvořila skupinu (group v CCK)
nazvanou Podmínky účasti (strojový název:
group_prihlaska_conditions) a text podmínek zadala jako vysvětlivky k této
skupině. Možná by to šlo i jinak a líp, ale nechme to tak – ostatně,
vyplynula z toho jedna zajímavá záludnost, o kterou se s vámi chci
podělit. Do této skupiny přidejte pole: Souhlas s podmínkami (strojový
název: field_prihlaska_cond_conf), typ Text a widget „Single on/off
checkbox“. Jako „Povolené hodnoty“ zadejte:
0|Nesouhlasím
1|Odesláním přihlášky souhlasím s podmínkami účasti v programu.
Další kroky se týkají modulu Rules. Jedná se o nastavení události pro formulář (zde editačníformulář uzlu), takže jděte do: Rules > Form events. Zaškrtněte: Enable event activation messages on forms, Display form element IDs … a uložte. Dále přejděte na editační formulář Přihlášky (node/add/prihlaska) a klikněte na Activate events for prihlaska_node_form, potvrďte na další stránce.
Další nastavení se odehraje v: Rules > Trigerred Rules > Add a new rule. Popis: „Přihláška – error – není souhlas s podmínkami“, Event: Prihlaska node form is being validated. Add a condition: Form element has value:
Odbočka: Zde je třeba vyplnit správné ID formulářového prvku. Možná byste si mysleli, že tam stačí lupnout strojový název vytvořeného CCK pole, ale v tom je právě ta záludnost, která mě stála 20 minut mého mladého a krásného života. Možnost „Display form elements IDs“, kterou Rules nabízí, tam je asi právě proto, že to není tak docela triviální :-). Když se podíváte na formulář pro vložení přihlášky (node/add/prihlaska), zjistíte, že správné ID je v tomto případě group_prihlaska_conditions[field_prihlaska_cond_conf]. (Ještě technická poznámka – zobrazování ID ve formuláři se deaktivuje, jakmile se odhlásíte ze systému, pokud ho pak znovu potřebujete, musíte ho opět zapnout).
Vraťme se k nastavení Rules: Add a condition: Form element ID:
group_prihlaska_conditions[field_prihlaska_cond_conf], zaškrtněte
„Negate“ a zadejte Value(s): 1. (Když hodnota pole není 1, tedy souhlas,
chceme vypsat chybu).
Add an action: Set a form error, Form element ID: field_prihlaska_cond_conf.
(Zde nastavujeme, které pole se má označit jako chybně vyplněné. V tomto
případě mi naopak funguje pouze jednoduchý strojový název pole a přiznám
se, že netuším, v čem je rozdíl). Zpráva: Bez souhlasu s podmínkami se
nemůžete na program přihlásit.
To by mělo být všechno, zbývá vyzkoušet. Předem díky za případné komentáře.
Velmi dobry clanok. Dik.
Velmi dobry clanok. Dik. Skusal som podla toho prirobit v registracnom formulari checkbox pomocou ktoreho by sa registrovany uzivatel prihlasil na nejaky odber. Checkbox som vytvoril v nastaveni profilov v sprave pouzivatelov. V Rules som vytvoril podla vasho navodu pravidlo ale nefunguje to. Odhadujem ze ten user checbox nevracia ziadne hodnoty, tak ako to mate vy nastavene v tom CCK poli. A neviem ako by som CCK pole zahrnul do registracneho formulara. Predpokladam ze mi budete vediet poradit.
Pro registrační formulář je
Pro registrační formulář je na to modul: http://drupal.org/…terms_of_use (nezkoušela jsem). Já jsem to dělala přes Rules právě proto, že jsem to potřebovala mimo registraci. Nicméně pokud je k tomu důvod, profil uživatele může být taky uzel (modul Content Profile) a pak můžete tento návod pro registraci použít.
Pozrel som sa na to. Terms of
Pozrel som sa na to. Terms of use je jednorazova zalezitost, ja by som potreboval aby sa uzivatel mohol aj odhlasit z odberu. Content Profile vyzera velmi zaujimavo, ale je to trosku zlozitejsie momentalne mi to nevyhovuje, potreboval by som nieco uplne jednoduche.
Napriklad ked som v module profile vytvoril namiesto checkboxu select a v Rules vlozil do values textovu hodnotu z toho selectu tak vsetko funguje. Pri checkboxe vlastne neviem ake hodnoty tam zadat. Skusal som 1 a 0, ale stale mi to vracia FALSE, to vidim vo vypise ladenia Debug rule evaluation.
Viem ze na odbery sprav su moduly, skusal som Notification aj Simplenews, ale potreboval by som nieco uplne automaticke, pri pridani noveho obsahu pri konkretnom type obsahu poslat registrovanym uzivatelom automaticky spravu o novom obsahu. Aby clovek co to bude spravovat nemusel nic vytvarat a posielat. Rules sa mi na to najviac pozdava aj ten vas navod ked som precital tak som si povedal ze to je ono, skoda ze neviem dostat z toho checkboxu tie hodnoty 0 a 1. Ked sa mi to nepodari vyriesim to tym selectom.
Já jsem si teď teprve pořádně
Já jsem si teď teprve pořádně přečetla, na co to vlastně chcete. Na to je Notifications. Editor nic vytvářet nemusí.
Obsah mého blogpostu se týká pouze a jedině checkboxu „souhlasím s něčím“, bez kterého se nedovolí uložit uzel (a dá se to použít kdekoliv, kde používáte CCK). Vy chcete asi něco jiného.
Ano chcel som vas navod
Ano chcel som vas navod pouzit na trochu inu situaciu (co sa mi takmer podarilo). Notifications som skusal, problem som mal s tymi frontami a tiez mi spolahlivo nefungovali intervaly odosielania. Dovod bude ze s tym modulom velmi neviem robit. Kazdopadne dik za info napr. ten modul Content Profile vyzera velmi zaujimavo.
Content Profile je super, já
Content Profile je super, já ho používám všude místo Profile. Jinak Notifications na první pohled je na oběšení :-), ale funguje spolehlivě. Když se v tom člověk trochu pohrabe (konfiguračně), dá se i docílit toho, aby se uživatel z těch mnoha možností nastavení nezbláznil (= aby tam měl jen to, co potřebuje). Základem je vůbec nezapínat, co nechci používat.
Poslat nový komentář