Saya telah membuat modul khusus di mana saya mengganti form tambah ke keranjang pada halaman produk, dan saya berhasil melakukannya dengan catalog_product_view.xml
file. Sekarang saya dapat melihat bidang input khusus pada tampilan depan halaman produk, tetapi saya perlu memposting nilai bidang ini ke basis data dengan Qty, harga, dll. Dan mengambilnya kembali dalam riwayat pesanan.
Saya mencari beberapa saat dan juga berhasil membuat kolom kustom baru di quote_item
& sales_order
tabel. (Sesuai informasi saya, tambahkan ke entri keranjang pergi ke quote_item
dan pesanan setelah checkout pergi ke sales_order
meja. Jika saya salah tentang hal itu, tolong perbaiki saya dalam hal ini juga karena saya masih pelajar.)
Saya mencoba banyak dan mencarinya tetapi tidak menemukan solusi yang relevan. Nama vendor saya adalah Cloudways dan nama modul adalah Mymodule . Di bawah ini adalah file untuk modul saya:
Cloudways / Mymodule / registrasi.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 / Setup / 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 / view / frontend / layout / 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 / frontend / templates / katalog / produk / 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; ?>
Ini adalah screenshot tampilan depan:
Yang saya butuhkan adalah memposting nilai bidang input khusus dan menyimpannya dalam database bersama dengan pesanan. Terima kasih sebelumnya!
EDIT: SAYA MEMBUAT PERUBAHAN RESPEKTIF SESUAI DENGAN JAWABAN RS DAN DI SINI MASALAH YANG AKU HADAPI: (PS I AM MENGGUNAKAN MAGENTO 2.0.9)
Saya memeriksa file log dan inilah yang saya temukan:
[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} [] []
Ada saran?
Jawaban:
Untuk mencapai ini, Anda dapat menggunakan fungsi magento builtin "additional_options" sehingga Anda tidak perlu mengedit templat email, tampilan pesanan admin, tampilan pesanan pelanggan (dll) untuk menampilkan opsi khusus Anda.
Github: https://github.com/srenon/Cloudways_Mymodule
/app/code/Cloudways/Mymodule/etc/events.xml
Tambahkan Opsi ke Kutipan
/app/code/Cloudways/Mymodule/Observer/CheckoutCartProductAddAfterObserver.php
Metode # 1 - Menyalin Opsi dari quote_item ke order_item menggunakan Observer Lihat Magento 2 fieldset.xml; salin bidang dari kutipan ke pesanan
/app/code/Cloudways/Mymodule/Observer/SalesModelServiceQuoteSubmitSebelumObserver.php
Metode # 2 - Menyalin Opsi dari quote_item ke order_item menggunakan Plugin
/app/code/Cloudways/Mymodule/etc/di.xml
/app/code/Cloudways/Mymodule/Plugin/QuoteItemToOrderItemPlugin.php
Base off dari Magento1 - Atribut item produk kutipan / berdasarkan input pengguna
sumber
[invalidargumentexception] unable to unserialize value.
menggunakan json_encode dan json_decode alih-alih membuat serial dan unserializeUntuk mengatasi masalah ini: // Buat item keranjang baru dengan nilai opsi yang sama akan menambahkan item baris baru, alih-alih menambah jumlah item sebelumnya
Saya telah menambahkan setelah plugin untuk metode representProduct di Magento \ Quote \ Model \ Quote \ Item. Dalam plugin saya memeriksa apakah itu param tambahan yang diperlukan dan jika itu mengembalikan hasil yang diperlukan (benar).
sumber