الماجنتو 2: عارض خلايا الشبكة

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


الصورة


مكونات العارض الأساسي


يتكون العارض الأصلي للارتباطات في Magento من ملفين:



في عملية معالجة القالب ، يتم استخدام الوظائف التي يوفرها الكود (object $col ). بيانات الإدخال للمعالجة هي أيضًا خط الشبكة الحالي (كائن $row ):


 <div class="data-grid-cell-content" if="!$col.isLink($row())" text="$col.getLabel($row())"/> <a class="action-menu-item" if="$col.isLink($row())" text="$col.getLabel($row())" attr="href: $col.getLink($row())"/> 

يتم تنزيل بيانات الشبكة من خلال موفر البيانات. استعلام نموذجي شيء مثل هذا: " http: //.../admin/mui/index/render/؟ Namespace = sales_order_grid ... ". يمكن رؤية بنية البيانات من خلال شريط أدوات المطور في المتصفح. بالنسبة لشبكة الطلبات ، فهذا شيء مثل هذا:


 { "items": [ { "id_field_name": "entity_id", "entity_id": "1", "status": "pending", "store_id": "Main Website<br\/>&nbsp;&nbsp;&nbsp;Main Website Store<br\/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default Store View<br\/>", "store_name": "Main Website\nMain Website Store\n", "customer_id": "1", "base_grand_total": "RUB34.68", "base_total_paid": null, "grand_total": "RUB34.68", "total_paid": null, "increment_id": "000000001", "base_currency_code": "RUB", "order_currency_code": "RUB", "shipping_name": "Alex Gusev", "billing_name": "Alex Gusev", "created_at": "2018-12-22 19:35:19", "updated_at": "2018-12-22 19:35:20", "billing_address": "Street,Riga,R\u012bga,1010", "shipping_address": "Street,Riga,R\u012bga,1010", "shipping_information": "Flat Rate - Fixed", "customer_email": "alex@flancer64.com", "customer_group": "1", "subtotal": "RUB24.68", "shipping_and_handling": "RUB10.00", "customer_name": "Alex Gusev", "payment_method": "checkmo", "total_refunded": "RUB0.00", "signifyd_guarantee_status": null, "orig_data": null, "actions": { "view": { "href": "http:\/\/sample.local.flancer64.com\/admin\/sales\/order\/view\/order_id\/1\/", "label": "View" } } } ], "totalRecords": 1 } 

العارض الخاص


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


  • رمز JS للمكون ؛
  • بالضربة القاضية للمكون ؛

مهمتي الحالية هي إنشاء عارض يعرض رابطًا للعميل الذي وضع الطلب في خلية شبكة الطلب. لإنشاء رابط إلى عميل ، أحتاج إلى استخدام معرف العميل المقابل - customer_id . يمكنك كتابة النموذج الخاص بك ./module-ui/view/base/web/templates/grid/cells/link.html ، لكن في هذه الحالة ، أنا سعيد تمامًا بالقالب الموجود ( ./module-ui/view/base/web/templates/grid/cells/link.html ). يكفي إعادة كتابة تعليمة برمجية JS لإرجاع النتيجة المرغوبة عند استدعاء الدالتين $col.getLink($row()) و $col.isLink($row()) .


لقد قسمت الكود إلى قسمين. يحتوي ملف base.js على المنطق الأساسي للربط المستخدم في القالب ، ويسمح لك ملف customer_name.js بتكوين المنطق الأساسي للربط وفقًا لمهام عمود معين.


الوظائف الأساسية


كقاعدة عامة ، آخذ مكون واجهة مستخدم column الموجود:


 define([ "Magento_Ui/js/grid/columns/column", "mageUtils" ], function (Column, utils) { ... } 

و (إعادة) تحديد سماته ، مع الإشارة إلى أن قالب ui/grid/cells/link (من وحدة Magento_Ui ) يُستخدم Magento_Ui :


  return Column.extend({ defaults: { /** * Replace idAttrName & route in children. */ /* name of the identification attribute */ idAttrName: "customer_id", /* route part to the page */ route: "/customer/index/edit/id/", bodyTmpl: "ui/grid/cells/link" } }); 

ثم (إعادة) تحديد الأساليب المستخدمة في القالب.


isLink (يمكن تكوين رابط إذا كانت بيانات record تحتوي على سمة تحمل الاسم المخزن في this.idAttrName ):


  isLink: function (record) { const result = !!utils.nested(record, this.idAttrName); return result; } 

getLink :


  getLink: function (record) { const id = utils.nested(record, this.idAttrName); const result = ROOT_URL + this.route + id; return result; } 

رابط بطاقة العميل


في ملف customer_name.js ، يتم إعادة تعريف الوظيفة الأساسية بحيث يتم تكوين رابط لبطاقة العميل " http: //.../admin/customer/index/edit/id/ ..." بناءً على معرف customer_id :


 define([ "Flancer32_GridLink/js/grid/column/link/base" ], function (Column) { "use strict"; return Column.extend({ defaults: { idAttrName: "customer_id", route: "/customer/index/edit/id/" } }); }); 

اتصال العارض


يتصل العارض المخصص بالشبكة في الملف مع تعريف مكون واجهة المستخدم المقابل. في حالتنا ، هذا هو ./module-sales/view/adminhtml/ui_component/sales_order_grid.xml . في الوحدة النمطية الأصلية ، يتم إنشاء الملف. ./view/adminhtml/ui_component/sales_order_grid.xml فيه العارض للعمود المقابل:


 <listing ...> <columns name="sales_order_columns"> <column name="customer_name" component="Vendor_Module/js/grid/column/link/customer_name"> <settings> <visible>true</visible> </settings> </column> </columns> </listing> 

يلزم إعداد settings/visible بحيث يكون عمود "customer_name" مرئيًا في الشبكة (بشكل افتراضي ، يكون غير مرئي).


ترتيب التمهيد


عند تجميع جميع واصفات xml لأجزاء مختلفة من التطبيق في Magento (بما في ذلك وصف مكونات واجهة المستخدم) ، يكون ترتيب معالجة الواصفات المتعلقة بنفس المكونات ، ولكن موجودًا في الوحدات النمطية المختلفة ، أمرًا مهمًا. في حالتنا ، هذا هو. / ./view/adminhtml/ui_component/sales_order_grid.xml . إذا عالجت المنصة أولاً الواصف من وحدتنا ، ثم من وحدة المبيعات ، ثم عند دمج الواصفات ، سيحل تكوين وحدة المبيعات محل التكوين الخاص بنا في تلك الأماكن التي يتم فيها تحديد السمات نفسها (على سبيل المثال ، ستكون المعلمة settings/visible المعلمة settings/visible "خاطئة" ) ، على الرغم من استمرار استخدام العارض (وحدة المبيعات لا تحدد العارض لخلية "اسم العميل").


ترتيب التحميل ./etc/module.xml :


 <config ...> <module name="Vendor_Module" setup_version="0.1.0"> <sequence> <module name="Magento_Sales"/> </sequence> </module> </config> 

في هذه الحالة ، سيتم تحميل الوحدة النمطية لدينا بعد الوحدة النمطية Magento_Sales ، وستتجاوز إعداداتنا ، إذا تزامنت مع الإعدادات في وحدة المبيعات ، إعدادات وحدة المبيعات.


ملخص


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


تم تصميم رمز هذا المنشور كوحدة نمطية " mage2_ext_grid_column_renderer ".

Source: https://habr.com/ru/post/ar434064/


All Articles