serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()->get(Json::class); } /** * Add crumb * * @param string $crumbName * @param array $crumbInfo * @return $this */ public function addCrumb($crumbName, $crumbInfo) { foreach ($this->_properties as $key) { if (!isset($crumbInfo[$key])) { $crumbInfo[$key] = null; } } if (!isset($this->_crumbs[$crumbName]) || !$this->_crumbs[$crumbName]['readonly']) { $this->_crumbs[$crumbName] = $crumbInfo; } return $this; } /** * Get cache key informative items * * Provide string array key to share specific info item with FPC placeholder * * @return array */ public function getCacheKeyInfo() { if ($this->_cacheKeyInfo === null) { $this->_cacheKeyInfo = parent::getCacheKeyInfo() + [ 'crumbs' => base64_encode($this->serializer->serialize($this->_crumbs)), 'name' => $this->getNameInLayout() ]; } return $this->_cacheKeyInfo; } /** * Render block HTML * * @return string */ protected function _toHtml() { if (is_array($this->_crumbs)) { reset($this->_crumbs); $this->_crumbs[key($this->_crumbs)]['first'] = true; end($this->_crumbs); $this->_crumbs[key($this->_crumbs)]['last'] = true; } $this->assign('crumbs', $this->_crumbs); return parent::_toHtml(); } }