Avviso disponibilità prodotto (ritorno in stock)

3 contenuti / 0 new
Ultimo contenuto
Avviso disponibilità prodotto (ritorno in stock)
AllegatoDimensione
Plain text icon avviso_disponibilita.rule_.txt1.85 KB

Avevo bisogno di una funzione che mi permettesse di inviare un'email agli utenti iscritti a un certo prodotto, ossia un banale rientro in stock di un prodotto non disponibile al momento. In giro su Drupal.org avevo trovato i vari Stock notify per Ubercart e una sandbox per DrupalCommerce (che è quello che sto usando attualmente) che si chiama Waitlist, che fa esattamente quello che mi serviva, ma usando Flag e Message notify (che non mi piace, visto che uso Mime Mail ovunque), ma più che altro una volta installato aveva un po' di errori ed era molto chiuso e poco impostabile, quindi ho rinunciato.
E alla fine mi sono scritta io questo paio di regole, solo con Flag, Mime Mail e sfruttando il già utilizzato Commerce Stock.

  1. Creo un flag che chiamo avviso_disponibilita. Un flag di Prodotti di Commerce.
    Imposto i messaggi di Aggiunta e Cancellazione di Flag, imposto i tipi di prodotto su cui voglio che sia presente, disabilito l'opzione 'Display link on entity' perché voglio decidere io dove visualizzare il link per il flag.
  2. Modifico la regola predefinita di Commerce Stock, quella che disabilita il pulsante Aggiungi al carrello, in modo che al suo posto visualizzi il flag.
    Non cancello l'azione 'Set the state of the Add to cart form', che non si sa mai, ma ne aggiungo un'altra:

    Advanced configuration of the add to cart form
    - Seleziono 'Hide the Quantity field if it is visible '
    - Imposto 'The text to set the action to' scrivendoci il testo che voglio mostrare, ossia 'Avvisami quando torna disponibile' (in realtà è inutile, perché mostrerò il javascript del flag, ma è un valore obbligatorio)
    - Imposto la classe 'Add a class to the add to cart form' su 'out-of-stock'
    - Imposto come 'Stock action' il parametro 'Custom HTML' e disabilito Add to cart, in modo che, più sotto:
    - Dove dice 'Custom HTML', inserisco questo pezzetto di codice che ho preso da questa pagina:

    <?php
    print flag_create_link('avviso_disponibilita', $commerce_product->product_id);
    ?>

    ossia stampo il mio flag, laddove avviso_disponibilita è appunto il nome del mio flag.

  3. Creo una regola per spedire la mail agli utenti iscritti a questo prodotto.
    La mia regola va legata all'unico evento dopo cui potrebbe essere stato modificato lo stock di un prodotto, ossia la modifica di un prodotto esistente. Ma non va bene 'after updating an existing product', perché devo poter confrontare il valore prima del salvataggio con quello dopo il salvataggio. Quindi:

    Evento
    Before saving commerce product

    Condizioni
    - il prodotto ha lo stock abilitato
    - il prodotto non ha lo stock disabilitato da un override
    - confronto di dati: commerce-product-unchanged:commerce-stock è uguale a 0 (ossia, prima di salvarlo, il prodotto aveva stock pari a 0)
    - confronto di dati: commerce-product:commerce-stock è maggiore di 0 (ossia, dopo il salvataggio, il prodotto ha uno stock maggiore di 0)

    Azioni
    - caricamento entità dato l'id ('Nodo', commerce-product-unchanged:field-prodotto-node:0:nid, Etichetta della variabile caricata 'Nodo caricato' e Valore della variabile 'nodo-caricato'). Questo serve a mettermi a disposizione i token del NODO e non del solo PRODOTTO quando poi andrò a scrivere la mail. A quel punto mi troverò tutti i token tipo nodo-caricato:nid etc.
    - ottieni gli utenti che hanno aggiunto un flag ad un commerce_product (l'azione parla da sola, carico l'elenco degli utenti e gli assegno un Etichetta variabile e un Valore variabile in modo da ritrovarmeli tra i token a disposizione nel momento in cui vado a eseguire il loop che mi invia le mail agli utenti iscritti.
    - loop di utenti all'interno del quale inserisco l'azione -->
    - send html mail (o altro, a seconda del modulo che utilizzate per l'invio delle email) in cui utilizzate i token che vi servono. Io avevo bisogno del nodo perché volevo anche spedire i miei utenti esattamente all'url del Nodo (=display prodotto) legato al Prodotto flaggato. Me la sono cavata con una cosa tipo '[site:url]/node/[nodo-caricato:nid].

    (Trovate la regola in allegato, non so se poteva essere fatto anche in modo più semplice, sono aperta a suggerimenti e correzioni molto volentieri, nel caso)

Drupal Version:

Funziona anche con Ubercart? Qualcuno ha fatto una cosa simile?

Grazie

Non conosco le differenze tra Commerce e Ubercart, ma mi sembra che per Ubercart ci fosse un modulo apposito che funzionava bene (e siccome non l'ho trovato per Commerce, ho creato questo).

...enter at your own risk...