Magento 2 WordPress集成(FishPig扩展) - 在Magento中添加菜单

时间:2018-01-24 13:46:00

标签: magento magento2 fishpig

我使用fishPig Magento WordPress Integration for magento 2.在第一个版本中,建立了magento中添加菜单的功能。在第二个版本中,它的不完整和开发人员将我指向模型Menu.php以实现这一目标。需要一些帮助的人,以便指出正确的方向。有人有同样的问题吗?

扩展名:https://fishpig.co.uk/magento-2/wordpress-integration/

看一下Model / Menu.php。从那里我必须建立它,以便在前端获得WP菜单。不幸的是没有Menu.php Block,我想首先我要建立块然后是xml和phtml模板

1 个答案:

答案 0 :(得分:2)

菜单不完整,您还没有正确检查代码。

以下代码将加载菜单数组。此数组包含构建菜单所需的所有信息。然后,您可以使用所需的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

如果您查看此块的代码,您会看到它检查数据项&#39; nav_menu&#39;用于菜单ID。您可以通过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结构中构建菜单。