Magento2 फ़्रंटेंड में कस्टम फ़ॉर्म कैसे बनाएँ?


19

मैं फ्रंटएंड में एक कस्टम फॉर्म बनाना चाहता हूं और इस फॉर्म का उपयोग करके ग्राहक एक नियुक्ति प्राप्त कर सकता है।

मेरे फॉर्म में, मेरे पास 4 फील्ड्स हैं।

  1. पहला नाम (पाठ दायर)
  2. अंतिम नाम (पाठ दायर)
  3. फ़ोन नंबर (संख्यात्मक क्षेत्र)
  4. एक समय बुकिंग (तिथि समय कैलेंडर के साथ)

इसलिए जब कोई ग्राहक इस फॉर्म को भरता है और सबमिट करता है तो मैं इस डेटा को डेटाबेस में डालना चाहता हूं और एडमिन सेक्शन में दिखाता हूं।

मैं Magento-2.1 में यह कार्यक्षमता कैसे प्राप्त कर सकता हूं

मैंने इस लिंक को संदर्भित किया है लेकिन यह मेरी कार्यक्षमता के अनुसार नहीं है।

जवाबों:


41

मान लें कि आपके पास निम्न मॉड्यूल है Company/Module

फ्रंटएंड राउटर बनाएं

/ app / कोड / कंपनी / मॉड्यूल / आदि / सामने / मार्गों। xml

प्रबंधन करने के लिए एक मार्ग बनाएँ:

  • HTML फॉर्म टेम्पलेट को प्रदर्शित करने के लिए अनुरोध प्राप्त करें
  • एक्शन कंट्रोलर क्लास को फॉर्म डेटा भेजने के लिए POST अनुरोध।
<?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>

लेआउट बनाएँ

/ ऐप / कोड / कंपनी / मॉड्यूल / दृश्य / दृश्य / लेआउट / मॉड्यूल_इंडेक्स_बुकिंग.एक्सएमएल

ब्लॉक को प्रपत्र पेज phtml टेम्पलेट से संबद्ध करने के लिए एक मूल लेआउट बनाएँ

<?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>

ब्लॉक बनाएं

/ एप्लिकेशन / कोड / कंपनी / मॉड्यूल / ब्लॉक / बुकिंग। एफपी

अपने फ़ॉर्म के लिए इच्छित कई फ़ंक्शन के साथ एक ब्लॉक बनाएं।

<?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
    }
}

टेम्पलेट बनाएँ

/ ऐप / कोड / कंपनी / मॉड्यूल / दृश्य / दृश्य / टेम्प्लेट / book.phtml

अपने HTML फॉर्म के साथ एक टेम्प्लेट बनाएं और रूटिंग के अनुरूप फॉर्म एक्शन जोड़ें।

<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>

एक्शन कंट्रोलर बनाएं

/ एप्लिकेशन / कोड / कंपनी / मॉड्यूल / नियंत्रक / सूचकांक / Booking.php

मार्ग पर अनुरोधों का प्रबंधन करने के लिए एक एक्शन कंट्रोलर बनाएं।

<?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();
    }
}

फिर से शुरू करने में आपके पास निम्नलिखित वास्तुकला होगी:

एप्लिकेशन
  ├ कोड
  | ├ कंपनी
  | | ├ मॉड्यूल
  | | | ├ ब्लॉक
  | | | | Ph बुकिंग करना
  | | | ├ नियंत्रक
  | | | | ├ सूचकांक
  | | | | | Ph बुकिंग करना
  | | | ├ आदि
  | | | | ├ सामने करना
  | | | | | Ml मार्गों। xml
  | | | ├ दृश्य
  | | | | ├ सामने करना
  | | | | | ├ लेआउट
  | | | | | | Ex मॉड्यूल_इंडेक्स_बुकिंग.एक्सएमएल
  | | | | | ├ टेम्पलेट्स
  | | | | | | T Book.phtml

फिर निम्नलिखित आदेश चलाएँ:

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

फिर आप अपने कस्टम फॉर्म पेज: http: // localhost / companymodule / index / बुकिंग तक पहुंच सकते हैं

हैप्पी कोडिंग!


मैं यह कैसे देख सकता हूं कि यह फ्रंट एंड में है?
नवेंबोस

सामने के छोर पर कुछ भी नहीं दिखा रहा है, मैंने मार्गों का उपयोग किया है। xml फ्रंटनाम, लेकिन यह 404 नहीं पाया गया पृष्ठ पर पुनर्निर्देशित कर रहा है
नवेंबोस

हां, मैंने उसी का अनुसरण किया है, और पुनर्निर्देशन 404 दिखाता है
खुशबू

2
कृपया अपने नियंत्रक को अनुक्रमणिका नामक फ़ोल्डर में रखने के लिए ध्यान दें। मैंने कोशिश की है कि मुझे भी 404 पेज मिले। लेकिन जैसा कि मैंने devdocs.magento.com का दौरा किया और मानक निर्देशों को पढ़ा, मैं अपनी समस्या को हल करने में कामयाब रहा। उम्मीद है इससे आपको मदद मिलेगी।
MazeStricks

1
@MartijnvanHoof यदि आप संपर्क विक्रेता मॉड्यूल का विस्तार करते हैं, तो सुनिश्चित करें कि मॉड्यूल की फ़ाइल संरचना क्या है। और वहां आप अपने स्वयं के तर्क का विस्तार और निर्माण कर सकते हैं।
भूलभुलैया

0

पसंद की प्रतिक्रिया से मैं लाइन if($post){को बदल देता हूं if($post['firstname']){

और इसलिए मैं फ्रंटएंड से फॉर्म देख सकता हूं और दूसरी कार्रवाई को भेजने के लिए एक क्लिक कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.