ฉันได้สร้างโมดูลที่กำหนดเองที่ฉันจะเอาชนะแบบฟอร์มการเพิ่มลงในรถเข็นในหน้าผลิตภัณฑ์และฉันก็ทำมันสำเร็จด้วยcatalog_product_view.xml
ไฟล์ ตอนนี้ฉันสามารถเห็นฟิลด์อินพุตที่กำหนดเองในมุมมองด้านหน้าของหน้าผลิตภัณฑ์ แต่ฉันต้องโพสต์ค่าของฟิลด์นี้ไปยังฐานข้อมูลด้วยจำนวนราคาและอื่น ๆ และเรียกมันอีกครั้งในประวัติการสั่งซื้อ
ฉันค้นหามาระยะหนึ่งแล้วก็ประสบความสำเร็จในการสร้างคอลัมน์ที่กำหนดเองใหม่ในquote_item
& sales_order
ตาราง (ตามข้อมูลของฉันเพิ่มไปที่รถเข็นรายการไปที่quote_item
และคำสั่งซื้อหลังจากเช็คเอาต์ไปที่sales_order
ตารางหากฉันผิดโปรดแก้ไขฉันด้วยเช่นกันเนื่องจากฉันยังเป็นผู้เรียนอยู่)
ฉันพยายามมากและค้นหา แต่ไม่พบโซลูชันที่เกี่ยวข้อง ผู้ขายชื่อของฉันคือCloudwaysและชื่อโมดูลMyModule ด้านล่างนี้เป็นไฟล์สำหรับโมดูลของฉัน:
Cloudways / MyModule / registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Cloudways_Mymodule',
__DIR__
);
Cloudways / MyModule / etc / module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Cloudways_Mymodule" setup_version="1.0.1"></module>
</config>
Cloudways / MyModule / ติดตั้ง / UpgradeSchema.php
<?php
namespace Cloudways\Mymodule\Setup;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
class UpgradeSchema implements UpgradeSchemaInterface
{
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
if (version_compare($context->getVersion(), '1.0.1') < 0) {
$installer = $setup;
$installer->startSetup();
$connection = $installer->getConnection();
//cart table
$connection->addColumn(
$installer->getTable('quote_item'),
'remarks',
[
'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
'length' => 255,
'comment' =>'Remarks'
]
);
//Order address table
$connection->addColumn(
$installer->getTable('sales_order'),
'remarks',
[
'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
'length' => 255,
'comment' =>'Remarks'
]
);
$installer->endSetup(); }
}
}
Cloudways / MyModule / ดู / ส่วนหน้า / รูปแบบ / catalog_product_view.xml
<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="product.info.addtocart">
<action method="setTemplate">
<argument name="template" xsi:type="string">Cloudways_Mymodule::catalog/product/view/addtocart.phtml</argument>
</action>
</referenceBlock>
<referenceBlock name="product.info.addtocart.additional">
<action method="setTemplate">
<argument name="template" xsi:type="string">Cloudways_Mymodule::catalog/product/view/addtocart.phtml</argument>
</action>
</referenceBlock>
</body>
</page>
Cloudways / MyModule / view / ส่วนหน้า / แม่ / แคตตาล็อกสินค้า / / view / addtocart.phtml
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
/** @var $block \Magento\Catalog\Block\Product\View */
?>
<?php $_product = $block->getProduct(); ?>
<?php $buttonTitle = __('Add to Cart'); ?>
<?php if ($_product->isSaleable()): ?>
<div class="box-tocart">
<div class="fieldset">
<?php if ($block->shouldRenderQuantity()): ?>
<div class="field qty">
<label class="label" for="qty"><span><?php /* @escapeNotVerified */ echo __('Qty') ?></span></label>
<div class="control">
<input type="number"
name="qty"
id="qty"
maxlength="12"
value="<?php /* @escapeNotVerified */ echo $block->getProductDefaultQty() * 1 ?>"
title="<?php /* @escapeNotVerified */ echo __('Qty') ?>" class="input-text qty"
data-validate="<?php echo $block->escapeHtml(json_encode($block->getQuantityValidators())) ?>"
/>
</div>
</div>
<!-- Custom Input Field -->
<div>
<input
type="text"
name="remarks"
id="remarks"
maxlength="255"
placeholder="Remarks"
/>
</div>
<!-- Custom Input Field -->
<br>
<?php endif; ?>
<div class="actions">
<button type="submit"
title="<?php /* @escapeNotVerified */ echo $buttonTitle ?>"
class="action primary tocart"
id="product-addtocart-button">
<span><?php /* @escapeNotVerified */ echo $buttonTitle ?></span>
</button>
<?php echo $block->getChildHtml('', true) ?>
</div>
</div>
</div>
<?php endif; ?>
<?php if ($block->isRedirectToCartEnabled()) : ?>
<script type="text/x-magento-init">
{
"#product_addtocart_form": {
"Magento_Catalog/product/view/validation": {
"radioCheckboxClosest": ".nested"
}
}
}
</script>
<?php else : ?>
<script>
require([
'jquery',
'mage/mage',
'Magento_Catalog/product/view/validation',
'Magento_Catalog/js/catalog-add-to-cart'
], function ($) {
'use strict';
$('#product_addtocart_form').mage('validation', {
radioCheckboxClosest: '.nested',
submitHandler: function (form) {
var widget = $(form).catalogAddToCart({
bindSubmit: false
});
widget.catalogAddToCart('submitForm', $(form));
return false;
}
});
});
</script>
<?php endif; ?>
นี่คือภาพหน้าจอของมุมมองด้านหน้า:
ทั้งหมดที่ฉันต้องการคือการโพสต์ค่าของฟิลด์อินพุตที่กำหนดเองและบันทึกไว้ในฐานข้อมูลพร้อมกับการสั่งซื้อ ขอบคุณล่วงหน้า!
แก้ไข: ฉันทำการเปลี่ยนแปลงที่เคารพตามคำตอบของ RS และนี่คือปัญหาที่ฉันเผชิญ: (PS I AM ใช้ MAGENTO 2.0.9)
ฉันตรวจสอบล็อกไฟล์แล้วและนี่คือสิ่งที่ฉันพบ:
[2016-08-26 07:29:38] main.CRITICAL: exception 'Exception' with message 'Report ID: webapi-57bfefe2d8272; Message: Warning: Invalid argument supplied for foreach() in /home/41209-54048.cloudwaysapps.com/yyzmyegjdk/public_html/app/code/Cloudways/Mymodule/Observer/SalesModelServiceQuoteSubmitBeforeObserver.php on line 67' in /home/41209-54048.cloudwaysapps.com/yyzmyegjdk/public_html/vendor/magento/framework/Webapi/ErrorProcessor.php:194
Stack trace:
#0 /home/41209-54048.cloudwaysapps.com/yyzmyegjdk/public_html/vendor/magento/framework/Webapi/ErrorProcessor.php(139): Magento\Framework\Webapi\ErrorProcessor->_critical(Object(Exception))
#1 /home/41209-54048.cloudwaysapps.com/yyzmyegjdk/public_html/vendor/magento/module-webapi/Controller/Rest.php(163): Magento\Framework\Webapi\ErrorProcessor->maskException(Object(Exception))
#2 /home/41209-54048.cloudwaysapps.com/yyzmyegjdk/public_html/var/generation/Magento/Webapi/Controller/Rest/Interceptor.php(24): Magento\Webapi\Controller\Rest->dispatch(Object(Magento\Framework\App\Request\Http))
#3 /home/41209-54048.cloudwaysapps.com/yyzmyegjdk/public_html/vendor/magento/framework/App/Http.php(115): Magento\Webapi\Controller\Rest\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#4 /home/41209-54048.cloudwaysapps.com/yyzmyegjdk/public_html/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#5 /home/41209-54048.cloudwaysapps.com/yyzmyegjdk/public_html/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#6 {main} [] []
ข้อเสนอแนะใด ๆ โปรด?