kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 Yusef
Yusef
Question

Menambahkan penangan penyerahan kustom ke formulir

Bagaimana cara menambahkan penangan pengiriman formulir kustom?

Saya mencoba menambahkan $form['#submit'][] = 'mymodule_form_submit';; atau $form['actions']['submit']['#submit'][] = 'mymodule_form_submit'; ke hook_form_alter().

use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\Request;

function MYMODULE_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form_id == 'node_trends_form' || $form_id == 'node_trends_edit_form') {
    foreach (array_keys($form['actions']) as $action) {
      if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
        $form['actions']['submit']['#submit'][] = 'mymodule_form_submit';
      }
    }
  }
}
function mymodule_form_submit(array $form, FormStateInterface $form_state){
    //die("why won't this execute? :(");
    drupal_set_message("Why won't this message show?");
}

Tampaknya drupal_set_message() tidak dipanggil. Saya juga mencoba membangun ulang cache, tetapi fungsi tersebut tetap tidak dipanggil.

Saya menggunakan Drupal 8.2.3.

19 2016-12-19T13:53:08+00:00 3
 kiamlaluno
kiamlaluno
Pertanyaan edit 1 Februari 2018 в 8:04
Drupal
forms
8
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
Solution / Answer
 MrD
MrD
19 Desember 2016 в 3:06
2016-12-19T15:06:13+00:00
Lebih
Sumber
Sunting
#21309253

Jika Anda menggunakan hook_form_node_form_alter() dapat menggunakan contoh kode:

function mymodule_form_node_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  foreach (array_keys($form['actions']) as $action) {
    if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
      $form['actions'][$action]['#submit'][] = 'mymodule_form_submit';
    }
  }
}

dan kirimkan fungsi

function mymodule_form_submit(array $form, FormStateInterface $form_state){
    //die("I'm not getting run, why :(");
    drupal_set_message("Why won't this message show?");

}
 MrD
MrD
Jawaban edit 19 Desember 2016 в 3:11
25
0
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
 CptnObvious
CptnObvious
20 Juni 2017 в 3:36
2017-06-20T15:36:57+00:00
Lebih
Sumber
Sunting
#21309254

Membuat plugin handler webform kustom untuk drupal 8.

Dokumen ini mengasumsikan Anda telah menginstal dan mengaktifkan webform dan webform-ui

  1. Buat webform Anda.

    • Pergi ke structure -> webforms dan tekan tombol "+ Add webform".
    • Anda dapat menggunakan ui atau menggunakan yaml, itu terserah Anda. Contoh yaml untuk formulir satu bidang yang mengambil alamat email:

    email: '#type': email '#title': email '#title_display': tidak terlihat '#placeholder': 'ENTER YOUR EMAIL' '#atribut': kelas:

    • my-ip

Lekukan penting untuk yaml jadi pastikan Anda melakukannya dengan benar. indentasi adalah spasi.

Sekarang simpan formulir Anda.

  1. Membuat plugin handler webform

Selanjutnya kita dapat membuat plugin baru yang akan muncul di bagian "Emails/Handlers" saat mengedit webform. Saya akan menyebutnya myhandler, Anda dapat menyebutnya apa yang Anda inginkan, asalkan Anda mengganti semua penyebutan myhandler dengan nama yang Anda pilih.

a) Buat folder baru untuk plugin Anda, lakukan ini di root drupal Anda (disebut di sini sebagai /var/www/html/) di subfolder berikut: /var/www/html/modules/Custom/myhandler

b) Buat file baru di direktori di atas yang disebut myhandler.info.yml dalam file ini adalah sebagai berikut:

name: My Form Handler
description: handles form submits, does something with them. 
package: Custom
type: module
version: 1.0
core: 8.x
  1. Buat direktori src di direktori modul Anda, misalnya: /var/www/html/modules/Custom/myhandler/src di src buat Plugin di Plugin buat WebformHandler

(ini dapat dicapai dalam sekali jalan menggunakan

mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/ 

yang akan membuat seluruh struktur dalam sekali jalan menggunakan flag -p untuk mkdir).

  1. Buat file baru /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php

di file tersebut terdapat kode php berikut ini, saya telah meninggalkan pengaturan config form sehingga Anda dapat melihat bagaimana mengkonfigurasi plugin Anda jika diperlukan.

<?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;
 }
}   
?>
  1. Aktifkan modul MyHandler Anda (menggunakan drush atau menu extend) dan kemudian bangun kembali cache drupal Anda ("drush cr &" dari mana saja di bawah root drupal Anda (/var/www/html di sini) akan melakukannya jika Anda menggunakan drush)

  2. edit webform Anda, pergi ke "Email / Handlers &" dan klik "+ Add Handler &" tombol Anda akan melihat plugin Anda terdaftar, klik Add Handler, Anda sekarang akan melihat kotak yang meminta url pengiriman. klik tombol Simpan. Jika ada sesuatu yang tidak terlihat benar, atau tidak berfungsi, periksa log kesalahan apache, Anda mungkin menemukan sesuatu yang bermanfaat di sana.

  3. Uji formulir Anda - buat pengiriman ke formulir, lalu periksa log pengawas (drush ws), Anda akan melihat nilai yang dikirim ke sana. Nilai-nilai itu mungkin terpotong dalam output yang Anda lihat, jangan panik, semuanya ada di sana. Apa yang anda lakukan dengan ini sekarang terserah anda.

Semoga ini membantu seseorang. Saya mengumpulkannya dari hal-hal yang saya temukan di sekitar tempat ini dan menuliskannya ke dalam satu dokumen. Terima kasih kepada yang lain yang telah membawa saya ke sini.

No Sssweat
No Sssweat
Jawaban edit 16 April 2019 в 10:35
18
0
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
Anthony Fournier
Anthony Fournier
25 Januari 2018 в 2:02
2018-01-25T14:02:22+00:00
Lebih
Sumber
Sunting
#21309255

jika menggunakan hook_form_BASE_FORM_ID_alter di Drupal 8 core 8.4.3, saya menemukan cara-cara menambahkan custom submit handler tidak berhasil. Ini berhasil untuk menambahkan nama fungsi submit handler:

$form['#submit'][] = 'mymodule_submit_handler';

Dalam situasi lain, menggunakan hook_form_FORM_ID_alter di Drupal 8.4.5, saya menemukan cara-cara di atas tidak berhasil untuk menambahkan custom submit handler. Sebaliknya, ini berhasil:

$form['actions']['submit']['#submit'][]  = 'mymodule_submit_handler';
 Yusef
Yusef
Jawaban edit 13 Maret 2019 в 6:49
5
0
Related communities 2
Drupal Indonesia
Drupal Indonesia
220 pengguna
Forum diskusi komunitas Drupal Indonesia
Buka telegram
Drupal Users Indonesia
Drupal Users Indonesia
17 pengguna
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Анна Литвиненко
Terdaftar 2 hari yang lalu
2
Inessa bu
Terdaftar 1 bulan yang lalu
3
Denis Babushkin
Terdaftar 1 bulan yang lalu
4
asakuno asakuno
Terdaftar 1 bulan yang lalu
5
aldo salerno
Terdaftar 2 bulan yang lalu
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
ID
JA
© kzen.dev 2023
Sumber
drupal.stackexchange.com
di bawah lisensi cc by-sa 3.0 dengan atribusi