4.8/5.0 fejlesztői előzetes: hook_mail_alter()

Hojtsy Gábor képe

Tegnap került be a leendő Drupal 4.8 forráskódjába az általam javasolt hook_mail_alter() hurok, és egyben a Drupal email küldés is egy kicsit barátságosabbá vált. Az ötlet a Freeweb-bel kapcsolatos Drupal beállítási kalandok mentén merült fel, de időközben kiderült, hogy számos praktikus felhasználása lehet.

A hook_mail_alter() lehetővé teszi, hogy a Drupal által küldött levelek tartalmát és fejléceit tetszőleges módon átírhassuk. Néhány lehetséges felhasználása:

  • Egységes webhelyre jellemző láblécet tehetünk minden elküldött levél aljára.
  • Felcserélhetjük a felhasználó által beírt és a rendszer által kitöltött tartalom sorrendjét a contact modul kapcsolat űrlapja által küldött levelekben. Ez az igény a Weblaboron merült fel.
  • Új fejléc sorokat vehetünk fel a levelekhez. A Freeweb-en például követelmény, hogy egy kódot tegyünk a fejlécekbe, ezzel igazolva magunkat a Freeweb felé.
  • Csatolmányos levélküldést valósíthatunk meg. A hook_form_alter()-rel kombinálva például a kapcsolat űrlapunkat felvértezhetjük fájl feltöltés lehetőséggel, majd a feltöltött fájlt a megfelelő kódolással a levélbe helyezhetjük.
  • Ha mindenképpen erre vágyunk, akkor teljesen HTML-esíthetjük a Drupal által küldött leveleket, HTML szűrésen átengedve a szöveges tartalmat, a cégünkre jellemző logót, láblécet elhelyezve a levélben.

Egyszerű példaként álljon itt egy Freeweb támogató függvény, mely a Freeweb telepítési javaslatnál leírt módosítást szükségtelenné teszi majd a 4.8-as Drupal verzió használatakor.

function freeweb_mail_alter($mailkey, $to, $subject, $body, $from, &$headers) {
  $headers['X-FW-MailID'] = 'itt kell megadni az FW mail azonosítót';
}

Mivel referenciaként vesszük át a fejléceket, átírhatjuk a tartalmukat. Az új fejléc elemet felvéve minden drupal_mail() hívással az általunk beállított fejléc is szerepelni fog a küldött levélben.

Hozzászólások

Őry Máté képe

ilyen hook_*_alter() lesz még vmi?

Hojtsy Gábor képe

Szintén 4.8-as újdonság a hook_link_alter() ami a node és comment linkek módosítására használható majd. Bővebben a Converting 4.7 modules to 4.8 oldalon, ami folyamatosan bővül, ahogy kerülnek be a változások.