>

magento2를 처음 사용합니다. Magento2 기본 제공 제품 검토 확장 프로그램의 기본 레이아웃과 기능을 사용하여 사용자 지정 제품 검토 확장 프로그램을 만들고 싶습니다.

내 사용자 정의 productreview 확장으로 Magento_Review buit-in 확장의 복제본을 생성하려고합니다.

이것이 올바른 방법입니까?

감사합니다


  • 답변 # 1

    모듈의 사용 사례에 대해 좀 더 설명해야합니다.

    그러나 핵심 모듈의 클론을 만드는 질문에 대답하는 것은 올바른 접근법이 아닙니다.

    Magento 2는 확장 성이 매우 뛰어나므로 플러그인, 의존성 주입, 옵저버를 사용하여 핵심 Magento 제품 검토 방법을 확장/수정하는 맞춤형 모듈을 구현하여 원하는 것을 얻을 수 있어야한다고 생각합니다 작동합니다.

    이것은 좋은 출발점이되어야합니다 : http://devdocs.magento.com/guides/v2.2/extension-dev-guide/module-development.html

  • 답변 # 2

    app \ code {Namespace} {ModuleName} \ Block \ Adminhtml \ Edit

    의 from.php 코드입니다.
    <?php
    /**
     * Copyright © Magento, Inc. All rights reserved.
     * See COPYING.txt for license details.
     */
    /**
     * Adminhtml Review Edit Form
     */
    namespace {Namespace}\{ModuleName}\Block\Adminhtml\Edit;
    class Form extends \Magento\Review\Block\Adminhtml\Edit\Form
    {
    
        /**
         * Prepare edit review form
         *
         * @return                                        $this
         * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
         */
        protected function _prepareForm()
        {
            //die('over write');
            $review = $this->_coreRegistry->registry('review_data');
            $product = $this->_productFactory->create()->load($review->getEntityPkValue());
            /**
     * @var \Magento\Framework\Data\Form $form 
    */
            $form = $this->_formFactory->create(
                [
                    'data' => [
                        'id' => 'edit_form',
                        'action' => $this->getUrl(
                            'review/*/save',
                            [
                                'id' => $this->getRequest()->getParam('id'),
                                'ret' => $this->_coreRegistry->registry('ret')
                            ]
                        ),
                        'method' => 'post',
                    ],
                ]
            );
            $fieldset = $form->addFieldset(
                'review_details',
                ['legend' => __('Review Details'), 'class' => 'fieldset-wide']
            );
            $fieldset->addField(
                'product_name',
                'note',
                [
                    'label' => __('Product'),
                    'text' => '<a href="' . $this->getUrl(
                        'catalog/product/edit',
                        ['id' => $product->getId()]
                    ) . '" onclick="this.target=\'blank\'">' . $this->escapeHtml(
                        $product->getName()
                    ) . '</a>'
                ]
            );
            try {
                $customer = $this->customerRepository->getById($review->getCustomerId());
                $customerText = __(
                    '<a href="%1" onclick="this.target=\'blank\'">%2 %3</a> <a href="mailto:%4">(%4)</a>',
                    $this->getUrl('customer/index/edit', ['id' => $customer->getId(), 'active_tab' => 'review']),
                    $this->escapeHtml($customer->getFirstname()),
                    $this->escapeHtml($customer->getLastname()),
                    $this->escapeHtml($customer->getEmail())
                );
            } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
                $customerText = ($review->getStoreId() == \Magento\Store\Model\Store::DEFAULT_STORE_ID)
                    ? __('Administrator') : __('Guest');
            }
            $fieldset->addField('customer', 'note', ['label' => __('Author'), 'text' => $customerText]);
    
            $fieldset->addField(
                'created_at',
                'date',
                [
                    'name' => 'created_at',
                    'title' => __('CreateAt'),
                    'label' => __('CreateAt'),
                    'maxlength' => '50',
                    'required' => true,
                    'date_format' => 'yyyy-MM-dd'
                ]
            );
            $fieldset->addField(
                'summary-rating',
                'note',
                [
                    'label' => __('Summary Rating'),
                    'text' => $this->getLayout()->createBlock(
                        \Magento\Review\Block\Adminhtml\Rating\Summary::class
                    )->toHtml()
                ]
            );
            $fieldset->addField(
                'detailed-rating',
                'note',
                [
                    'label' => __('Detailed Rating'),
                    'required' => true,
                    'text' => '<div id="rating_detail">' . $this->getLayout()->createBlock(
                        \Magento\Review\Block\Adminhtml\Rating\Detailed::class
                    )->toHtml() . '</div>'
                ]
            );
            $fieldset->addField(
                'status_id',
                'select',
                [
                    'label' => __('Status'),
                    'required' => true,
                    'name' => 'status_id',
                    'values' => $this->_reviewData->getReviewStatusesOptionArray()
                ]
            );
            /**
             * Check is single store mode
             */
            if (!$this->_storeManager->hasSingleStore()) {
                $field = $fieldset->addField(
                    'select_stores',
                    'multiselect',
                    [
                        'label' => __('Visibility'),
                        'required' => true,
                        'name' => 'stores[]',
                        'values' => $this->_systemStore->getStoreValuesForForm()
                    ]
                );
                $renderer = $this->getLayout()->createBlock(
                    \Magento\Backend\Block\Store\Switcher\Form\Renderer\Fieldset\Element::class
                );
                $field->setRenderer($renderer);
                $review->setSelectStores($review->getStores());
            } else {
                $fieldset->addField(
                    'select_stores',
                    'hidden',
                    ['name' => 'stores[]', 'value' => $this->_storeManager->getStore(true)->getId()]
                );
                $review->setSelectStores($this->_storeManager->getStore(true)->getId());
            }
            $fieldset->addField(
                'nickname',
                'text',
                ['label' => __('Nickname'), 'required' => true, 'name' => 'nickname']
            );
    
            $fieldset->addField(
                'title',
                'text',
                ['label' => __('Summary of Review'), 'required' => true, 'name' => 'title']
            );
            $fieldset->addField(
                'detail',
                'textarea',
                ['label' => __('Review'), 'required' => true, 'name' => 'detail', 'style' => 'height:24em;']
            );
            $form->setUseContainer(true);
            $form->setValues($review->getData());
            $this->setForm($form);
        }
    }
    
    

관련 자료

  • 이전 c# - Nunit-console 잘못된 매개 변수
  • 다음 mysql - 레코드를 삭제할 때 SQL 트리거가 작동하지 않습니다