صندوق المؤلف


ناقش مشروعك

من نحن

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

كيفية إنشاء وحدة في Magento 2

كيفية إنشاء وحدة في Magento 2

By بوجا شارما / 3 سبتمبر 2021

16 سبتمبر 2021
كيفية إنشاء وحدة في Magento 2

قم بإنشاء وحدة Add Time Label لـ Magento 2

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

في الأساس ، يتم تعيين هذه الوحدة وفقًا لحالة مخزون المخزون وفقًا للمنتجات الفردية.

بدءًا من بنية مجلد الوحدة النمطية:

لإنشاء وحدة مخصصة ، ستحتاج إلى إكمال الخطوات التالية:

الخطوة 1: قم بإنشاء مجلد باسم الوحدة النمطية LeadTime

يتم تعريف اسم الوحدة على أنه "اسم البائع". الجزء الأول هو اسم البائع ، والجزء الأخير هو اسم الوحدة:

على سبيل المثال - اسم الوحدة الخاصة بي هو LeadTime_Label، ركز على الدليل التالي لإنشاء المجلدات:

مواقع المجلدات للوحدات النمطية في Magento 2: مجلد التطبيق / الرمز 

app / code / LeadTime / Label

الخطوة 2: إنشاء ملف registration.php

إنشاء registration.php الملف الذي يسجل الوحدة باسم المجلد والمجلد الفرعي للنموذج.

app / code / LeadTime / registration.php

المحتويات:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'LeadTime_Label',
__DIR__
);

أيضا ، اقرأ: كيفية إضافة منتجات بسيطة وقابلة للتكوين في Magento 2

الخطوة الثالثة: إنشاء ملف etc / module.xml

من الضروري إنشاء مجلد وما إلى ذلك وإضافة ملف Module.xml ملف

app / code / LeadTime / Label / 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="LeadTime_Label" setup_version="1.0.0">
</module>
</config>

الخطوة 4: إنشاء ملف etc / events.xml

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

في ملف هذا الحدث نقوم بتشغيل حدثين ؛ يتم استدعاء حدث واحد بعد إضافة المنتج لعربة الدفع ، مكالمات الوحدة CheckoutCartAddObserver المراقب ، والحدث الثاني قبل الاقتباس يقدم أي دعوات اقتباس مراقب.

app / code / LeadTime / Label / etc / event.xml

المحتويات:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_cart_product_add_after">
<observer name="extension_checkout_cart_product_add_after" instance="LeadTime\Label\Observer\CheckoutCartAddObserver" />
</event>
<event name="sales_model_service_quote_submit_before">
<observer name="unique_name" instance="LeadTime\Label\Observer\QuoteSubmitObserver" />
</event>
</config>

أيضا ، اقرأ: 4 طرق فعالة يمكن للشركات الصغيرة تحسينها في متجر Magento 2

الخطوة 5: إنشاء ملف Observer / CheckoutCartAddObserver.php

هؤلاء المراقبون هم فئة Magento والتي يمكن أن تؤثر على أداء أي منطق عمل. يتم تنفيذ المراقب عندما يتم إرسال الأحداث التي تم تكوينها لمشاهدتها بواسطة مدير الحدث.

في البداية ، سننشئ مجلدًا باسم المراقب في جذر الوحدة.

بعد ذلك ، سننشئ ملف PHP للحدث الأول الذي أعطينا اسم المراقب في ملف الحدث.

في مجلة CheckoutCartAddObserver ملف ، نتحقق من كمية المنتج إذا كانت الكمية أكثر من صفر ثم نضع التسمية "مهلة إنستوك المنتج: 7-21 يومًا"، إذا كانت الكمية صفرًا أو أقل من الصفر ، فقم بتعيين التصنيف"مهلة الطلب الخاص: 16-22 أسبوعًا'

app / code / LeadTime / Label / Observer / CheckoutCartAddObserver.php

المحتويات:

<?php
namespace LeadTime\Label\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\View\LayoutInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Serialize\SerializerInterface;

class CheckoutCartAddObserver implements ObserverInterface
{
protected $request;
private $serializer;
protected $layout;
protected $storeManager;
public function __construct(RequestInterface $request, SerializerInterface $serializer, StoreManagerInterface $storeManager, LayoutInterface $layout)
{
$this->_request = $request;
$this->serializer = $serializer;
$this->layout = $layout;
$this->storeManager = $storeManager;
}
public function execute(\Magento\Framework\Event\Observer $observer){
$item = $observer->getQuoteItem();
$additionalOptions = array();
$product = $observer->getProduct();
$productId=$product->getId();
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
$qty=$StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
if($qty > 0){
$label='Product Instock Lead Time: 7 -21 days' ;
}else{
$label='Special Order Lead Time: 16 - 22 Weeks' ;
}
if ($additionalOption = $item->getOptionByCode('additional_options')) {
$additionalOptions = $this->serializer->unserialize($additionalOption->getValue());
}
$additionalOptions[] = [
'label' => 'Lead Time',
'value' => $label
];
if (!is_null($additionalOptions)) {
$item->addOption(array(
'product_id' => $item->getProductId(),
'code' => 'additional_options',
'value' => $this->serializer->serialize($additionalOptions)
));
}
}
}

الخطوة السادسة: إنشاء ملف Observer / QuoteSubmitObserver.php

في هذا الملف ، سنرث فئة ObserverInterface. وسيحصل المنتج على عرض أسعار ، وقيمة الأمر ، ويضبطه في اختيار خيارات إضافية.

app / code / LeadTime / Label / Observer / QuoteSubmitObserver.php

<?php
namespace LeadTime\Label\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Serialize\SerializerInterface;
class QuoteSubmitObserver implements ObserverInterface
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
try {
$quote = $observer->getQuote();
$order = $observer->getOrder();
$quoteItems = [];

// Map Quote Item with Quote Item Id
foreach ($quote->getAllItems() as $quoteItem) {
$quoteItems[$quoteItem->getId()] = $quoteItem;
}

foreach ($order->getAllVisibleItems() as $orderItem) {
$quoteItemId = $orderItem->getQuoteItemId();
$quoteItem = $quoteItems[$quoteItemId];
$additionalOptions = $quoteItem->getOptionByCode('additional_options');

if (!is_null($additionalOptions)) {
// Get Order Item's other options
$options = $orderItem->getProductOptions();
// Set additional options to Order Item
$options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
} catch (\Exception $e) {
// catch error if any
}
}
}

أيضا ، اقرأ: يجب استخدام ملحق Magento 2 للحصول على وظائف إضافية

الخطوة 7: إنشاء ملف etc / di.xml

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

الخطوة 8: إنشاء ملف Plugin / SetOrderItemValue.php

نقوم بإنشاء مجلد في جذر الوحدة النمطية باسم البرنامج المساعد ، ثم نقوم بداخله بإنشاء ملف Php باسم SetOrderItemValue.php الذي يضع التسمية الخاصة بنا لطلبنا.

<?php
namespace LeadTime\Label\Plugin;
use Magento\Framework\Serialize\SerializerInterface;
class SetOrderItemValue
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function aroundConvert(\Magento\Quote\Model\Quote\Item\ToOrderItem $subject, callable $proceed, $quoteItem, $data)
{

// get order item
$orderItem = $proceed($quoteItem, $data);

if(!$orderItem->getParentItemId() && $orderItem->getProductType() == \Magento\Catalog\Model\Product\Type::TYPE_SIMPLE){
if ($additionalOptionsQuote = $quoteItem->getOptionByCode('additional_options')) {
//To do
// - check to make sure element are not added twice
// - $additionalOptionsQuote - may not be an array
if($additionalOptionsOrder = $orderItem->getProductOptionByCode('additional_options')){
$additionalOptions = array_merge($additionalOptionsQuote, $additionalOptionsOrder);
}
else{
$additionalOptions = $additionalOptionsQuote;
}
if(!is_null($additionalOptions)){
$options = $orderItem->getProductOptions();
$options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
}

return $orderItem;
}
}

الخطوة 9: تمكين الوحدة

بعد إنشاء الوحدة ، قم بتشغيل الأمر التالي:

 php bin / magento module: status

يعرض قائمة الوحدات المعطلة: LeadTime_Label وحدتي.

قم بتمكين الوحدة الآن ، دعنا نشغل الأمر على النحو التالي:

php bin / magento module: قم بتمكين LeadTime_Label

أيضا ، اقرأ: 7 خطوات لتثبيت Magento 2 في نظام التشغيل Windows باستخدام XAMPP

الخطوة 10: بعد تمكين أوامر تشغيل Magento الوحدة النمطية:

فب بن / الماجنتو الإعداد: الترقية

إعداد php bin / magento: محتوى ثابت: نشر -f

php bin / magento c: c

php bin / magento c: f

chmod -R 777 تم إنشاؤه / var / pub /

صفحة منتج موقع الويب وصفحة عربة الإعلان وصفحة الخروج بعد التثبيت:

آمل أن تجد هذه المدونة مفيدة في فهم تدفق كيفية إنشاء أي وحدة على Magento لتحسين وظائف المنتجات.

[sc name = "تطوير الويب"] [add_newsletter] [add_related_page_diff_contents blog_cat = "magento"]

قم بإنشاء وحدة Add Time Label لـ Magento 2

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

في الأساس ، يتم تعيين هذه الوحدة وفقًا لحالة مخزون المخزون وفقًا للمنتجات الفردية.

بدءًا من بنية مجلد الوحدة النمطية:

لإنشاء وحدة مخصصة ، ستحتاج إلى إكمال الخطوات التالية:

الخطوة 1: قم بإنشاء مجلد باسم الوحدة النمطية LeadTime

يتم تعريف اسم الوحدة على أنه "اسم البائع". الجزء الأول هو اسم البائع ، والجزء الأخير هو اسم الوحدة:

على سبيل المثال - اسم الوحدة الخاصة بي هو LeadTime_Label، ركز على الدليل التالي لإنشاء المجلدات:

مواقع المجلدات للوحدات النمطية في Magento 2: مجلد التطبيق / الرمز 

app / code / LeadTime / Label

الخطوة 2: إنشاء ملف registration.php

إنشاء registration.php الملف الذي يسجل الوحدة باسم المجلد والمجلد الفرعي للنموذج.

app / code / LeadTime / registration.php

المحتويات:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'LeadTime_Label',
__DIR__
);

أيضا ، اقرأ: كيفية إضافة منتجات بسيطة وقابلة للتكوين في Magento 2

الخطوة الثالثة: إنشاء ملف etc / module.xml

من الضروري إنشاء مجلد وما إلى ذلك وإضافة ملف Module.xml ملف

app / code / LeadTime / Label / 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="LeadTime_Label" setup_version="1.0.0">
</module>
</config>

الخطوة 4: إنشاء ملف etc / events.xml

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

في ملف هذا الحدث نقوم بتشغيل حدثين ؛ يتم استدعاء حدث واحد بعد إضافة المنتج لعربة الدفع ، مكالمات الوحدة CheckoutCartAddObserver المراقب ، والحدث الثاني قبل الاقتباس يقدم أي دعوات اقتباس مراقب.

app / code / LeadTime / Label / etc / event.xml

المحتويات:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_cart_product_add_after">
<observer name="extension_checkout_cart_product_add_after" instance="LeadTime\Label\Observer\CheckoutCartAddObserver" />
</event>
<event name="sales_model_service_quote_submit_before">
<observer name="unique_name" instance="LeadTime\Label\Observer\QuoteSubmitObserver" />
</event>
</config>

أيضا ، اقرأ: 4 طرق فعالة يمكن للشركات الصغيرة تحسينها في متجر Magento 2

الخطوة 5: إنشاء ملف Observer / CheckoutCartAddObserver.php

هؤلاء المراقبون هم فئة Magento والتي يمكن أن تؤثر على أداء أي منطق عمل. يتم تنفيذ المراقب عندما يتم إرسال الأحداث التي تم تكوينها لمشاهدتها بواسطة مدير الحدث.

في البداية ، سننشئ مجلدًا باسم المراقب في جذر الوحدة.

بعد ذلك ، سننشئ ملف PHP للحدث الأول الذي أعطينا اسم المراقب في ملف الحدث.

في مجلة CheckoutCartAddObserver ملف ، نتحقق من كمية المنتج إذا كانت الكمية أكثر من صفر ثم نضع التسمية "مهلة إنستوك المنتج: 7-21 يومًا"، إذا كانت الكمية صفرًا أو أقل من الصفر ، فقم بتعيين التصنيف"مهلة الطلب الخاص: 16-22 أسبوعًا'

app / code / LeadTime / Label / Observer / CheckoutCartAddObserver.php

المحتويات:

<?php
namespace LeadTime\Label\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\View\LayoutInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Serialize\SerializerInterface;

class CheckoutCartAddObserver implements ObserverInterface
{
protected $request;
private $serializer;
protected $layout;
protected $storeManager;
public function __construct(RequestInterface $request, SerializerInterface $serializer, StoreManagerInterface $storeManager, LayoutInterface $layout)
{
$this->_request = $request;
$this->serializer = $serializer;
$this->layout = $layout;
$this->storeManager = $storeManager;
}
public function execute(\Magento\Framework\Event\Observer $observer){
$item = $observer->getQuoteItem();
$additionalOptions = array();
$product = $observer->getProduct();
$productId=$product->getId();
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
$qty=$StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
if($qty > 0){
$label='Product Instock Lead Time: 7 -21 days' ;
}else{
$label='Special Order Lead Time: 16 - 22 Weeks' ;
}
if ($additionalOption = $item->getOptionByCode('additional_options')) {
$additionalOptions = $this->serializer->unserialize($additionalOption->getValue());
}
$additionalOptions[] = [
'label' => 'Lead Time',
'value' => $label
];
if (!is_null($additionalOptions)) {
$item->addOption(array(
'product_id' => $item->getProductId(),
'code' => 'additional_options',
'value' => $this->serializer->serialize($additionalOptions)
));
}
}
}

الخطوة السادسة: إنشاء ملف Observer / QuoteSubmitObserver.php

في هذا الملف ، سنرث فئة ObserverInterface. وسيحصل المنتج على عرض أسعار ، وقيمة الأمر ، ويضبطه في اختيار خيارات إضافية.

app / code / LeadTime / Label / Observer / QuoteSubmitObserver.php

<?php
namespace LeadTime\Label\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Serialize\SerializerInterface;
class QuoteSubmitObserver implements ObserverInterface
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
try {
$quote = $observer->getQuote();
$order = $observer->getOrder();
$quoteItems = [];

// Map Quote Item with Quote Item Id
foreach ($quote->getAllItems() as $quoteItem) {
$quoteItems[$quoteItem->getId()] = $quoteItem;
}

foreach ($order->getAllVisibleItems() as $orderItem) {
$quoteItemId = $orderItem->getQuoteItemId();
$quoteItem = $quoteItems[$quoteItemId];
$additionalOptions = $quoteItem->getOptionByCode('additional_options');

if (!is_null($additionalOptions)) {
// Get Order Item's other options
$options = $orderItem->getProductOptions();
// Set additional options to Order Item
$options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
} catch (\Exception $e) {
// catch error if any
}
}
}

أيضا ، اقرأ: يجب استخدام ملحق Magento 2 للحصول على وظائف إضافية

الخطوة 7: إنشاء ملف etc / di.xml

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

الخطوة 8: إنشاء ملف Plugin / SetOrderItemValue.php

نقوم بإنشاء مجلد في جذر الوحدة النمطية باسم البرنامج المساعد ، ثم نقوم بداخله بإنشاء ملف Php باسم SetOrderItemValue.php الذي يضع التسمية الخاصة بنا لطلبنا.

<?php
namespace LeadTime\Label\Plugin;
use Magento\Framework\Serialize\SerializerInterface;
class SetOrderItemValue
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function aroundConvert(\Magento\Quote\Model\Quote\Item\ToOrderItem $subject, callable $proceed, $quoteItem, $data)
{

// get order item
$orderItem = $proceed($quoteItem, $data);

if(!$orderItem->getParentItemId() && $orderItem->getProductType() == \Magento\Catalog\Model\Product\Type::TYPE_SIMPLE){
if ($additionalOptionsQuote = $quoteItem->getOptionByCode('additional_options')) {
//To do
// - check to make sure element are not added twice
// - $additionalOptionsQuote - may not be an array
if($additionalOptionsOrder = $orderItem->getProductOptionByCode('additional_options')){
$additionalOptions = array_merge($additionalOptionsQuote, $additionalOptionsOrder);
}
else{
$additionalOptions = $additionalOptionsQuote;
}
if(!is_null($additionalOptions)){
$options = $orderItem->getProductOptions();
$options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
}

return $orderItem;
}
}

الخطوة 9: تمكين الوحدة

بعد إنشاء الوحدة ، قم بتشغيل الأمر التالي:

 php bin / magento module: status

يعرض قائمة الوحدات المعطلة: LeadTime_Label وحدتي.

قم بتمكين الوحدة الآن ، دعنا نشغل الأمر على النحو التالي:

php bin / magento module: قم بتمكين LeadTime_Label

أيضا ، اقرأ: 7 خطوات لتثبيت Magento 2 في نظام التشغيل Windows باستخدام XAMPP

الخطوة 10: بعد تمكين أوامر تشغيل Magento الوحدة النمطية:

فب بن / الماجنتو الإعداد: الترقية

إعداد php bin / magento: محتوى ثابت: نشر -f

php bin / magento c: c

php bin / magento c: f

chmod -R 777 تم إنشاؤه / var / pub /

صفحة منتج موقع الويب وصفحة عربة الإعلان وصفحة الخروج بعد التثبيت:

آمل أن تجد هذه المدونة مفيدة في فهم تدفق كيفية إنشاء أي وحدة على Magento لتحسين وظائف المنتجات.

خدمات تطوير الويب

هل تبحث عن شركة تطوير ويب موثوقة؟ يمكّننا مطورو الويب ذوو المهارات العالية لدينا من تقديم خدمات تطوير الويب الموجهة نحو النتائج. اتصل بفريقنا لفهم كيف يمكننا مساعدتك في تحقيق أهداف عملك.



ضيف
1 الرسالة
التقيمات المضمنة
عرض جميع التعليقات
أكسل
أكسل
يناير 4، 2023 10: 20 صباحا

مرحبا ، شكرا على الدرس. سيكون محتوى ملف di.xml موضع تقدير لفهم مقالتك بشكل أفضل. يعتبر

1
0
أحب أفكارك ، يرجى التعليق.x
()
x