خیریه
خیریه

تبلیغات

چند وقتی هست پستی در مورد مجنتو نذاشتم، در این پست آموزش اضافه کردن Attribute جدید به Customer را در یک ماژول آموزش می‌دهیم. بعد چند وقت کار با Magento2، به عنوان کسی که با مجنتو۱ تجربه خوبی داشتم؛ میتونم بگم یکی از سخت‌ترین و پیچیده‌ترین محیط توسعه بدون شک در اختیار مجنتو۲ هست!

مجنتو۲ در حالت Development بقدری از منابع سیستم استفاده میکند، که میتونید هزینه سخت‌افزار جدید را هم توی محاسبات قیمتی لحاظ کنید؟! میتوانید آموزش نصب مجنتو۲ را در وبلاگ‌ما مشاهده کنید. بگذریم، بریم سراغ افزودن ویژگی و فیلد جدید به مشتری در مجنتو ۲:

مرحله اول: ساخت ماژول جدید

برای ساخت یک ماژول custom در مجنتو۲ باید در مسیر زیر فایلهایی که مشخص شده را بسازید:

app/code/Weblogma/Customer

app/code/Weblogma/Customer/etc/module.xml

module.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Weblogma_Customer" setup_version="1.0.0">
    </module>
</config>

app/code/Weblogma/Customer/registration.php

registration.php:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
	'Weblogma_Customer',
	__DIR__
);

Commands:
php bin/magento module:enable Weblogma_Customer
php bin/magento setup:upgrade


احتمالا در پستی دیگر آموزش کامل ساخت یک ماژول جدید در مجنتو۲ را توضیح خواهم داد. ولی در حال حاضر کارهای بالا را انجام بدهید کافیست. در ضمن Weblogma بعنوان Vendor و Customer نیز اسم ماژول ماست.

 

مرحله دوم : ساخت Setup ماژول

برای ساخت Attribute های جدید باید فایل زیر را در مسیر مشخص شده بسازید.

app/code/Weblogma/Customer/Setup/InstallData.php

InstallData.php:

<?php

namespace Weblogma\Customer\Setup;
use Magento\Customer\Model\Customer;
use Magento\Customer\Setup\CustomerSetup;
use Magento\Customer\Setup\CustomerSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface {
    /**
     * Customer setup factory
     *
     * @var \Magento\Customer\Setup\CustomerSetupFactory
     */
    private $customerSetupFactory;
    public function __construct(CustomerSetupFactory $customerSetupFactory) {
        $this->customerSetupFactory = $customerSetupFactory;
    }

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

           $customerSetup->addAttribute(Customer::ENTITY, 'client_idn', [
            'label' => 'Client IDN',
            'input' => 'text',
            'required' => false,
            'sort_order' => 40,
            'visible' => true,
            'system' => false,
            'is_used_in_grid' => true,
            'is_visible_in_grid' => true,
            'is_filterable_in_grid' => true,
            'is_searchable_in_grid' => true]
        );
//set customer attribute set
$customerSetup->addAttributeToSet(
            CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER,
CustomerMetadataInterface::ATTRIBUTE_SET_ID_CUSTOMER,
            null,
            'company_id');
        // add attribute to form
        /** @var  $attribute */
        $attribute = $customerSetup->getEavConfig()->getAttribute('customer', 'client_idn');
        $attribute->setData('used_in_forms', ['adminhtml_customer', 'customer_account_create']);
        $attribute->save();

         $setup->endSetup();
    }
}

در فایل بالا ما یک Attribute جدید را ایجاد کرده که مثلا برای ذخیره سازی کد ملی استفاده می‌شود. حال باید دوباره دستور setup:upgrade را اجرا کنید. در ضمن بخش دوم سورس بالا به مجنتو می گوید که در چه فرم‌هایی این مقدار ذخیره می شود. سایر فرم‌هایی که ممکن است مدنظر قرار گیرد عبارتند از:

  • adminhtml_checkout
  • adminhtml_customer
  • adminhtml_customer_address
  • customer_account_create
  • customer_account_edit
  • customer_address_edit
  • customer_register_address

مرحله سوم : نمایش در Frontend

یر فایلهایی که مشخص شده را بسازید:

app/code/Weblogma/view/layout/customer_account_create.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceContainer name="form.additional.info">
        <block class="Magento\Framework\View\Element\Template" name="additional_info_customer_client_idn" template="Weblogma_Customer::adinfcustomer.phtml"/>
    </referenceContainer>
</body>
</page>

Create ٌWeblogma/Customer/view/frontend/templates/adinfcustomer.phtml


<fieldset class="fieldset create account" data-hasrequired="<?php /* @escapeNotVerified */ echo __('* Required Fields') ?>">
    <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Additional Information') ?></span></legend>
    <p>
    <div class="field regulation">
        <label for="regulation" class="label"><span><?php /* @escapeNotVerified */
                echo __('Client IDN') ?></span></label>
        <div class="control">
            <input type="text" name="client_idn" id="client_idn" title="<?php /* @escapeNotVerified */ echo __('Client IDN') ?>" class="input-text" data-validate="{required:false}">
        </div>
    </div>
    </p>
</fieldset>

 

حال باید کش را پاک کرده و درستی کار را چک کنید. اگر در نوشتن این کدها با مشکل مواجه شدید در دیدگاه‌ها اعلام کنید.

«برای اطلاع از بروزرسانی ها و مطالب جدید در کانال ما عضو شوید»