كيفية إضافة سمة منتج مخصصة كعامل تصفية لأسعار الشحن

نشرت: 2020-04-07

غالبًا ، في Magento 2 ، يكون عدد سمات المنتج القياسية التي يمكن استخدامها لإعداد الشروط محدودًا. ستكون هناك حاجة إلى تخصيص إضافي لتلبية احتياجات العمل.

من هذه المقالة ، ستتعلم كيفية تحقيق ذلك وإضافة سمات منتج مخصصة كعامل تصفية لمعدلات الشحن.

ملحوظات:

  1. شاهد مثال الكود الكامل على جيثب.
  2. الجزء الأول من المثال ، الذي يضيف السمة "حجم الوزن" كعامل تصفية لأسعار الشحن ، متاح هنا.
  3. وحدة Magento 2 Shipping Suite Ultimate الأصلية مطلوبة.

دعنا ننتقل مباشرة إلى مناقشة ما يجب فعله بالضبط لتحقيق الهدف.

جدول المحتويات

  • دليل خطوة بخطوة حول إضافة سمة منتج مخصصة
    • الخطوة 1. قم بإنشاء وحدة نمطية جديدة عن طريق إضافة الملفات الأساسية
    • الخطوة 2. إنشاء هيكل الوحدة النمطية
    • الخطوة 3. واجهة المستخدم
      • استمارة
      • جريد

دليل خطوة بخطوة حول إضافة سمة منتج مخصصة

الخطوة 1. قم بإنشاء وحدة نمطية جديدة عن طريق إضافة الملفات الأساسية

ابدأ بتسمية الوحدة:

 > 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__ );

بعد ذلك ، قم بالكشف عن متطلباتها والإعلان عنها. ستحتاج أيضًا إلى إعطاء اسم للوحدة الخاصة بنا للملحن ، والإصدار المحدد ، وإضافة وصف قصير:

 > 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\\": "" } } }

علاوة على ذلك ، يمكننا تعيين الاسم الأولي والإصدار في تكوين Magento 2 ، والإعلان عن التسلسل:

 > 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>

الخطوة 2. إنشاء هيكل الوحدة النمطية

لنفترض أن لدينا سمة منتج تسمى "shippingnew" ، والتي تم إنشاؤها من جانب المسؤول. إنه نوع إدخال قائمة منسدلة ولديه خيارات قليلة تسمى "أ ، ب ، ج ، د" ، إلخ. تصف هذه الخيارات كيفية شحن العناصر لدينا حسب المناطق. كل قيمة لها سعرها الخاص ، وستعمل المنتجات ذات السعر الأعلى على تعديل تكلفة طريقة الشحن أثناء الدفع.

بادئ ذي بدء ، نحتاج إلى إنشاء جدول منفصل للشروط الممتدة لأسعار الشحن الخاصة بنا. لاحقًا ، سنضيفها باستخدام سمات الامتداد العادية للنموذج (يمتد نموذج "Shipping Rate" "\ 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); } }

قمنا بتسمية جدولنا على النحو التالي: "" mageworx_shippingrules_rates_shippingnew "`. تتكون من عمودين فقط. واحد منهم يستخدم كمفتاح خارجي. إنه العمود "rate_id" الذي سيتم ربطه بالجدول العادي "mageworx_shippingrules_rates" من الوحدة النمطية MageWorx Shipping Suite Ultimate لـ Magento 2. وسيحتوي عمود آخر على قيم من السمة "shippingnew".

قبل أن نجعل المراقب يقوم بتحميل / حفظ / حذف بياناتنا المخصصة إلى الجدول ، يجب علينا إنشاء نموذجين على الأقل - نموذج عادي ونموذج مورد.

 > 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'); } }

ملحوظات:

  1. سيتم استخدام " _eventPrefix " لاكتشاف أحداث نموذجنا.
  2. سيتم استخدام "_eventObject" لتخزين البيانات في كائن الحدث. باستخدام هذا الاسم يمكننا الحصول على نموذجنا من كائن الحدث.
  3. "$ this -> _ init ( 'MageWorx \ ShippingRateByProductAttribute \ Model \ ResourceModel \ ShippingNew' ) ؛` يربط نموذجنا بنموذج المورد المقابل.
  4. "$ this-> setIdFieldName ( 'rate_id' ) ؛` يصف أي حقل من الجدول يجب استخدامه كمفتاح (عادةً ما نسميه 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; } }

ملحوظات:

  1. $ this -> _ init ( 'mageworx_shippingrules_rates_shippingnew' ، 'rate_id' )؛ تعيين اسم الجدول الرئيسي واسم حقل المعرف.
  2. إدراج الوظيفة العامة insertUpdateRecord ($ rateId، int $ shippingNew) هي الطريقة التي يمكن أن تساعدنا في تحديث قيمة السمة في جدولنا المخصص.
  3. الوظيفة العامة deleteRecord ($ rateId) مصممة لإزالة العمود.

في وقت لاحق ، سوف نستخدم هذه الأساليب في مراقبينا.

الآن ، دعنا نضيف بياناتنا الجديدة كسمة امتداد إلى نموذج معدل الشحن:

 > 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>

يجب أن نعتني أيضًا بالعمليات العادية لحالتنا المخصصة:

 > 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>

الحدث الأول هو لحفظ / تحديث / حذف قيمة السمة المخصصة في حالة الأسعار.

الحدثان الثانيان مخصصان لإضافة قيمة السمة هذه إلى المجموعة.

الأحداث الثلاثة الأخيرة خاصة بوظيفة الاستيراد / التصدير.

دعنا نحللها واحدة تلو الأخرى بمزيد من التفصيل:

 > 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; } }

إنها بهذه السهولة. عندما نحفظ معدلًا ، يجب أن نهتم أيضًا بحفظ قيمة السمة المخصصة. في حالة تساوي قيمته "خالية" ، ما عليك سوى حذف أحد السجلات.

 > 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'] ); } }

لإتاحة التحقق من الصحة ، عندما ينتقل العميل إلى تقدير أسعار السداد أو الشحن ، دعنا ننضم إلى جدولنا بالسمة المخصصة لجدول الأسعار العادية.

 > 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 ); } }

هذا هو المراقب الأكثر تعقيدًا في مجموعتنا. تم تصميمه لتجميع جميع قيم السمات (`$ shippingCategories`) من سلة التسوق الخاصة بالعميل وإضافة قيمة السمة كعامل تصفية لمجموعة الأسعار العادية (تم ضم جدولنا بالفعل). لتبسيط الأمر ، سميته "مرشح". عند الانتهاء من العمل ، سيرى العميل أسعار الشحن الفعلية لعناصر سلة التسوق الحالية.

تم تصميم 3 مراقبين آخرين للحدث لإضافة واستقبال بيانات مخصصة أثناء تصدير واستيراد أسعار الشحن. نتخطى الكود الخاص به في منشور المدونة ، لكنه سيكون متاحًا في المستودع مع الكود المصدري.


ملحقات MageWorx Magento 2

الخطوة 3. واجهة المستخدم

حان الوقت لإضافة السمة الخاصة بنا إلى الشبكة وإلى شكل أسعار الشحن.

استمارة

 > 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>

جريد

 > 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>

كما ترى ، نستخدم نموذج المصدر المخصص في تلك الملفات. لنقم بإنشائه. سيتم تحميل سمة مقابلة (`shippingnew`) وتعطينا جميع القيم المتاحة.

 > 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; } }

قطعة الكود بسيطة جدًا. نستخدم مستودع السمات لتحميل السمة الخاصة بنا ثم الحصول على جميع الخيارات (القيم) منها. ضع في اعتبارك أنه يجب إنشاء السمة ذات الرمز "shippingnew" في لوحة الإدارة ويجب أن تحتوي على نوع إدخال منسدلة مع خيارات محددة مسبقًا (قيم). يمكنك القيام بذلك من قائمة "المتاجر> السمات> المنتج". لا تنس إضافة هذه السمة إلى مجموعة السمات التي تستخدمها للمنتجات.

عند الانتهاء من كل شيء ، نحتاج فقط إلى تمكين الوحدة وتشغيل "الإعداد: الترقية". سيتم مسح ذاكرة التخزين المؤقت تلقائيًا.

انتقل إلى شبكة الأسعار ("المتاجر> أسعار الشحن") وسترى العمود الجديد:

كيفية إضافة سمة منتج مخصصة كعامل تصفية لأسعار الشحن | مدونة MageWorx

سيكون هذا الشرط متاحًا داخل نموذج الأسعار:

كيفية إضافة سمة منتج مخصصة كعامل تصفية لأسعار الشحن | مدونة MageWorx

إذا قمنا بتعيين إعداد "حساب أسعار الأسعار المتعددة" على "استخدام السعر بأقصى سعر" في طريقة الشحن المقابلة ، فسيتم استخدام السعر بأعلى سعر أثناء حساب سعر الشحن.

فيما يلي مثال صغير لكيفية عملها في شكل لقطات الشاشة:

  1. قم بإعداد منتجاتك
كيفية إضافة سمة منتج مخصصة كعامل تصفية لأسعار الشحن | مدونة MageWorx
  1. قم بإعداد الأسعار
كيفية إضافة سمة منتج مخصصة كعامل تصفية لأسعار الشحن | مدونة MageWorx
  1. قم بإعداد خوارزمية حساب السعر (في نموذج طريقة الشحن)
كيفية إضافة سمة منتج مخصصة كعامل تصفية لأسعار الشحن | مدونة MageWorx
  1. تحقق من سعر الشحن للطريقة المقابلة مع المنتجات المحددة في سلة التسوق (في الواجهة الأمامية).
كيفية إضافة سمة منتج مخصصة كعامل تصفية لأسعار الشحن | مدونة MageWorx
كيفية إضافة سمة منتج مخصصة كعامل تصفية لأسعار الشحن | مدونة MageWorx

هذا ليس كل ما تستطيع وحدة Shipping Suite القيام به. لا تتردد في اللعب بالإعدادات للحصول على النتيجة المرجوة.

سأكون سعيدا للإجابة على أي أسئلة! وبالتالي ، لا تتردد في ترك تعليقاتك في الحقل المخصص أدناه.