문제

내 Magento2 모듈에서 문제가 해결될 때까지 고정되어 adminhtml의 모든 페이지에 표시되는 관리 시스템 메시지를 만들고 싶습니다.관리자가 해결해야 할 중요한 사항입니다. 그렇지 않으면 매장에 심각한 영향을 미칠 수 있습니다.그러나 감지된 문제가 해결되면 메시지는 사라져야 합니다.

예를 들어 인덱서나 캐시를 새로 고쳐야 하는 시기를 알려주는 메시지를 살펴보겠습니다.그런 메시지를 어떻게 만들 수 있나요?

admin system message

코어 모듈을 보고 있었는데 AdminNotification 이는 이에 대한 고유한 책임이 있는 것 같습니다.이러한 메시지를 표시하기 위해 관련된 템플릿과 블록을 살펴보았는데 모두 이해가 되지만, 이러한 메시지는 어디에 생성됩니까?이러한 알림을 만드는 방법을 알 수 없는 것 같습니다.

라는 DB 테이블이 있습니다. admin_system_messages 그와 관련된 내용을 저장하고 있지만 내용을 이해할 수 없습니다.필드 identity 단지 긴 16진수 숫자만 포함되어 있을 뿐입니다.나는 그러한 숫자를 가져와서 참조를 찾기 위해 모든 코드와 전체 데이터베이스에 대해 검색했지만 아무 것도 나오지 않았습니다.모듈은 여기에서 "하나 이상의 캐시 유형이 무효화되었습니다 [...]"를 어떻게 추출합니까?

명확히 하자면, 사용자에게 한 번만 표시되는 임시 메시지를 추가하는 메커니즘을 본 적이 있습니다. 예를 들어 무언가를 삭제하거나 저장할 때 확인 메시지가 표시되고 성공했음을 알려줍니다.이것은 내가 찾고 있는 것이 아닙니다. 모든 페이지에 영구적인 메시지가 표시되기를 원합니다.눈에 거슬린다는 건 알지만 제 경우에는 꼭 필요하다고 확신합니다.

도움이 되었습니까?

해결책

나는 이것을 직접 해결했습니다.

모듈에는 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