Skip to main content

Joomla 5 modelli di posta elettronica - come aggiungere variabili tramite plugin

20 Febbraio 2025
Autore: Sergey Tolkachyov
Tradotto da: Pietro Strada
Link originale: https://magazine.joomla.org/all-issues/february-2025/joomla-5-email-templates-how-to-add-variables-via-plugin
Joomla 5 modelli di posta elettronica - come aggiungere variabili tramite plugin

In Joomla 5, i modelli di posta elettronica personalizzabili hanno fatto un ingresso, per componenti core e di terze parti. Non possono (ancora) essere aggiunti da soli, vengono aggiunti durante l'installazione.

È possibile modificare i modelli di posta elettronica facendo clic su Sistema - Modelli - Modelli di posta elettronica nel menu a sinistra del pannello di amministrazione. Dal Joomla 5.2, è possibile utilizzare il formato HTML per i modelli di posta elettronica. Quando si modifica il modello, è possibile vedere che le variabili come {USERNAME} oppure {SITENAME} sono utilizzati nel suo testo. Ma cosa succede se abbiamo bisogno di aggiungere le nostre variabili al modello di posta elettronica?

Una descrizione dettagliata di questa funzione richiederà un articolo dettagliato separato, ma ti daremo un'idea generale delle impostazioni del modello di posta elettronica.

1

Dovremmo andare alle impostazioni del modello di posta elettronica (il pulsante delle opzioni dei componenti nell'angolo in alto a destra).

Impostazioni dei modelli di posta elettronica di Joomla 5

E poi possiamo selezionare il formato di posta elettronica testo oppure HTML. Quindi le impostazioni di layout per i modelli di posta elettronica Joomla diventano disponibili. Questi parametri globali possono essere ridefiniti in ogni modello di posta elettronica specifico. Pertanto, è possibile specificare il proprio layout e le impostazioni del logo per ciascuno dei modelli di posta elettronica.

Impostazioni dei modelli di posta elettronica di Joomla per il layout HTML e il logo del sito nelle e-mail

 

Per gli sviluppatori: Come faccio ad aggiungere le mie variabili per i modelli di posta elettronica Joomla?

Vediamo diversi codici brevi per diversi tipi di e-mail: {NAME}, {SITENAME}, {SITEURL}, e così via sono utilizzati nel testo dei modelli di posta elettronica di Joomla. Cosa succede se abbiamo bisogno di aggiungere le nostre variabili al modello di posta elettronica?

modificare il modello di posta elettronica in Joomla 5

Per fare questo, è necessario scrivere un semplice plugin (vedi Documentazione ufficiale per gli sviluppatori). Lo sviluppatore beneficerà di 2 trigger per i plugin: onMailBeforeTagsRendering e onailBeforeRendering.

Innesco del plugin ONMailBeforeRendering in Joomla

onMailBeforeRendering - Questo è un trigger che consente di aggiungere i propri shortcode per la sostituzione della stringa nel plugin. È necessario inviare una matrice del modulo come [ variable_name => variable_value ].

Dal pannello di amministrazione, è necessario aggiungere le variabili con parentesi ricce: {variable_name} sarà sostituito da variable_value.

Aggiungi variabile personalizzata al modello di posta elettronica di Joomla

L' $event l'argomento del plugin è un'istanza del BeforeRenderingMailTemplateEvent classe, che ha, tra le altre cose, 2 metodi: getTemplate() (Ottenere un oggetto mailer in cui è possibile aggiungere i dati) e getTemplateId() (Ottenere l'ID del modello di un'e-mail come com_users.registration.admin.new_notification), con il quale determiniamo se è il modello di posta elettronica giusto per noi o meno. Simile al contesto nei plugin di contenuto.

ID del modello di posta elettronica nella visualizzazione dei modelli di posta elettronica di Joomla 5

Inoltre, una proprietà di classe utile per trasferire i dati dal plugin al layout della lettera per il rendering è $layoutTemplateData. Si tratta di un array associativo.

<?php
// Get current mailer
$mailTemplate = $event->getTemplate();
$data = [
   'variable_name' => 'variable_value'
];
// since Joomla 4 for all email types. 2nd argument - $plain - plain text format
$mailTemplate->addTemplateData($data, false);
// since Joomla 5.2 - for HTML-emails
$mailTemplate->addLayoutTemplateData($data);

// An example from Joomla core
// Add additional data to the layout template
$this->addLayoutTemplateData([
    'siteName' => $app->get('sitename'),
    'lang'     => substr($this->language, 0, 2),
]);

Vediamo tutti i metodi:

<?php
use Joomla\CMS\Event\Mail\BeforeRenderingMailTemplateEvent;

public function onMailBeforeRendering(BeforeRenderingMailTemplateEvent $event): void
{
        $templateId = $event->getTemplateId(); // email template id, like context
        $template = $event->getTemplate();//получаем весь объект письма
        $data = [
                'variable_name' => 'variable 1 value',
                'variable_name2' => 'variable 2 value',
        ];

        $template->addTemplateData($data); 
        // or...
        $mailTemplate->addLayoutTemplateData($data);
}

Plugin trigger onMailBeforeTagsRendering in Joomla

onMailBeforeTagsRendering - Questo è un trigger che aggiunge le tue variabili all'elenco di quelle disponibili per la sostituzione nella finestra di modifica del modello email di Joomla. Dobbiamo creare un array per questo trigger con i nomi delle variabili, ma senza i loro valori.

<?php
public function onMailBeforeTagsRendering(Event $event): void
{
    [$templateId, $template] = $event->getArguments();
    $tags =  $template->params['tags']; //get standart short codes
    $tags[] = 'my_custom_variable';
    $tags[] = 'my_custom_variable2';
    // or we can get fields from com_user here
   // Thanks to Alexander Novikov here.
    $user_fields = FieldsHelper::getFields('com_users.user', true); // get user fields
    $newtags = [];
    foreach($user_fields as $field) {
        $newtags[] = $field->name; //combine the array. Our variable is field name
    }
    $tags = array_merge($tags, $newtags); // merge both arrays
    $template->params['tags'] = $tags; // return back 
}

Vediamo il risultato!

$mailTemplate->addLayoutTemplateData($data);

 

// Un esempio dal core di Joomla

Alcuni articoli pubblicati sulla rivista Joomla Community Magazine rappresentano l'opinione personale o l'esperienza dell'autore sull'argomento specifico e potrebbero non essere in linea con la posizione ufficiale del Progetto Joomla