4

I'm working on Custom module in which I need to override Magento's reviews Module. I want to add some extra fields in Magento's Review Form. I created Preferences in adminhtml/di.xml Now whenever I add my custom fields code, all the other fields get removed.

class Form extends \Magento\Backend\Block\Widget\Form\Generic
{

public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Framework\Registry $registry,
    \Magento\Framework\Data\FormFactory $formFactory,
    \Magento\Store\Model\System\Store $systemStore,
    \Magento\Review\Helper\Data $reviewData,
    array $data = []
) {
    $this->_reviewData = $reviewData;
    $this->_systemStore = $systemStore;
    parent::__construct($context, $registry, $formFactory, $data);
}

/**
 * Prepare add review form
 *
 * @return void
 * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
 */
protected function _prepareForm()
{
    /** @var \Magento\Framework\Data\Form $form */
    $form = $this->_formFactory->create();

    $fieldset = $form->addFieldset('add_review_form', ['legend' => __('Review Details')]);

    $fieldset->addField('product_name', 'note', ['label' => __('Product'), 'text' => 'product_name']);

    // $fieldset->addField(
    //     'detailed-rating',
    //     'note',
    //     [
    //         'label' => __('Product 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->isSingleStoreMode()) {
    //     $field = $fieldset->addField(
    //         'select_stores',
    //         'multiselect',
    //         [
    //             'label' => __('Visibility'),
    //             'required' => true,
    //             'name' => 'select_stores[]',
    //             'values' => $this->_systemStore->getStoreValuesForForm()
    //         ]
    //     );
    //     $renderer = $this->getLayout()->createBlock(
    //         \Magento\Backend\Block\Store\Switcher\Form\Renderer\Fieldset\Element::class
    //     );
    //     $field->setRenderer($renderer);
    // }

    // $fieldset->addField(
    //     'nickname',
    //     'text',
    //     [
    //         'name' => 'nickname',
    //         'title' => __('Nickname'),
    //         'label' => __('Nickname'),
    //         'maxlength' => '50',
    //         'required' => true
    //     ]
    // );

    // $fieldset->addField(
    //     'title',
    //     'text',
    //     [
    //         'name' => 'title',
    //         'title' => __('Summary of Review'),
    //         'label' => __('Summary of Review'),
    //         'maxlength' => '255',
    //         'required' => true
    //     ]
    // );

    // $fieldset->addField(
    //     'detail',
    //     'textarea',
    //     [
    //         'name' => 'detail',
    //         'title' => __('Review'),
    //         'label' => __('Review'),
    //         'required' => true
    //     ]
    // );

     $fieldset->addFieldset(
        'review_comment',
        ['legend' => __('Review Comment'), 'class' => 'fieldset-wide']
    );

    $fieldset->addField(
        'title_comment',
        'text',
        ['label' => __('Title'), 'required' => false, 'name' => 'comment-title']
    );
    $fieldset->addField(
        'comment',
        'textarea',
        ['label' => __('Comment'), 'required' => false, 'name' => 'comment']
    );
    $fieldset->addField(
        'send_customer',
        'checkbox',
        ['label' => __('Send this Comment to customer'), 'required' => false, 'name' => 'show_to_customer']
    );


    $fieldset->addField('product_id', 'hidden', ['name' => 'product_id']);

    /*$gridFieldset = $form->addFieldset('add_review_grid', array('legend' => __('Please select a product')));
      $gridFieldset->addField('products_grid', 'note', array(
      'text' => $this->getLayout()->createBlock(\Magento\Review\Block\Adminhtml\Product\Grid::class)->toHtml(),
      ));*/

    $form->setMethod('post');
    $form->setUseContainer(true);
    $form->setId('edit_form');
    $form->setAction($this->getUrl('review/product/post'));

    $this->setForm($form);
    return parent::_prepareForm();
    }
}

also, whenever I add my fields using this method $fieldset->addField it gives an error.

4

Use plugin for that.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
   <type name="Magento\Review\Block\Adminhtml\Add\Form">
       <plugin name="review_add_form_custom" type="QaisarSatti\HelloWorld\Plugin\Add\Form" />
   </type>
</config>

Review Add Form

Now Create Form.php file in following directory app\code\QaisarSatti\HelloWorld\Plugin\Adminhtml\Add

namespace QaisarSatti\HelloWorld\Plugin\Adminhtml\Add;

  class Form extends \Magento\Review\Block\Adminhtml\Add\Form
  {
   public function beforeSetForm(\Magento\Review\Block\Adminhtml\Add\Form $object, $form) {

       $fieldset = $form->addFieldset(
           'review_cusom',
           ['legend' => __('Review Custom Field'), 'class' => 'fieldset-wide']
       );

       $fieldset->addField(
           'test',
           'text',
           ['label' => __('Test'), 'required' => false, 'name' => 'test']
       );


       return [$form];
   }
}

Reference

| improve this answer | |
  • Our pleasure. Happy codding! – PROGOSTECH Aug 10 '18 at 17:58
0

If You need to override Magento's reviews Module. I want to add some extra fields in Magento's Review Form.

MagentoFolder/vendor/magento/module-review/view/frontend/templates/form.phtml

Override the Following in your custom Module Layout File.

https://prnt.sc/kffwcc

| improve this answer | |
  • This frontend form. I want to override backend form. – sudo55 Aug 8 '18 at 13:10
0
   *$fieldset->addFieldset(*
      'review_comment',
       ['legend' => __('Review Comment'), 'class' => 'fieldset-wide']
   );

fieldset doesn't have addFieldset() method.So change above code snippet to:

   $fieldset->addField(
      'review_comment',
       ['legend' => __('Review Comment'), 'class' => 'fieldset-wide']
   );
| improve this answer | |
  • I am still confused. Can you plz add one field using above snippet? – sudo55 Aug 8 '18 at 13:12
  • If you take a look at your posted source code, you will find you are doing like: $fieldset->addFieldset(...). I think this is incorrect. – Jeff Yu Aug 10 '18 at 0:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.