Kargo Ücretlerine Filtre Olarak Özel Ürün Özelliği Nasıl Eklenir?
Yayınlanan: 2020-04-07Çoğu zaman, Magento 2'de koşulları ayarlamak için kullanılabilecek standart ürün niteliklerinin sayısı sınırlıdır. İş ihtiyaçlarını karşılamak için ekstra özelleştirme gerekli olacaktır.
Bu makaleden, bunu nasıl başaracağınızı ve kargo ücretleri için bir filtre olarak özel ürün özellikleri ekleyeceğinizi öğreneceksiniz.
Notlar:
- GitHub'daki tam kod örneğine bakın.
- Gönderim ücretlerine filtre olarak 'Hacim Ağırlığı' özelliğini ekleyen örneğin ilk bölümüne buradan ulaşabilirsiniz.
- Orijinal Magento 2 Shipping Suite Ultimate modülü gereklidir.
Doğrudan hedefe ulaşmak için tam olarak ne yapılması gerektiğini tartışmaya gidelim.
İçindekiler
- Özel Ürün Özelliği Eklemeyle İlgili Adım Adım Kılavuz
- Adım 1. Temel Dosyaları Ekleyerek Yeni Bir Modül Oluşturun
- Adım 2. Bir Modül Yapısı Oluşturun
- Adım 3. Kullanıcı Arayüzü
- Biçim
- Kafes
Özel Ürün Özelliği Eklemeyle İlgili Adım Adım Kılavuz
Adım 1. Temel Dosyaları Ekleyerek Yeni Bir Modül Oluşturun
Modülü adlandırarak başlayın:
> 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__ );
Ardından, gereksinimlerini tespit edin ve bildirin. Ayrıca besteci, set versiyonu için modülümüze bir isim vermeniz ve kısa bir açıklama eklemeniz gerekecek:
> 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\\": "" } } }
Ayrıca, Magento 2 yapılandırmasında ilk adı ve sürümü ayarlayabilir, sırayı bildirebiliriz:
> 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>
Adım 2. Bir Modül Yapısı Oluşturun
Yönetici tarafından oluşturulan 'shippingnew' adında bir ürün özelliğimiz olduğunu varsayalım. Bu bir açılır giriş türüdür ve 'A, B, C, D' vb. adlı birkaç seçeneğe sahiptir. Bu seçenekler, ürünleri bölgelere göre nasıl gönderdiğimizi açıklar. Her değerin kendi fiyatı vardır ve en yüksek fiyata sahip ürünler, ödeme sırasında gönderim yöntemi maliyetini değiştirir.
Öncelikle kargo ücretleri uzatılmış koşullarımız için ayrı bir tablo oluşturmamız gerekiyor. Daha sonra, onları modelin normal uzantı niteliklerini kullanarak ekleyeceğiz ('Shipping Rate' modeli `\Magento\Framework\Model\AbstractExtensibleModel` öğesini genişletir).
> 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); } }
Tablomuzu şu şekilde isimlendirdik: `'mageworx_shippingrules_rates_shippingnew''. Sadece 2 sütunu var. Bunlardan biri yabancı anahtar olarak kullanılır. Magento 2 için MageWorx Shipping Suite Ultimate modülündeki normal tablo 'mageworx_shippingrules_rates' ile bağlantılı olan 'rate_id' sütunudur. Başka bir sütun, 'shippingnew' özniteliğinden değerleri içerecektir.
Bir gözlemciye özel verilerimizi tabloya yüklemeden/kaydetmeden/silmeden önce, en az iki model oluşturmalıyız – normal model ve kaynak model.
> 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'); } }
Notlar:
- ` _eventPrefix `, model olaylarımızı tespit etmek için kullanılacaktır.
- '_eventObject', olay nesnesindeki verileri depolamak için kullanılacaktır. Bu ismi kullanarak modelimizi event nesnesinden alabiliriz.
- `$this->_init( 'MageWorx\ShippingRateByProductAttribute\Model\ResourceModel\ ShippingNew' );` modelimizi ilgili kaynak modeline bağlar.
- `$this->setIdFieldName( 'rate_id' );` tablodaki hangi alanın anahtar olarak kullanılması gerektiğini açıklar (genellikle buna id deriz)
> 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; } }
Notlar:
- $this->_init( 'mageworx_shippingrules_rates_shippingnew' , 'rate_id' ); ana tablo adını ve id alan adını ayarlayın.
- public function insertUpdateRecord($rateId, int $shippingNew), özel tablomuzdaki öznitelik değerini güncellememize yardımcı olabilecek yöntemdir.
- public function deleteRecord($rateId) sütunu kaldırmak için tasarlanmıştır.
Daha sonra bu yöntemleri gözlemcilerimizde kullanacağız.
Şimdi yeni verilerimizi Kargo Ücreti modeline bir uzantı özelliği olarak ekleyelim:
> 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>
Özel durumumuzun düzenli işlemlerine de dikkat etmeliyiz:
> 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>
İlk olay, oranlar koşulundaki özel öznitelik değerini kaydetme/güncelleme/silme içindir.
İkinci iki olay, bu öznitelik değerini koleksiyona eklemek içindir.
Son üç olay İçe/Dışa Aktar işlevi içindir.
Bunları tek tek daha ayrıntılı olarak analiz edelim:
> 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; } }
Bu kadar basit. Bir oranı kaydettiğimizde, özel öznitelik değerini de kaydetmeye özen göstermeliyiz. Değerinin 'null' olması durumunda, sadece bir kaydı silin.
> 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'] ); } }
Doğrulamayı kullanılabilir hale getirmek için, bir müşteri ödeme veya kargo ücretleri tahminine gittiğinde, normal ücretler tablosuna özel öznitelik ile tablomuza katılalım.
> 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 ); } }
Bu, yığınımızdaki en karmaşık gözlemcidir. Bir müşterinin sepetinden tüm özellik değerlerini ("$shippingCategories") toplamak için tasarlanmıştır ve özellik değerini normal ücretler koleksiyonuna bir filtre olarak ekler (tablomuz zaten katılmıştır). Basit olması için adını 'Filtre' koydum. İş bittiğinde, müşteri mevcut sepetteki ürünler için gerçek nakliye ücretlerini görecektir.
Diğer 3 olay gözlemcisi, nakliye fiyatlarının dışa ve içe aktarılması sırasında özel veriler eklemek ve almak için tasarlanmıştır. Blog gönderisinde kodunu atlıyoruz, ancak kaynak koduyla birlikte depoda mevcut olacak.
Adım 3. Kullanıcı Arayüzü
Özniteliğimizi ızgaraya ve nakliye ücretleri biçimine eklemenin zamanı geldi.
Biçim
> 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>
Kafes
> 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>
Gördüğünüz gibi, bu dosyalarda özel kaynak modeli kullanıyoruz. Hadi onu oluşturalım. Karşılık gelen bir özniteliği ("shippingnew") yükleyecek ve bize mevcut tüm değerleri verecektir.
> 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; } }
Kod parçası oldukça basittir. Özniteliğimizi yüklemek için öznitelikler deposunu kullanırız ve ondan tüm seçenekleri (değerleri) alırız. 'shippingnew' koduna sahip özelliğin yönetici panelinde oluşturulması ve önceden tanımlanmış seçeneklere (değerlere) sahip bir açılır giriş tipine sahip olması gerektiğini unutmayın. Bunu 'Mağazalar > Nitelikler > Ürün' menüsünden yapabilirsiniz. Ürünler için kullandığınız öznitelik setine bu özelliği eklemeyi unutmayınız.
Her şey bittiğinde, sadece modülü etkinleştirmemiz ve `setup:upgrade` komutunu çalıştırmamız gerekiyor. Önbellek otomatik olarak temizlenecektir.
Ücretler tablosuna ('Mağazalar > Nakliye Ücretleri') gidin ve yeni sütunu göreceksiniz:
Bu koşul, oranlar formunda mevcut olacaktır:
İlgili Gönderim Yönteminde 'Çoklu ücret fiyat hesaplama' ayarını 'Maksimum Fiyatla Kullanım Ücreti' olarak ayarlarsak, gönderim bedeli hesaplaması sırasında en yüksek fiyatlı ücret kullanılacaktır.
İşte ekran görüntüsü biçiminde nasıl çalıştığına dair küçük bir örnek:
- Ürünlerinizi kurun
- oranları ayarlayın
- Fiyat hesaplama algoritmasını ayarlayın (gönderim yöntemi formunda)
- Sepette seçilen ürünlerle ilgili yöntem için nakliye fiyatını kontrol edin (ön uçta).
Bu, Shipping Suite modülünün yapabileceği her şey değildir. İstediğiniz sonucu elde etmek için ayarlarla oynamaktan çekinmeyin.
Herhangi bir soruyu yanıtlamaktan memnuniyet duyarım! Bu nedenle, yorumlarınızı aşağıdaki özel alana bırakmaktan çekinmeyin.