سؤال

في وحدة Magento2 الخاصة بي، أرغب في إنشاء رسائل نظام إداري ثابتة وتظهر في كل صفحة في adminhtml حتى يتم حل المشكلة.إنه أمر مهم يجب على المسؤول معالجته، وإلا سيتأثر المتجر بشدة.ولكن بمجرد حل المشكلة المكتشفة، يجب أن تختفي الرسالة.

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

admin system message

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

هناك جدول ديسيبل يسمى admin_system_messages الذي يخزن شيئًا متعلقًا بذلك، لكني لا أفهم المحتوى.الميدان identity يحتوي فقط على رقم سداسي عشري طويل.أخذت هذا الرقم وبحثت عنه في كل الأكواد وقاعدة البيانات بأكملها للعثور على مراجع، لكن لم يظهر شيء.كيف تستخرج الوحدة "تم إبطال واحد أو أكثر من أنواع ذاكرة التخزين المؤقت [...]" من هذا؟

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

هل كانت مفيدة؟

المحلول

لقد قمت بحل هذا بنفسي.

تحتاج الوحدة الخاصة بك إلى تبعية لـ Magento_AdminNotification.

ثم تقوم بإنشاء نموذج يقوم بتنفيذ messageInterface، مثل هذا:

class YourMessage implements \Magento\Framework\Notification\MessageInterface
{
  public function getIdentity() {
    ...
  }

  public function isDisplayed() {
    // write code to decide if this message should be shown or not
    // return true to show it, false otherwise
  }

  public function getText() {
    // output a static text or dynamically generate one
  }

  public function getSeverity() {
    // if you return self::SEVERITY_MAJOR the sticky box on top will be empty
    // if you return self::SEVERITY_CRITICAL the sticky box will always show your text
  }
}

هذا حقا كل ما في الأمر.لقد أمضيت الكثير من الوقت في البحث عن المكان الذي يتم فيه تشغيل هذه الرسائل في الكود، لأنني لم ألاحظ أنها تقوم بتشغيل نفسها باستخدام isDisplayed() طريقة.

يمكنك الحصول على الإلهام من الرسائل الأخرى المستخدمة في الأساس:

\Magento\AdminNotification\Model\System\Message\Baseurl \Magento\AdminNotification\Model\System\Message\CacheOutdated \Magento\AdminNotification\Model\System\Message\Security

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top