Bagaimana Cara Membuat Form Kustom di Magento2 Frontend?

19

Saya ingin membuat formulir kustom di frontend dan menggunakan formulir ini pelanggan bisa mendapatkan janji.

Dalam formulir saya, saya memiliki 4 Fields.

  1. Nama Depan (teks diajukan)
  2. Nama Belakang (teks diajukan)
  3. Nomor Telepon (bidang angka)
  4. Pemesanan waktu (dengan kalender tanggal waktu)

Jadi ketika seorang pelanggan mengisi formulir ini dan mengirimkannya, saya ingin memasukkan data ini ke dalam basis data dan ditampilkan di bagian admin.

Bagaimana saya bisa mencapai fungsi ini di Magento-2.1

Saya telah merujuk tautan ini tetapi tidak sesuai dengan fungsionalitas saya.

Dhaval
sumber

Jawaban:

41

Asumsikan Anda memiliki modul berikut Company/Module.

Buat router frontend

/ app / code / Company / Module / etc / frontend / routes.xml

Buat rute untuk dikelola:

  • DAPATKAN permintaan yang akan menampilkan templat formulir HTML
  • Permintaan POST yang akan mengirim data formulir ke Action Controller Class.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="companymodule" frontName="companymodule">
            <module name="Company_Module"/>
        </route>
    </router>
</config>

Buat tata letak

/ app / code / Company / Module / view / frontend / layout / module_index_booking.xml

Buat tata letak dasar untuk mengaitkan Blok ke templat phtml halaman bentuk

<?xml version="1.0"?>
<page layout="2columns-left" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <title>HTML title - The booking form page</title>
    </head>
    <body>
        <referenceBlock name="navigation.sections" remove="true" />
        <referenceContainer name="content">
            <block class="Company\Module\Block\Booking" name="companymodule.booking" template="Company_Module::booking.phtml"/>
        </referenceContainer>
    </body>
</page>

Buat Blokir

/ app / code / Perusahaan / Modul / Blok / Booking.php

Buat blok dengan banyak fungsi yang Anda inginkan untuk formulir Anda.

<?php

namespace Company\Module\Block;

class Booking extends \Magento\Framework\View\Element\Template
{
    /**
     * Construct
     *
     * @param \Magento\Framework\View\Element\Template\Context $context
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\View\Element\Template $context,
        array $data = []
    )
    {
        parent::__construct($context, $data);
       }

    /**
     * Get form action URL for POST booking request
     *
     * @return string
     */
    public function getFormAction()
    {
            // companymodule is given in routes.xml
            // controller_name is folder name inside controller folder
            // action is php file name inside above controller_name folder

        return '/companymodule/controller_name/action';
        // here controller_name is index, action is booking
    }
}

Buat template

/ app / code / Company / Module / view / frontend / templates / booking.phtml

Buat templat dengan formulir HTML Anda dan tambahkan tindakan formulir yang sesuai dengan perutean.

<h1>Booking page</h1>

<form action="<?php echo $block->getFormAction() ?>" method="post">
    <input name="firstname" type="text">
    <input name="lastname" type="text">
    <input name="phone" type="text">
    <input name="bookingTime" type="date">
    <input type="submit" value="Send booking informations">
</form>

Buat Pengendali Aksi

/ app / code / Perusahaan / Modul / Pengendali / Indeks / Booking.php

Buat Pengendali Aksi untuk mengelola permintaan pada rute.

<?php

namespace Company\Module\Controller\Index;

use Magento\Framework\Controller\ResultFactory;

class Booking extends \Magento\Framework\App\Action\Action
{
    /**
     * Booking action
     *
     * @return void
     */
    public function execute()
    {
        // 1. POST request : Get booking data
        $post = (array) $this->getRequest()->getPost();

        if (!empty($post)) {
            // Retrieve your form data
            $firstname   = $post['firstname'];
            $lastname    = $post['lastname'];
            $phone       = $post['phone'];
            $bookingTime = $post['bookingTime'];

            // Doing-something with...

            // Display the succes form validation message
            $this->messageManager->addSuccessMessage('Booking done !');

            // Redirect to your form page (or anywhere you want...)
            $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
            $resultRedirect->setUrl('/companymodule/index/booking');

            return $resultRedirect;
        }
        // 2. GET request : Render the booking page 
        $this->_view->loadLayout();
        $this->_view->renderLayout();
    }
}

Dalam melanjutkan, Anda akan memiliki arsitektur berikut:

aplikasi
  ├ kode
  | ├ Perusahaan
  | | ├ Modul
  | | | ├ Blokir
  | | | | ├ Booking.php
  | | | ├ Pengendali
  | | | | ├ Indeks
  | | | | | ├ Booking.php
  | | | ├ dll
  | | | | ├ frontend
  | | | | | ├ routes.xml
  | | | ├ lihat
  | | | | ├ frontend
  | | | | | ├ tata letak
  | | | | | | ├ module_index_booking.xml
  | | | | | Template ├
  | | | | | | ├ booking.phtml

Kemudian jalankan perintah berikut:

php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:flush

Kemudian Anda dapat mengakses halaman formulir kustom Anda: http: // localhost / companymodule / index / booking

Selamat coding!

Subit Antoine
sumber
bagaimana saya bisa melihat ini di ujung depan?
Naveenbos
Tidak menunjukkan apa-apa di ujung depan, saya menggunakan nama depan routes.xml, tetapi mengarahkan ke halaman 404 tidak ditemukan
Naveenbos
Ya, saya telah mengikuti yang sama, dan pengalihan menunjukkan 404
Khushbu_sipl
2
Harap perhatikan untuk menempatkan pengontrol Anda di folder yang disebut indeks. Saya sudah mencobanya juga saya punya 404 halaman. Tetapi ketika saya mengunjungi devdocs.magento.com dan membaca instruksi standar, saya berhasil menyelesaikan masalah saya. Saya harap ini akan membantu Anda.
MazeStricks
1
@ MartijnvanHoof Jika Anda menambah modul vendor kontak, pastikan untuk mengikuti apa struktur file dari modul. dan di sana Anda dapat memperluas dan membuat logika Anda sendiri.
MazeStricks
0

Dari respons pilihan saya mengubah baris if($post){menjadiif($post['firstname']){

Jadi saya bisa melihat formulir dari frontend dan melakukan klik untuk mengirim ke tindakan lain.

pengguna60037
sumber