Foruma jaunumi e-pastā

janeks Tue, 01/03/2012 - 00:14

Tā nu ienācās vēlme uztjūnēt forumam (D7) tādu iespēju (stc. nenāktu par sliktu arī šeit ;-).
Ideja pazīstama un sekojoša:
Izveidojot jaunu foruma tēmu, lietotājam ir pieejams ķeksītis, kuru ieķesējot viņš e-pastā saņems ziņu, tiklīdz kāds dotajā forumā būs atbildējis.
Tāds pats ķeksītis pieejams pie foruma komentāriem.

Izskatījās, ka Rules modulis varētu būt tas ko vajag, bet apstājos pie problēmas, kā dabūt atbilstošo e-pastu sarakstu.
Tur ir jauka iespēja lietot Replacement patterns, bet piedāvātajos nebija mezgla autora e-pasta, tomēr varēja dabūt komentētāja/atbildētāja e-pastu.
Vēl ir arī minēts, ka var "Note that token replacements containing chained objects – such as [node:author:uid] – are not listed here, but are still available".

Vēl pie Rules darbībām ir iespēja Loop, bet arī tur es īsti netiku skaidrībā vai ar to varētu dabūt gatavu to ko es vēlos.

Kur varētu būt kādi labi piemēri, kā dabūt mezgla visu komentāru e-pastus, kuriem kāda lauka vērtība ir true?
Vai tas vispār iespējams ar šo moduli?
Varbūt ir kāds elegantāks un vienkāršāks risinājums?

Jā, tik tiko arī pats pamanīju, ka biji manījis šo diskusiju: http://www.drupal.lv/subscription-digest Vienīgi zinu, ka D forumi ir īpaša lieta, un neesmu pārliecināts, vai notifications/subscriptions tur strādās. Tad nu būtu alternatīva ar tiem Rules. Bet jāizvirst. Man dikti patika video no NodeOne http://dev.nodeone.se/en/learn-the-rules-framework Šis links nebūs var būt tieši tas, bet tajā saitā jāpameklē - viņam bija sērijas ar video tieši par Rules, kur savā laikā pats guvu ļoti labu iedvesmu izpratnei.
Vispār man liekas, ka Rules ir ļoti interesants modulis, un tur, līdzīgi kā ar Views, var darīt brīnumlietas. Tikai citam ir ērtāk konfigurēt web interfeisā, bet citam - ātrāk ir uzmest moduli. Galvenais - izprast loģiku un parametrus, kas diemžēl nav tie aprakstošākie.
Rulles ir labas. :) Veiksmīgi realizēta nepieciešamā foruma e-pastu funkcionalitāte, palikusi tikai kosmētika. Princips gan nav no klasiskās progierēšanas tāds smuks, bet darbojas: forumam pievienots papildus slēptais lauks - saraksts, kurš saturēs tos e-pastus, kas būs parakstījušies, izveidotas divas rulles kas pievieno/noņem no saraksta e-pastus atkarībā no subscribe ķekša pie komentāra, trešā rulle sūta e-pastus no saraksta, plus rulle, kas sūta e-pastus foruma tēmas autoram. Pilnam apmierinājumam paliek: -> noslēpt parakstījušos e-pastu saraksta lauku foruma tēma formā. -> ieķeksēt/izķeksēt subscribe ķeksi atkarībā no dotā lietotāja iepriekšējās izvēles. Ja par pirmo man pagaidām nav nekāda ideja kā to izdarīt, tad par otro paliek pēdējā rules iespēja - palaist PHP kodu, kur zinot objektu struktūru dotajam laukam varētu nomainīt vērtību (vai noklusēto vērtību?). Domāju kau kaut kā līdzīgi varētu realizēt arī digest modi. Priecāšos par kādu padomu par pēdējām divām problēmām.
Pirmajai problēmai varētu būt piemērojams hook_form_alter(), taču neesmu programmētājs, un pagaidām sīkāk nevarēšu to nokomentēt. To vajadzētu darīt caur moduli (custom). Šis ir labāks risinājums, nekā cita veida slēpšana, jo tas faktiski ne tikai neparāda to lauku, bet arī slēpj to no pieejamības caur citiem skriptiem. Ja tas nav nepieciešams, tad jāmeklē cits risinājums. Par otro problēmu - šo funkcionalitāti varētu panākt ar Flag moduli, kur tajā ķekša vietā būs links ar tekstu pēc izvēles. Tā pat ir iespējas sasaistīt Rules moduli ar darbībām, ko veic Flags. Jāatvainojas, gan, ka īpaši sīki neiedziļinājos problēmā, bet nokomentēju, kas ātri ienāca prātā.
Rokot tālāk diezgan elegants risinājums ar to pašu Rules un minimālu progierēšanu priekš pirmās problēmas: Iekš D6 Rulēm bija tāds strēķītis ar formu notikumiem (Form events), bet iekš D7 tas nāk kā papildus modulis rules_forms. To formu notikumi, gan tā incantāk uzstadāmi, bet kad tas ir gatavs, tad vnk. izveidojam atbilstošu rule pie formas veidošanas un palaižam PHP, kur D7 ir paredzēta speciāla funkcija: hide($form[field_subscribers]); Rules man patīk ar vien vairāk ;-)