Magento 2 WordPress 集成(FishPig 扩展)- 在 Magento 中添加菜单
Magento 2 WordPress Integration (FishPig Extension) - Add menu in Magento
我使用 fishPig Magento WordPress Integration for magento 2。在第一个版本中,在 magento 中添加菜单的功能已经建立。在第二个版本中,它是不完整的,开发人员向我指出了模型 Menu.php 以实现这一目标。需要一些帮助,以便指出正确的方向。有人遇到同样的问题吗?
分机:https://fishpig.co.uk/magento-2/wordpress-integration/
看看 Model/Menu.php。从那里开始,我必须构建它以便在前端获取 WP 菜单。不幸的是没有 Menu.php 块,我想首先我必须建立块,然后是 xml 和 phtml 模板
菜单并非不完整,只是您没有正确检查代码。
以下代码将加载菜单数组。该数组包含构建菜单所需的所有信息。然后,您可以递归循环数组以使用所需的 HTML 结构构建菜单。如果您要将此菜单添加到现有菜单,这将很有用,因为它允许您匹配现有菜单使用的 HTML 结构。
// This uses the object manager
// A better way would be to inject the MenuFactory in your constructor
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$menu = $objectManager->create('FishPig\WordPress\Model\MenuFactory')->create();
$menuId = 3;
if ($menu->load($menuId)->getId()) {
echo sprintf('<pre>%s</pre>', print_r($menu->getMenuTreeArray(), true));
}
else {
echo 'No menu exists in WordPress with an ID of ' . (int)$menuId;
}
如果你不关心使用什么HTML结构,你可以使用下面的块:
\FishPig\WordPress\Block\Sidebar\Widget\NavMenu
如果您查看此块的代码,您会看到它检查菜单 ID 的数据项 'nav_menu'。您可以通过 XML 进行设置(如果您通过 XML 创建块)或使用 PHP:
创建整个内容
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$menuBlock = $objectManager->create('FishPig\WordPress\Block\Sidebar\Widget\NavMenuFactory')->create();
$menuId = 3;
echo $menuBlock->setNavMenu($menuId)->toHtml();
尽管此解决方案不如原始解决方案好,因为它强制您使用特定的 HTML 结构。使用第一个解决方案会更好,因为这将允许您使用所需的任何 HTML 结构。您的主题可能已经有一个包含 CSS 规则和 JS 的菜单,因此您可以使用此方法以正确的 HTML 结构构建菜单。
我使用 fishPig Magento WordPress Integration for magento 2。在第一个版本中,在 magento 中添加菜单的功能已经建立。在第二个版本中,它是不完整的,开发人员向我指出了模型 Menu.php 以实现这一目标。需要一些帮助,以便指出正确的方向。有人遇到同样的问题吗?
分机:https://fishpig.co.uk/magento-2/wordpress-integration/
看看 Model/Menu.php。从那里开始,我必须构建它以便在前端获取 WP 菜单。不幸的是没有 Menu.php 块,我想首先我必须建立块,然后是 xml 和 phtml 模板
菜单并非不完整,只是您没有正确检查代码。
以下代码将加载菜单数组。该数组包含构建菜单所需的所有信息。然后,您可以递归循环数组以使用所需的 HTML 结构构建菜单。如果您要将此菜单添加到现有菜单,这将很有用,因为它允许您匹配现有菜单使用的 HTML 结构。
// This uses the object manager
// A better way would be to inject the MenuFactory in your constructor
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$menu = $objectManager->create('FishPig\WordPress\Model\MenuFactory')->create();
$menuId = 3;
if ($menu->load($menuId)->getId()) {
echo sprintf('<pre>%s</pre>', print_r($menu->getMenuTreeArray(), true));
}
else {
echo 'No menu exists in WordPress with an ID of ' . (int)$menuId;
}
如果你不关心使用什么HTML结构,你可以使用下面的块:
\FishPig\WordPress\Block\Sidebar\Widget\NavMenu
如果您查看此块的代码,您会看到它检查菜单 ID 的数据项 'nav_menu'。您可以通过 XML 进行设置(如果您通过 XML 创建块)或使用 PHP:
创建整个内容$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$menuBlock = $objectManager->create('FishPig\WordPress\Block\Sidebar\Widget\NavMenuFactory')->create();
$menuId = 3;
echo $menuBlock->setNavMenu($menuId)->toHtml();
尽管此解决方案不如原始解决方案好,因为它强制您使用特定的 HTML 结构。使用第一个解决方案会更好,因为这将允许您使用所需的任何 HTML 结构。您的主题可能已经有一个包含 CSS 规则和 JS 的菜单,因此您可以使用此方法以正确的 HTML 结构构建菜单。