मैगेंटो 2.1 नए घटक प्रकार की समस्या को जोड़ रहा है


16

मैंने एक नया फॉर्म एलिमेंट टाइप टाइप किया है Company\Module\Data\Form\Element\PdfButton, जब यह एडिट पेज के प्रोडक्ट version EE 2.0.7एडिटिंग के कस्टम टैब (ओवरराइडिंग द्वारा जोड़ा गया Magento\Catalog\Block\Adminhtml\Product\Edit\Tabs) में इस एलीमेंट का उपयोग करता है ।

Magento EE 2.1 में अपग्रेड करने के बाद, कस्टम टैब गायब हो गया। इसे प्रदर्शित करने के लिए, मैंने उत्पाद पृष्ठ में एक नया टैब बनाने के लिए एक संशोधक जोड़ा। मैंने विक्रेता फ़ाइल में संशोधक को कॉपी करके एक नया टैब सफलतापूर्वक जोड़ा और इसे अपने मॉड्यूल पर इंजेक्ट किया।

लेकिन, जब मैं अपने कस्टम तत्व का उपयोग करना चाहता हूं। तो, मेटा सरणी के बच्चों के क्षेत्र में, मैंने निम्नलिखित कोड जोड़ा:

$children[$website['id']] = [
                'arguments' => [
                    'data' => [
                        'config' => [
                            'dataType' => Form\Element\DataType\Number::NAME,
                            'componentType' => Form\Field::NAME,
                            'formElement' => Form\Element\Wysiwyg2::NAME,
                            'description' => __($website['name']),
                            'tooltip' => $tooltip,
                            'sortOrder' => $sortOrder,
                            'dataScope' => 'website_ids.' . $website['id'],
                            'label' => "Pdf Upload",
                            'valueMap' => [
                                'true' => (string)$website['id'],
                                'false' => '0',
                            ],
                            'value' => $isChecked ? (string)$website['id'] : '0',
                        ],
                    ],
                ],
            ];

इसके बाद, मैंने Form\Element\Wysiwygइसे कॉपी किया और इसे चिपका दिया Form\Element\Wysiwyg2। में Wysiwyg2 कक्षा:

<?php

/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Ui\Component\Form\Element;

use Magento\Framework\Data\Form\Element\Editor;
use Magento\Framework\Data\Form;
use Magento\Framework\Data\FormFactory;
use Magento\Framework\DataObject;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Ui\Component\Wysiwyg\ConfigInterface;

/**
 * Class Input
 */
class Wysiwyg2 extends AbstractElement
{
    const NAME = 'wysiwyg2';

    /**
     * @var Form
     */
    protected $form;

    /**
     * @var Editor
     */
    protected $editor;

    /**
     * @param ContextInterface $context
     * @param FormFactory $formFactory
     * @param ConfigInterface $wysiwygConfig
     * @param array $components
     * @param array $data
     * @param array $config
     */
    public function __construct(
        ContextInterface $context,
        FormFactory $formFactory,
        ConfigInterface $wysiwygConfig,
        array $components = [],
        array $data = [],
        array $config = []
    ) {
        $wysiwygConfigData = isset($config['wysiwygConfigData']) ? $config['wysiwygConfigData'] : [];
        $this->form = $formFactory->create();
        $this->editor = $this->form->addField(
            $context->getNamespace() . '_' . $data['name'],
            'Magento\Framework\Data\Form\Element\Editor',
            [
                'force_load' => true,
                'rows' => 20,
                'name' => $data['name'],
                'config' => $wysiwygConfig->getConfig($wysiwygConfigData),
                'wysiwyg' => isset($config['wysiwyg']) ? $config['wysiwyg'] : null,
            ]
        );
        $data['config']['content'] = $this->editor->getElementHtml();

        parent::__construct($context, $components, $data);
    }

    /**
     * Get component name
     *
     * @return string
     */
    public function getComponentName()
    {
        return static::NAME;
    }}

लेकिन एक त्रुटि है और मुझे नहीं पता कि मुझे उस नाम को कहां जोड़ना चाहिए।

1 exception(s):
Exception #0 (Magento\Framework\Exception\LocalizedException): The requested component ("wysiwyg2") is not found. Before using, you must add the implementation.

Exception #0 (Magento\Framework\Exception\LocalizedException): The requested component ("wysiwyg2") is not found. Before using, you must add the implementation.
#0 /var/www/vhosts/plchk/vendor/magento/module-ui/Model/Manager.php(207): Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition->getComponentData('wysiwyg2')
#1 /var/www/vhosts/plchk/vendor/magento/framework/View/Element/UiComponentFactory.php(187): Magento\Ui\Model\Manager->createRawComponentData('wysiwyg2')
#2 /var/www/vhosts/plchk/vendor/magento/module-ui/Component/Form/Field.php(82): Magento\Framework\View\Element\UiComponentFactory->create(1, 'wysiwyg2', Array)
#3 /var/www/vhosts/plchk/vendor/magento/framework/View/Layout/Generator/UiComponent.php(148): Magento\Ui\Component\Form\Field->prepare()
#4 /var/www/vhosts/plchk/vendor/magento/framework/View/Layout/Generator/UiComponent.php(145): Magento\Framework\View\Layout\Generator\UiComponent->prepareComponent(Object(Magento\Ui\Component\Form\Field))

जवाबों:


1

जहां तक ​​मेरी समझ है, आप पूरे नए यूआई घटक प्रकार को जोड़ने की कोशिश कर रहे हैं जो कॉल करते हैं wysiwyg2

लेकिन दुर्भाग्य से, नए यूआई घटक प्रकार (हाँ, बस एक और एक) को जोड़ने के बारे में एक ज्ञात मुद्दा है। आप मूल मुद्दे की अधिकता की जांच कर सकते हैं ।

उत्पाद रूप में Ui घटकों के साथ काम करने वाले Magento 2 कैसे पर एक नज़र डालते हैं।

विक्रेता / Magento / मॉड्यूल-सूची / Ui / dataProvider / उत्पाद / प्रपत्र / संशोधक / Eav.php

/**
 * Add wysiwyg properties
 *
 * @param ProductAttributeInterface $attribute
 * @param array $meta
 * @return array
 */
private function customizeWysiwyg(ProductAttributeInterface $attribute, array $meta)
{
    if (!$attribute->getIsWysiwygEnabled()) {
        return $meta;
    }

    $meta['arguments']['data']['config']['formElement'] = WysiwygElement::NAME;
    $meta['arguments']['data']['config']['wysiwyg'] = true;
    $meta['arguments']['data']['config']['wysiwygConfigData'] = [
        'add_variables' => false,
        'add_widgets' => false,
        'add_directives' => true,
        'use_container' => true,
        'container_class' => 'hor-scroll',
    ];

    return $meta;
}

और अंदर public function setupAttributeMeta(ProductAttributeInterface $attribute, $groupCode, $sortOrder)

पंक्ति 633 (प्रत्येक संस्करण के लिए भिन्न हो सकती है)

        case 'textarea':
            $meta = $this->customizeWysiwyg($attribute, $meta);
            break;

जैसा कि आप देख सकते हैं, customizeWysiwyg()हार्ड-कोडित formElementहै wysiwyg

यदि आप wysiwyg2काम करना चाहते हैं , तो आपको setupAttributeMeta()कुछ जोड़ने के लिए एक प्लगइन लिखना होगा$meta = $this->customizeWysiwyg2($attribute, $meta);

लेकिन मैं इसे प्रोत्साहित नहीं करता हूं, आप सिर्फ एक प्राथमिकता बना सकते हैं \Magento\Ui\Component\Form\Element\Wysiwyg, फिर कंस्ट्रक्टर के अंदर आप कुछ ऐसा कर सकते हैं

/**
 * Wysiwyg constructor.
 *
 * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
 * @param \Magento\Framework\Data\FormFactory                          $formFactory
 * @param \Magento\Ui\Component\Wysiwyg\ConfigInterface                $wysiwygConfig
 * @param array                                                        $components
 * @param array                                                        $data
 * @param array                                                        $config
 */
public function __construct(
    ContextInterface $context,
    FormFactory $formFactory,
    ConfigInterface $wysiwygConfig,
    array $components = [],
    array $data = [],
    array $config = []
) {
    // Override the component for the WYSIWYG
    // This is not done using definition.xml due to https://github.com/magento/magento2/issues/5647
    $data['config']['component'] = 'Stackoverflow_Toan/js/form/element/wysiwyg';

    // Override the templates to include our KnockoutJS code
    $data['config']['template'] = 'Stackoverflow_Toan/wysiwyg';
    $data['config']['elementTmpl'] = 'Stackoverflow_Toan/wysiwyg';

    parent::__construct($context, $formFactory, $wysiwygConfig, $components, $data, $config);
}

इस तरह, आप अपने खुद के jsComponent, नॉकआउट टेम्प्लेट हो सकते हैं .. जो भी आप चाहते हैं उसे अनुकूलित करने के लिए तैयार हैं।

उम्मीद है की यह मदद करेगा :)

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