Cara Menambahkan Atribut Produk Kustom sebagai Filter untuk Tarif Pengiriman
Diterbitkan: 2020-04-07Seringkali, di Magento 2, jumlah atribut produk standar yang dapat digunakan untuk mengatur kondisi terbatas. Kustomisasi ekstra akan diperlukan untuk memenuhi kebutuhan bisnis.
Dari artikel ini, Anda akan mempelajari cara mencapainya dan menambahkan atribut produk khusus sebagai filter untuk tarif pengiriman.
Catatan:
- Lihat contoh kode lengkapnya di GitHub.
- Bagian pertama dari contoh, yang menambahkan atribut 'Berat Volume' sebagai filter untuk tarif pengiriman, tersedia di sini.
- Modul Magento 2 Shipping Suite Ultimate asli diperlukan.
Langsung saja kita bahas apa sebenarnya yang harus dilakukan untuk mencapai tujuan tersebut.
Daftar isi
- Panduan Langkah demi Langkah untuk Menambahkan Atribut Produk Kustom
- Langkah 1. Buat Modul Baru dengan Menambahkan File Dasar
- Langkah 2. Buat Struktur Modul
- Langkah 3. Antarmuka Pengguna
- Membentuk
- kisi-kisi
Panduan Langkah demi Langkah untuk Menambahkan Atribut Produk Kustom
Langkah 1. Buat Modul Baru dengan Menambahkan File Dasar
Mulailah dengan memberi nama modul:
> app/code/MageWorx/ShippingRateByProductAttribute/registration.php <?php /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'MageWorx_ShippingRateByProductAttribute', __DIR__ );
Kemudian, deteksi dan nyatakan persyaratannya. Anda juga harus memberi nama pada modul kami untuk komposer, mengatur versi, dan menambahkan deskripsi singkat:
> app/code/MageWorx/ShippingRateByProductAttribute/composer.json { "name": "mageworx/module-shipping-rate-by-product-attribute", "description": "Shipping Rules Extension: Adds product attribute to the Rates", "require": { "magento/module-shipping": ">=100.1.0 < 101", "magento/module-ui": ">=100.1.0 < 102", "mageworx/module-shippingrules": ">=2.7.1" }, "type": "magento2-module", "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "files": [ "registration.php" ], "psr-4": { "MageWorx\\ShippingRateByProductAttribute\\": "" } } }
Selanjutnya, kita dapat mengatur nama dan versi awal dalam konfigurasi Magento 2, mendeklarasikan urutannya:
> app/code/MageWorx/ShippingRateByProductAttribute/etc/module.xml <?xml version="1.0"?> <!-- /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="MageWorx_ShippingRateByProductAttribute" setup_version="1.0.0"> <sequence> <module name="MageWorx_ShippingRules" /> </sequence> </module> </config>
Langkah 2. Buat Struktur Modul
Mari kita asumsikan bahwa kita memiliki atribut produk bernama 'shippingnew', yang dibuat dari sisi admin. Ini adalah jenis input dropdown dan memiliki beberapa opsi bernama 'A, B, C, D', dll. Opsi ini menjelaskan cara kami mengirimkan barang berdasarkan zona. Setiap nilai memiliki harganya sendiri, dan produk dengan harga tertinggi akan mengubah biaya metode pengiriman saat checkout.
Pertama-tama, kita perlu membuat tabel terpisah untuk kondisi perpanjangan tarif pengiriman. Kemudian, kita akan menambahkannya menggunakan atribut ekstensi reguler model (model 'Tingkat Pengiriman' meluas `\Magento\Framework\Model\AbstractExtensibleModel` ).
> app/code/MageWorx/ShippingRateByProductAttribute/Setup/InstallSchema.php <?php /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ namespace MageWorx\ShippingRateByProductAttribute\Setup; use Magento\Framework\DB\Ddl\Table; use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; /** * Class InstallSchema */ class InstallSchema implements InstallSchemaInterface { /** * Installs DB schema for a module * * @param SchemaSetupInterface $setup * @param ModuleContextInterface $context * @return void * @throws \Zend_Db_Exception */ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup(); $ratesTable = $installer->getTable(\MageWorx\ShippingRules\Model\Carrier::RATE_TABLE_NAME); /** * Create table 'mageworx_shippingrules_rates_shippingnew' */ $table = $installer->getConnection()->newTable( $installer->getTable('mageworx_shippingrules_rates_shippingnew') )->addColumn( 'rate_id', Table::TYPE_INTEGER, null, ['unsigned' => true, 'nullable' => false], 'Rate Id' )->addColumn( 'shippingnew', Table::TYPE_TEXT, '120', ['nullable' => false], 'shippingnew attribute value' )->addForeignKey( $installer->getFkName('mageworx_shippingrules_rates_shippingnew', 'rate_id', $ratesTable, 'rate_id'), 'rate_id', $ratesTable, 'rate_id', Table::ACTION_CASCADE )->addIndex( $installer->getIdxName( 'mageworx_shippingrules_rates_product_attributes', ['rate_id', 'shippingnew'], \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE ), ['rate_id', 'shippingnew'], ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE] )->setComment( 'Product Attributes For Shipping Suite Rates' ); $installer->getConnection()->createTable($table); } }
Kami menamai tabel kami sebagai berikut: `'mageworx_shippingrules_rates_shippingnew'`. Ini hanya memiliki 2 kolom. Salah satunya digunakan sebagai kunci asing. Ini adalah kolom `rate_id`, yang akan ditautkan dengan tabel biasa `mageworx_shippingrules_rates` dari modul MageWorx Shipping Suite Ultimate untuk Magento 2. Kolom lain akan berisi nilai dari atribut `shippingnew`.
Sebelum kita membuat pengamat memuat/menyimpan/menghapus data kustom kita ke tabel, kita harus membuat setidaknya dua model―model biasa dan model sumber daya.
> app/code/MageWorx/ShippingRateByProductAttribute/Model/ShippingNew.php <?php /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ namespace MageWorx\ShippingRateByProductAttribute\Model; use Magento\Framework\Model\AbstractModel; /** * Class ShippingNew */ class ShippingNew extends AbstractModel { /** * Prefix of model events names * * @var string */ protected $_eventPrefix = 'mageworx_shippingnew'; /** * Parameter name in event * * In observe method you can use $observer->getEvent()->getObject() in this case * * @var string */ protected $_eventObject = 'shippingnew'; /** * Set resource model and Id field name * * @return void */ protected function _construct() { parent::_construct(); $this->_init('MageWorx\ShippingRateByProductAttribute\Model\ResourceModel\ShippingNew'); $this->setIdFieldName('rate_id'); } }
Catatan:
- ` _eventPrefix ` akan digunakan untuk mendeteksi kejadian model kita.
- `_eventObject` akan digunakan untuk menyimpan data di objek acara. Dengan menggunakan nama ini kita bisa mendapatkan model kita dari objek event.
- `$this->_init( 'MageWorx\ShippingRateByProductAttribute\Model\ResourceModel\ ShippingNew' );` menautkan model kita dengan model sumber daya yang sesuai.
- `$this->setIdFieldName( 'rate_id' );` menjelaskan, bidang mana dari tabel yang harus digunakan sebagai kunci (biasanya kita menyebutnya id)
> app/code/MageWorx/ShippingRateByProductAttribute/Model/ResourceModel/ShippingNew.php <?php /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ namespace MageWorx\ShippingRateByProductAttribute\Model\ResourceModel; use Magento\Framework\Model\ResourceModel\Db\AbstractDb; /** * Class ShippingNew */ class ShippingNew extends AbstractDb { /** * Resource initialization * * @return void */ protected function _construct() { $this->_init('mageworx_shippingrules_rates_shippingnew', 'rate_id'); } /** * @param $rateId * @param int $shippingNew * @return int * @throws \Magento\Framework\Exception\LocalizedException */ public function insertUpdateRecord($rateId, int $shippingNew) { $rowsAffected = $this->getConnection()->insertOnDuplicate( $this->getMainTable(), [ 'rate_id' => $rateId, 'shippingnew' => $shippingNew ] ); return $rowsAffected; } /** * @param $rateId * @return int * @throws \Magento\Framework\Exception\LocalizedException */ public function deleteRecord($rateId) { $rowsAffected = $this->getConnection()->delete( $this->getMainTable(), [ 'rate_id = ?' => $rateId ] ); return $rowsAffected; } }
Catatan:
- $this->_init( 'mageworx_shippingrules_rates_shippingnew' , 'rate_id' ); atur nama tabel utama dan nama bidang id.
- fungsi publik insertUpdateRecord($rateId, int $shippingNew) adalah metodenya, yang dapat membantu kami memperbarui nilai atribut di tabel kustom kami.
- fungsi publik deleteRecord($rateId) dirancang untuk menghapus kolom.
Nanti, kami akan menggunakan metode tersebut di pengamat kami.
Sekarang, mari tambahkan data baru kita sebagai atribut ekstensi ke model Tarif Pengiriman:
> app/code/MageWorx/ShippingRateByProductAttribute/etc/extension_attributes.xml <?xml version="1.0"?> <!-- /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd"> <!-- Rate Extension --> <extension_attributes for="MageWorx\ShippingRules\Api\Data\RateInterface"> <attribute code="shippingnew" type="int"> <join reference_table="mageworx_shippingrules_rates_shippingnew" reference_field="rate_id" join_on_field="rate_id"> <field>shippingnew</field> </join> </attribute> </extension_attributes> </config>
Kami juga harus menjaga operasi reguler dari kondisi kustom kami:
> app/code/MageWorx/ShippingRateByProductAttribute/etc/events.xml <?xml version="1.0"?> <!-- /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <!-- Add Extension Attributes to the Rates Collection --> <!-- Save custom attribute value during rate saving --> <event name="mageworx_shippingrules_rate_save_after"> <observer name="mageworx_save_shippingnew_attribute" instance="MageWorx\ShippingRateByProductAttribute\Observer\SaveShippingNewRateAttribute" /> </event> <!-- Add custom attribute value to the rates collection --> <event name="rates_collection_render_filters_before"> <observer name="mageworx_add_shippingnew_attribute" instance="MageWorx\ShippingRateByProductAttribute\Observer\AddShippingNewToRatesCollection" /> </event> <!-- Take care of filtering the rates grid --> <event name="mageworx_suitable_rates_collection_load_before"> <observer name="mageworx_filter_rates_by_shippingnew_attribute" instance="MageWorx\ShippingRateByProductAttribute\Observer\FilterRatesCollectionByShippingNewAttribute" /> </event> <!-- 3 event observers for the Export/Import rates with custom attribute in conditions --> <event name="mageworx_rates_export_collection_join_linked_tables_after"> <observer name="mageworx_join_shipping_new_table_to_export_rates_collection" instance="MageWorx\ShippingRateByProductAttribute\Observer\JoinShippingNewTableToExportRatesCollection" /> </event> <event name="mageworx_filter_rates_data_before_insert"> <observer name="mageworx_remove_shipping_new_before_insert" instance="MageWorx\ShippingRateByProductAttribute\Observer\RemoveShippingNewBeforeInsert" /> </event> <event name="mageworx_shippingrules_import_insert_rates"> <observer name="mageworx_shippingrules_import_insert_update_shipping_new" instance="MageWorx\ShippingRateByProductAttribute\Observer\InsertUpdateShippingNewDuringImport" /> </event> </config>
Acara pertama adalah untuk menyimpan/memperbarui/menghapus nilai atribut khusus dalam kondisi tarif.
Dua peristiwa kedua adalah untuk menambahkan nilai atribut ini ke koleksi.
Tiga peristiwa terakhir adalah untuk fungsi Impor/Ekspor.
Mari kita analisis satu per satu lebih detail:
> app/code/MageWorx/ShippingRateByProductAttribute/Observer/SaveShippingNewRateAttribute.php <?php /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ namespace MageWorx\ShippingRateByProductAttribute\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Framework\Exception\LocalizedException; use MageWorx\ShippingRules\Api\Data\RateInterface; /** * Class SaveShippingNewRateAttribute * * Saves custom attribute (`shippingnew`) values after model was saved */ class SaveShippingNewRateAttribute implements ObserverInterface { /** * @var \MageWorx\ShippingRateByProductAttribute\Model\ResourceModel\ShippingNew */ private $resource; /** * @var \Magento\Framework\Message\ManagerInterface */ private $messagesManager; /** * SaveVolumeWeightRateAttribute constructor. * * @param \MageWorx\ShippingRateByProductAttribute\Model\ResourceModel\ShippingNew $resource * @param \Magento\Framework\Message\ManagerInterface $messagesManager */ public function __construct( \MageWorx\ShippingRateByProductAttribute\Model\ResourceModel\ShippingNew $resource, \Magento\Framework\Message\ManagerInterface $messagesManager ) { $this->resource = $resource; $this->messagesManager = $messagesManager; } /** * @param Observer $observer * @return void */ public function execute(Observer $observer) { /** @var RateInterface $model */ $model = $observer->getEvent()->getData('rate'); if (!$model instanceof RateInterface) { return; } $shippingNewValue = $model->getData('shippingnew') !== '' ? $model->getData('shippingnew') : null; if ($shippingNewValue === null) { try { $this->resource->deleteRecord($model->getRateId()); } catch (LocalizedException $deleteException) { $this->messagesManager->addErrorMessage( __('Unable to delete the Shipping Category for the Rate %1', $model->getRateId()) ); } } else { try { $this->resource->insertUpdateRecord($model->getRateId(), $shippingNewValue); } catch (LocalizedException $saveException) { $this->messagesManager->addErrorMessage( __('Unable to save the Shipping Category for the Rate %1', $model->getRateId()) ); } } return; } }
Ini sesederhana itu. Saat kita menyimpan tarif, kita juga harus berhati-hati dalam menyimpan nilai atribut khusus. Jika nilainya sama dengan `null`, hapus saja catatan.
> app/code/MageWorx/ShippingRateByProductAttribute/Observer/AddShippingNewToRatesCollection.php <?php /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ namespace MageWorx\ShippingRateByProductAttribute\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; /** * Class AddShippingNewToRatesCollection * * Adds custom attribute to the rates collection. * It will be used later during quote validation. */ class AddShippingNewToRatesCollection implements ObserverInterface { /** * Join custom table to the rates collection to obtain the `shippingnew` attribute anywhere in the code. * * @param Observer $observer * @return void */ public function execute(Observer $observer) { /** @var \MageWorx\ShippingRules\Model\ResourceModel\Rate\Collection $collection */ $collection = $observer->getEvent()->getData('collection'); if (!$collection instanceof \MageWorx\ShippingRules\Model\ResourceModel\Rate\Collection) { return; } if ($collection->isLoaded()) { return; } $joinTable = $collection->getTable('mageworx_shippingrules_rates_shippingnew'); $collection->getSelect() ->joinLeft( $joinTable, '`main_table`.`rate_id` = `' . $joinTable . '`.`rate_id`', ['shippingnew'] ); } }
Untuk membuat validasi tersedia, ketika pelanggan pergi ke kasir atau estimasi tarif pengiriman, mari gabungkan tabel kami dengan atribut khusus ke tabel tarif reguler.
> app/code/MageWorx/ShippingRateByProductAttribute/Observer/FilterRatesCollectionByShippingNewAttribute.php <?php /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ namespace MageWorx\ShippingRateByProductAttribute\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; /** * Class FilterRatesCollectionByShippingNewAttribute * * Filter rates collection before we load it by custom attribute: shippingnew. * * For more details * * @see \MageWorx\ShippingRules\Model\Carrier\Artificial::getSuitableRatesAccordingRequest() * */ class FilterRatesCollectionByShippingNewAttribute implements ObserverInterface { /** * @param Observer $observer * @return void */ public function execute(Observer $observer) { /** @var \MageWorx\ShippingRules\Model\ResourceModel\Rate\Collection $collection */ $collection = $observer->getEvent()->getData('rates_collection'); if (!$collection instanceof \MageWorx\ShippingRules\Model\ResourceModel\Rate\Collection) { return; } /** @var \Magento\Quote\Model\Quote\Address\RateRequest $request */ $request = $observer->getEvent()->getData('request'); if (!$request instanceof \Magento\Quote\Model\Quote\Address\RateRequest) { return; } /** @var \Magento\Quote\Model\Quote\Item[] $items */ $items = $request->getAllItems() ?? []; $shippingCategories = []; foreach ($items as $item) { $value = $item->getProduct()->getData('shippingnew'); if ($value !== null) { $shippingCategories[] = $value; } } $shippingCategories = array_unique($shippingCategories); $joinTable = $collection->getTable('mageworx_shippingrules_rates_shippingnew'); $collection->getSelect() ->joinLeft( ['sn' => $joinTable], '`main_table`.`rate_id` = `sn`.`rate_id`', ['shippingnew'] ); $collection->getSelect()->where( "`sn`.`shippingnew` IN (?)", $shippingCategories ); } }
Ini adalah pengamat paling rumit di tumpukan kami. Ini dirancang untuk mengumpulkan semua nilai atribut (`$shippingCategories`) dari keranjang pelanggan dan menambahkan nilai atribut sebagai filter ke pengumpulan tarif reguler (tabel kami sudah bergabung). Untuk membuatnya tetap sederhana, saya menamakannya 'Filter'. Ketika pekerjaan selesai, pelanggan akan melihat tarif pengiriman aktual untuk item keranjang saat ini.
3 pengamat peristiwa lainnya dirancang untuk menambah dan menerima data khusus selama ekspor dan impor tarif pengiriman. Kami melewatkan kodenya di posting blog, tetapi akan tersedia di repositori dengan kode sumbernya.
Langkah 3. Antarmuka Pengguna
Saatnya menambahkan atribut kita ke grid dan ke bentuk tarif pengiriman.
Membentuk
> app/code/MageWorx/ShippingRateByProductAttribute/view/adminhtml/ui_component/mageworx_shippingrules_rate_form.xml <?xml version="1.0" encoding="UTF-8"?> <!-- /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ --> <form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"> <fieldset name="conditions"> <field name="shippingnew"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">MageWorx\ShippingRateByProductAttribute\Model\Config\Source\ShippingCategory</item> <item name="config" xsi:type="array"> <item name="label" xsi:type="string" translate="true">Shipping Category</item> <item name="dataType" xsi:type="string">int</item> <item name="formElement" xsi:type="string">select</item> <item name="dataScope" xsi:type="string">shippingnew</item> <item name="source" xsi:type="string">mageworx_shippingrules_rate_form.custom_attributes</item> </item> </argument> </field> </fieldset> </form>
kisi-kisi
> app/code/MageWorx/ShippingRateByProductAttribute/view/adminhtml/ui_component/mageworx_shippingrules_rates_regular_listing.xml <?xml version="1.0"?> <!-- Copyright MageWorx. All rights reserved. See LICENSE.txt for license details. --> <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Ui/etc/ui_configuration.xsd"> <columns name="mageworx_shippingrules_rates_columns"> <column name="shippingnew"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">MageWorx\ShippingRateByProductAttribute\Model\Config\Source\ShippingCategory</item> <item name="config" xsi:type="array"> <item name="filter" xsi:type="string">select</item> <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Shipping Category</item> <item name="visible" xsi:type="boolean">true</item> <item name="sortOrder" xsi:type="number">40</item> <item name="editor" xsi:type="string">select</item> </item> </argument> </column> </columns> </listing>
Seperti yang Anda lihat, kami menggunakan model sumber khusus dalam file tersebut. Mari kita ciptakan. Ini akan memuat atribut yang sesuai (`shippingnew`) dan memberi kita semua nilai yang tersedia.
> app/code/MageWorx/ShippingRateByProductAttribute/Model/Config/Source/ShippingCategory.php <?php /** * Copyright MageWorx. All rights reserved. * See LICENSE.txt for license details. */ namespace MageWorx\ShippingRateByProductAttribute\Model\Config\Source; use Magento\Framework\Exception\LocalizedException; /** * Class ShippingCategory * * Obtain options for specified product attribute */ class ShippingCategory extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource { /** * @var \Magento\Catalog\Api\ProductAttributeRepositoryInterface */ protected $productAttributeRepository; /** * @var \Psr\Log\LoggerInterface */ protected $logger; /** * ShippingCategory constructor. * * @param \Magento\Catalog\Api\ProductAttributeRepositoryInterface $productAttributeRepository * @param \Psr\Log\LoggerInterface $logger */ public function __construct( \Magento\Catalog\Api\ProductAttributeRepositoryInterface $productAttributeRepository, \Psr\Log\LoggerInterface $logger ) { $this->productAttributeRepository = $productAttributeRepository; $this->logger = $logger; } /** * @inheritDoc */ public function getAllOptions() { if (empty($this->_options)) { try { /** @var \Magento\Catalog\Api\Data\ProductAttributeInterface $attribute */ $attribute = $this->productAttributeRepository->get('shippingnew'); $this->_options = $attribute->usesSource() ? $attribute->getSource()->getAllOptions() : []; } catch (LocalizedException $localizedException) { $this->logger->critical($localizedException->getLogMessage()); } } return $this->_options; } }
Sepotong kode cukup sederhana. Kami menggunakan repositori atribut untuk memuat atribut kami dan kemudian mendapatkan semua opsi (nilai) darinya. Perlu diingat bahwa atribut dengan kode `shippingnew` harus dibuat di panel admin dan harus memiliki jenis input dropdown dengan opsi (nilai) yang telah ditentukan sebelumnya. Anda dapat melakukannya dari menu 'Toko > Atribut > Produk'. Jangan lupa untuk menambahkan atribut ini ke kumpulan atribut yang Anda gunakan untuk produk.
Setelah semuanya selesai, kita hanya perlu mengaktifkan modul dan menjalankan `setup:upgrade`. Cache akan dihapus secara otomatis.
Buka kisi tarif ('Toko > Tarif Pengiriman') dan Anda akan melihat kolom baru:
Kondisi itu akan tersedia di dalam formulir tarif:
Jika kami menyetel pengaturan 'Penghitungan harga beberapa tarif' ke 'Gunakan Tarif dengan Harga Maks' di Metode Pengiriman yang sesuai, tarif dengan harga tertinggi akan digunakan selama penghitungan harga pengiriman.
Berikut adalah contoh kecil cara kerjanya dalam format tangkapan layar:
- Siapkan produk Anda
- Mengatur tarif
- Mengatur algoritma perhitungan harga (dalam bentuk metode pengiriman)
- Periksa harga pengiriman untuk metode yang sesuai dengan produk yang dipilih di keranjang (di bagian depan).
Ini bukan segalanya yang mampu dilakukan oleh modul Shipping Suite. Jangan ragu untuk bermain dengan pengaturan untuk mendapatkan hasil yang diinginkan.
Saya akan dengan senang hati menjawab pertanyaan apa pun! Jadi, jangan ragu untuk meninggalkan komentar Anda di bidang khusus di bawah ini.