I am trying to add a custom field in review form in the product page. Below is my code:
InstallData.php
namespace Namespace\Mymodule\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
Class InstallData implements InstallDataInterface
{
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$installer = $setup;
$setup->startSetup();
// $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$reviewTable = 'review_detail';
$setup->getConnection()
->addColumn(
$setup->getTable($reviewTable),
'refer_field',
[
'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
'label' => 'Would you recommend this product to a friend',
'comment' =>'Would you recommend this product to a friend',
'input' => 'select',
'required' => false,
'visible' => true,
'user_defined' => true,
'sort_order' => 101,
'position' => 101,
'system' => 0,
'option' =>
array (
'values' =>
array (
0 => 'Yes',
1 => 'No',
),
),
]
);
$setup->endSetup();
}
}
app/code/Namespace/Mymodule/view/frontend
<?xml version="1.0"?>
<!--
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<update handle="review_product_form_component"/>
<body>
<referenceBlock name="product.info.details">
<block class="Magento\Review\Block\Product\Review" name="reviews_tab" as="reviews" template="Namespace_Mymodule::review.phtml" group="detailed_info">
<block class="Magento\Review\Block\Form" name="review_form" template="Namespace_Mymodule::form.phtml" as="review_form">
<container name="product.review.form.fields.before" as="form_fields_before" label="Review Form Fields Before"/>
</block>
</block>
</referenceBlock>
</body>
</page>
app/code/Namespace/Mymodule/view/frontend/templates
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
/**
* @var $block \Magento\Review\Block\Form
*/
?>
<div class="block review-add">
<div class="block-title"><strong><?php /* @escapeNotVerified */ echo __('Write Your Own Review') ?></strong></div>
<div class="block-content">
<?php if ($block->getAllowWriteReviewFlag()): ?>
<form action="<?php /* @escapeNotVerified */ echo $block->getAction() ?>" class="review-form" method="post" id="review-form" data-role="product-review-form" data-bind="scope: 'review-form'">
<?php echo $block->getBlockHtml('formkey'); ?>
<?php echo $block->getChildHtml('form_fields_before')?>
<fieldset class="fieldset review-fieldset" data-hasrequired="<?php __('* Required Fields'); ?>">
<legend class="legend review-legend"><span><?php /* @escapeNotVerified */ echo __("You're reviewing:"); ?></span><strong><?php echo $block->escapeHtml($block->getProductInfo()->getName()) ?></strong></legend><br />
<?php if ($block->getRatings() && $block->getRatings()->getSize()): ?>
<span id="input-message-box"></span>
<fieldset class="field required review-field-ratings">
<legend class="label"><span><?php /* @escapeNotVerified */ echo __('Your Rating') ?><span></legend><br/>
<div class="control">
<div class="nested" id="product-review-table">
<?php foreach ($block->getRatings() as $_rating): ?>
<div class="field choice review-field-rating">
<label class="label" id="<?php echo $block->escapeHtml($_rating->getRatingCode()) ?>_rating_label"><span><?php echo $block->escapeHtml($_rating->getRatingCode()) ?></span></label>
<div class="control review-control-vote">
<?php $options = $_rating->getOptions();?>
<?php $iterator = 1; foreach ($options as $_option): ?>
<input
type="radio"
name="ratings[<?php /* @escapeNotVerified */ echo $_rating->getId() ?>]"
id="<?php echo $block->escapeHtml($_rating->getRatingCode()) ?>_<?php /* @escapeNotVerified */ echo $_option->getValue() ?>"
value="<?php /* @escapeNotVerified */ echo $_option->getId() ?>"
class="radio"
data-validate="{required:true, messages:{required:'Please select one of each of the ratings above.'}}"
aria-labelledby="<?php echo $block->escapeHtml($_rating->getRatingCode()) ?>_rating_label <?php echo $block->escapeHtml($_rating->getRatingCode()) ?>_<?php /* @escapeNotVerified */ echo $_option->getValue() ?>_label" />
<label
class="rating-<?php /* @escapeNotVerified */ echo $iterator; ?>"
for="<?php echo $block->escapeHtml($_rating->getRatingCode()) ?>_<?php /* @escapeNotVerified */ echo $_option->getValue() ?>"
title="<?php /* @escapeNotVerified */ echo __('%1 %2', $iterator, $iterator > 1 ? 'stars' : 'star') ?>"
id="<?php echo $block->escapeHtml($_rating->getRatingCode()) ?>_<?php /* @escapeNotVerified */ echo $_option->getValue() ?>_label">
<span><?php /*@escapeNotVerified*/ echo __('%1 %2', $iterator, $iterator > 1 ? 'stars' : 'star') ?></span>
</label>
<?php $iterator++; ?>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
<input type="hidden" name="validate_rating" class="validate-rating" value="" />
</div>
</fieldset>
<?php endif ?>
<div class="field review-field-nickname required">
<label for="nickname_field" class="label"><span><?php /*@escapeNotVerified*/ echo __('Nickname') ?></span></label>
<div class="control">
<input type="text" name="nickname" id="nickname_field" class="input-text" data-validate="{required:true}" data-bind="value: nickname()" />
</div>
</div>
<div class="field review-field-summary required">
<label for="summary_field" class="label"><span><?php /*@escapeNotVerified*/ echo __('Summary') ?></span></label>
<div class="control">
<input type="text" name="title" id="summary_field" class="input-text" data-validate="{required:true}" data-bind="value: review().title" />
</div>
</div>
<div class="field review-field-text required">
<label for="review_field" class="label"><span><?php /*@escapeNotVerified*/ echo __('Review') ?></span></label>
<div class="control">
<textarea name="detail" id="review_field" cols="5" rows="3" data-validate="{required:true}" data-bind="value: review().detail"></textarea>
</div>
</div>
<div class="field review-field-refer required">
<label for="review_field" class="label"><span><?php/*@escapeNotVerified*/ echo __('Would you recommend this product to a friend') ?></span></label>
<div class="control">
<select name="refer_field">
<option name="yes" value="yes">Yes</option>
<option name="no" value="no">No</option>
</select>
</div>
</div>
</fieldset>
<div class="actions-toolbar review-form-actions">
<div class="primary actions-primary">
<button type="submit" class="action submit primary"><span><?php/*@escapeNotVerified*/ echo __('Submit Review') ?></span></button>
</div>
</div>
</form>
<script type="text/x-magento-init">
{
"[data-role=product-review-form]": {
"Magento_Ui/js/core/app": <?php /* @escapeNotVerified */ echo $block->getJsLayout();?>
},
"#review-form": {
"Magento_Review/js/error-placement": {}
}
}
</script>
<?php else: ?>
<div class="message info notlogged" id="review-form">
<div>
<?php /* @escapeNotVerified */ echo __('Only registered users can write reviews. Please <a href="%1">Sign in</a> or <a href="%2">create an account</a>', $block->getLoginLink(), $block->getRegisterUrl()) ?>
</div>
</div>
<?php endif ?>
</div>
</div>
What is the proper way to save data in the database and how to show the same field in the admin panel where review form appears?
Thanks in advance!