कस्टमर एडिट फॉर्म में ग्राहक कस्टम-विशेषता कैसे जोड़ें?


19

मैंने एक कस्टम कस्टम विशेषता को customer_addressटाइप के रूप में जोड़ा और यह सही तरीके से व्यवस्थापक में और ऑनपेकचेकआउट के साथ-साथ शिपिंग और बिलिंग पते में चलता है।

मैंने बनाया: my_namespace/my_module/etc/module.xmlऔरregistration.php composer.json मॉड्यूल बेस डायरेक्टरी में फाइलें।

my_namespace / my_module / सेटअप / InstallData.php

namespace Namespace\Module\Setup;

use Magento\Framework\Module\Setup\Migration;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

/**
 * @codeCoverageIgnore
 */
class InstallData implements InstallDataInterface
{
    /**
     * Customer setup factory
     *
     * @var CustomerSetupFactory
     */
    private $customerSetupFactory;

    /**
     * Init
     *
     * @param CustomerSetupFactory $customerSetupFactory
     */
    public function __construct(\Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory)
    {
        $this->customerSetupFactory = $customerSetupFactory;
    }

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        /** @var CustomerSetup $customerSetup */
        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);

        $setup->startSetup();

        // insert attribute
        $customerSetup->addAttribute('customer_address', 'attr_code',  [
            'label' => 'My attribute',
            'type' => 'varchar',
            'input' => 'text',
            'position' => 45,
            'visible' => true,
            'required' => false,
            'system' => 0
        ]);

        $MyAttribute = $customerSetup->getEavConfig()->getAttribute('customer_address', 'attr_code');
        $MyAttribute->setData(
            'used_in_forms',
            ['adminhtml_customer_address', 'customer_address_edit', 'customer_register_address']
        );
        $MyAttribute->save();

        $setup->endSetup();
    }
}

अब मुझे ग्राहक addऔर editपता फ़ॉर्म में विशेषता फ़ील्ड जोड़ना होगा जो फ़ाइल से संबंधित हैं magento_customer / view / frontend / टेम्पलेट्स / पता / edit.phtml से संबंधित हैं

मैंने फ़ील्ड जोड़ा लेकिन मैं उस विशेषता का मान प्राप्त करने और सहेजने में सक्षम नहीं हूं।


कौन सा Magento संस्करण?
सोहेल राणा

Magento CE 2.1.0
एएल

हाय अली, क्या आप कस्टम ग्राहक पता विशेषता के लिए अपना काम कोड साझा कर सकते हैं। मुझे भी समान कार्यक्षमता जोड़ने की आवश्यकता है।
राहुल

जवाबों:


9

कस्टम ग्राहक विशेषताएँ कभी भी बैकएंड की तरह सामने वाले पर 'दिखाई' नहीं देंगी। कोड जो उन्हें फ्रंटएंड पर प्रदर्शित करता है वह कस्टम phtml फ़ाइल में स्थित है।

मैगेंटो ईई में यह कार्यक्षमता है। मैं आपको उस पैसे को खर्च करने की आवश्यकता नहीं बता रहा हूं, मैं यह कह रहा हूं कि यह है। यदि आप आगे जाना चाहते हैं और कस्टम विशेषताओं को जोड़ने का प्रयास करते हैं, तो यह कुछ हद तक जटिल है।

सबसे पहले, आपको यह सब एक मॉड्यूल में करना होगा या यह सिर्फ सही काम करने वाला नहीं है, और बाद में इसे डिबग / अपग्रेड करना मुश्किल होगा।

आपको ये काम करने होंगे:

  • विशेषता बनाएँ (यदि आपने इसे व्यवस्थापक में दिखाया है तो यह किया है)
  • ReferenceContainer form.additional.info के लिए फ्रंटएंड लेआउट को ओवरराइड करें
  • अतिरिक्त विशेषता दिखाने के लिए टेम्पलेट phtml फ़ाइल जोड़ें
  • नई विशेषताओं को लोड करने और HTML बनाने के लिए एक ब्लॉक PHP फ़ाइल जोड़ें
  • अन्य चीजें जैसे प्रक्रिया को स्वचालित करना सीखते हैं और हार्ड कोडिंग के बजाय गुणकों को लोड करते हैं, केवल आपके द्वारा बनाए गए नाम को लोड करने के लिए।

आप ब्लॉक PHP में अपनी कस्टम विशेषताओं को लोड कर सकते हैं। तो बस customer_account_create.xmlइस तरह से अपना लेआउट जोड़ें :

<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
    <update handle="customer_form_template_handle"/>
    <body>
        <referenceContainer name="form.additional.info">
            <block class="Company\Customformattributes\Block\FormCustomer" template="Company_Customformattributes::customattributes.phtml" name="customer_form_user_attributes" cacheable="false">
                <action method="setFormCode">
                    <argument name="code" xsi:type="string">customer_account_edit</argument>
                </action>
                <action method="setEntityModelClass">
                    <argument name="code" xsi:type="string">Magento\Customer\Model\Customer</argument>
                </action>
            </block>
        </referenceContainer>
    </body>
</page>

यह आपके ब्लॉक PHP को लोड करने के लिए, आपके phtml को लोड करने के लिए, और इसे सही पेज में लाने के लिए मैजिक सॉस है।

यह पूरी तरह से ईमानदारी से जवाब नहीं है, इसके लिए बहुत कुछ है, लेकिन आपको मूल विचार मिलता है।


क्या आप अपना जवाब पूरा कर सकते हैं? आपने ब्लॉक और टेम्पलेट फ़ाइल में क्या दर्ज किया है?
चिराग

setEntityModelClass कार्रवाई स्वचालित रूप से हमारी विशेषता को बचा सकती है या हमें बचत विशेषता के लिए भी कोड लिखने की आवश्यकता है?
सिद्धेश

2

आपके प्रश्न का उत्तर नहीं दे सकता है, क्योंकि पर्याप्त कोड प्रदान नहीं किया गया है, लेकिन थोड़ी सलाह है। आप इस ट्यूटोरियल की जाँच की थी ग्राहक attirbute ट्यूटोरियल जोड़ा जा रहा है ?

Magento 2.1 के बाद से एक परिवर्तन और तरीके हैं -> सहेजें () को हटा दिया गया है। आपको इसके बजाय रिपॉजिटरी का उपयोग शुरू करना चाहिए। ग्राहक EAV के लिए उदाहरण के लिए आपको उपयोग करना चाहिए

Magento \ EAV \ मॉडल \ AttributeRepository

आपके मामले में, स्क्रिप्ट के दूसरे भाग को बदल दिया जाना चाहिए

/** Magento\Eav\Model\AttributeRepository $attributeRepository */
    $attributeRepository->save($MyAttribute);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.