홈>
magento2를 처음 사용합니다. Magento2 기본 제공 제품 검토 확장 프로그램의 기본 레이아웃과 기능을 사용하여 사용자 지정 제품 검토 확장 프로그램을 만들고 싶습니다.
내 사용자 정의 productreview 확장으로 Magento_Review buit-in 확장의 복제본을 생성하려고합니다.
이것이 올바른 방법입니까?
감사합니다
- 답변 # 1
- 답변 # 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); } }
관련 자료
- php - WooCommerce 맞춤 주문 내역의 제품 제목에 영구 링크 추가
- wordpress - 장바구니에 특정 제품을 추가하려면 장바구니 페이지에 맞춤 검색 버튼 추가
- visual studio code - VSCode 확장의 사용자 정의보기 장식
- php - woocommerce 이메일의 제품 사용자 정의 필드 (이미지) 출력
- php - woocommerce 이메일 헤더의 제품 사용자 정의 필드 출력
- cocoa - macOS에 확장자가 png가 아닌 사용자 정의 파일 형식은 유효한 png라고 알려줍니다
- woocommerce - 제품 속성 기간별 사용자 정의 이메일
- php - Custom Wordpress API Endpoint로 WooCommerce 제품 업데이트
- 전체 솔루션에서 사용자 지정 C # 리팩토링을위한 Visual Studio 2017 Extension
- php - 사용자 정의 PhpSpec 매처 및/또는 확장이 작동하지 않습니다
- c# - nopCommerce의 제품 ID에서 기본 nop 모델 사용자 정의 특성에 액세스
- azure devops - 사용자 정의 확장을 설치할 방법이 없습니다
- android - 사용자 정의 확장명을 가진 텍스트 파일을 작성하고 읽는 방법은 무엇입니까?
- php - 사용자 정의 필드 데이터를 장바구니에 저장하고 Woocommerce 제품 변형 주문
- 리뷰 후 제품 페이지에 알림 표시 WooCommerce에 제출
- 로그인시 JWT 토큰의 Azure Active Directory에서 사용자 지정 확장 특성을 전달하는 방법은 무엇입니까?
- WooCommerce에서 제품 카테고리가 표시된 후 제품 전에 사용자 정의 컨텐츠를 표시하는 방법이 있습니까?
- php - 맞춤 게시물 유형이 게시 될 때 이름이 같은 WooCommerce 제품 생성
- ios - UIButton에서 확장과 사용자 정의 클래스를 결합하면 문제가 발생합니다
- php - 맞춤 관리 주문 이메일에 Woocommerce 제품 이미지 표시
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- JavaScript 변수를 HTML div에 '출력'하는 방법
- python - 문자열에서 특정 문자 제거
모듈의 사용 사례에 대해 좀 더 설명해야합니다.
그러나 핵심 모듈의 클론을 만드는 질문에 대답하는 것은 올바른 접근법이 아닙니다.
Magento 2는 확장 성이 매우 뛰어나므로 플러그인, 의존성 주입, 옵저버를 사용하여 핵심 Magento 제품 검토 방법을 확장/수정하는 맞춤형 모듈을 구현하여 원하는 것을 얻을 수 있어야한다고 생각합니다 작동합니다.
이것은 좋은 출발점이되어야합니다 : http://devdocs.magento.com/guides/v2.2/extension-dev-guide/module-development.html