如何创建一个扩展给定类的Magento 2模块,并能够在Magento的每个.phtml中调用我新定义的函数?
我尝试创建我的模块,这就是Block:
等/ module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="Chapagain_HelloWorld" setup_version="1.0.0" schema_version="1.0.0">
<sequence>
<module name="Magento_Footer"/>
</sequence>
</module>
</config>
块/ HelloWorld.php
<?php
namespace Chapagain\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
protected $_storeManager;
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Store\Model\StoreManagerInterface $storeManager,
array $data = []
)
{
$this->_storeManager = $storeManager;
parent::__construct($context, $data);
}
/**
* Get store identifier
*
* @return int
*/
public function getStoreId()
{
return $this->_storeManager->getStore()->getId();
}
/**
* Get website identifier
*
* @return string|int|null
*/
public function getWebsiteId()
{
return $this->_storeManager->getStore()->getWebsiteId();
}
/**
* Get Store code
*
* @return string
*/
public function getStoreCode()
{
return $this->_storeManager->getStore()->getCode();
}
/**
* Get Store name
*
* @return string
*/
public function getStoreName()
{
return $this->_storeManager->getStore()->getName();
}
/**
* Get current url for store
*
* @param bool|string $fromStore Include/Exclude from_store parameter from URL
* @return string
*/
public function getStoreUrl($fromStore = true)
{
return $this->_storeManager->getStore()->getCurrentUrl($fromStore);
}
/**
* Check if store is active
*
* @return boolean
*/
public function isStoreActive()
{
return $this->_storeManager->getStore()->isActive();
}
}
?>
稍后我尝试调用footer.phtml和amp;中的函数。 header.phtml(我需要它们的地方)
<?php
echo $block->getStoreId() . '<br />';
echo $block->getStoreCode() . '<br />';
echo $block->getWebsiteId() . '<br />';
echo $block->getStoreName() . '<br />';
echo $block->getStoreUrl() . '<br />';
echo $block->isStoreActive() . '<br />';
?>
但Magento不允许我这样做。
答案 0 :(得分:0)
确保您正在扩展右侧块。如果要扩展页眉或页脚,找到原始位置,而不是逐步退出几个文件夹,直到找到布局文件夹,浏览文件内部,直到找到此模板的调用位置。你会看到它被附加到某种块上。复制/粘贴它的名称,并将其放入“Class *** extends [paste here]”中。现在随意编写代码。现在,创建一个与模块中原始布局文件同名的文件,它具有相同的路径(我的意思是布局/文件夹后的路径)。使用XML setTemplate操作将块模板替换为您的模板(可以通过在/ templates文件夹之后添加'Your_Module :: [模板的路径]来完成)。你差不多准备好了。现在打开模板覆盖并添加一些调用自定义方法。如果一切正确完成,您应该看到正确的输出。
一些提示,还有: