Creazione di un plug-in del gestore di moduli web personalizzato per drupal 8.
Questo documento presuppone che tu abbia già installato e abilitato webform e webform-ui
1) Crea il tuo modulo web. - Vai a struttura -> moduli web e premi il pulsante "+ Aggiungi modulo web". - Puoi usare l'interfaccia utente o usare yaml, dipende da te. esempio yaml per un modulo di un campo che accetta un indirizzo email:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
Il rientro è importante per yaml, quindi assicurati di farlo bene. i rientri sono spazi.
Ora salva il modulo.
2) Creazione di un plug-in gestore webform
Successivamente possiamo creare un nuovo plug-in che verrà visualizzato nella sezione "Email / Gestori" durante la modifica del modulo web. Lo chiamerò myhandler, puoi chiamarlo come vuoi, a condizione che tu sostituisca tutte le menzioni di myhandler con il nome che scegli.
a) Crea una nuova cartella per il tuo plugin, fallo nella tua drupal root (qui indicata come / var / www / html /) nella seguente sottocartella: / var / www / html / modules / Custom / myhandler
b) Creare un nuovo file nella directory precedente chiamato myhandler.info.yml in questo file:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Creare una directory src nella directory del modulo, ad esempio: / var / www / html / modules / Custom / myhandler / src in src create Plugin in Plugin create WebformHandler
(questo può essere ottenuto in una volta sola usando
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
che renderà l'intera struttura in una volta sola usando il flag -p per mkdir.)
4) Crea un nuovo file /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
in quel file va il seguente codice php, ho lasciato la configurazione del modulo di configurazione in modo da poter vedere come configurare il plugin se necessario.
<?php
namespace Drupal\myhandler\Plugin\WebformHandler;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Serialization\Yaml;
use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\webformSubmissionInterface;
/**
* Form submission handler.
*
* @WebformHandler(
* id = "myhandler_form_handler",
* label = @Translation("MyHandler form handler"),
* category = @Translation("Form Handler"),
* description = @Translation("Do something extra with form submissions"),
* cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
* results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
* )
*/
class MyFormHandler extends WebformHandlerBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'submission_url' => 'https://api.example.org/SOME/ENDPOINT',
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['submission_url'] = [
'#type' => 'textfield',
'#title' => $this->t('Submission URL to api.example.org'),
'#description' => $this->t('The URL to post the submission data to.'),
'#default_value' => $this->configuration['submission_url'],
'#required' => TRUE,
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
// Your code here.
// Get an array of the values from the submission.
$values = $webform_submission->getData();
// Get the URL to post the data to.
$post_url = $this->configuration['submission_url'];
$message = "MyHandler got form data:".print_r($values,1);
\Drupal::logger('myformhandler')->error($message);
return true;
}
}
?>
5) Abilita il tuo modulo MyHandler (usando il menu Drush o Extender) e poi ricostruisci la tua cache di Drupal ("drush cr" da qualsiasi punto sotto la tua Drupal root (/ var / www / html qui) lo farebbe se usi Drush)
6) modifica il tuo modulo web, vai su "Email / Handlers" e fai clic sul pulsante "+ Aggiungi gestore" Dovresti vedere il tuo plugin elencato, fai clic su Aggiungi gestore, ora dovresti vedere una casella che richiede l'URL di invio. fai clic sul pulsante Salva. Se qualcosa non sembra giusto o non funziona, controlla il registro degli errori di Apache, potresti trovare qualcosa di utile lì.
7) Testa il tuo modulo - invia un modulo, quindi controlla il registro del watchdog (drush ws), dovresti vedere i valori inviati ad esso. Potrebbero essere troncati nell'output che vedi, non farti prendere dal panico, è tutto lì. Quello che fai ora con questo dipende da te.
Spero che questo aiuti qualcuno. L'ho messo insieme da cose che ho trovato in giro per il luogo e l'ho scritto in un unico documento. Grazie agli altri che mi hanno portato qui.
hook_form_alter()
, o è un po 'più difficile dirti cosa stai facendo di sbagliato. Inoltre, dovresti dire quale forma stai cercando di modificare.