Skip to content

Commit 9ec9b39

Browse files
committed
Initial commit of Webgriffe_Theme module
0 parents  commit 9ec9b39

File tree

4 files changed

+151
-0
lines changed

4 files changed

+151
-0
lines changed

Block/Html/Topmenu.php

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
<?php
2+
3+
namespace Webgriffe\Theme\Block\Html;
4+
5+
use Magento\Theme\Block\Html\Topmenu as CoreTopmenu;
6+
7+
class Topmenu extends CoreTopmenu
8+
{
9+
protected function _toHtml()
10+
{
11+
$this->setModuleName($this->extractModuleName(CoreTopmenu::class));
12+
return parent::_toHtml();
13+
}
14+
15+
protected function _getHtml(
16+
\Magento\Framework\Data\Tree\Node $menuTree,
17+
$childrenWrapClass,
18+
$limit,
19+
$colBrakes = []
20+
) {
21+
$html = '';
22+
23+
$children = $menuTree->getChildren();
24+
$parentLevel = $menuTree->getLevel();
25+
$childLevel = $parentLevel === null ? 0 : $parentLevel + 1;
26+
27+
$counter = 1;
28+
$itemPosition = 1;
29+
$childrenCount = $children->count();
30+
31+
$parentPositionClass = $menuTree->getPositionClass();
32+
$itemPositionClassPrefix = $parentPositionClass ? $parentPositionClass . '-' : 'nav-';
33+
34+
foreach ($children as $child) {
35+
$child->setLevel($childLevel);
36+
$child->setIsFirst($counter == 1);
37+
$child->setIsLast($counter == $childrenCount);
38+
$child->setPositionClass($itemPositionClassPrefix . $counter);
39+
40+
$caretCode = '';
41+
$anchorAttributes = '';
42+
if ($child->hasChildren() && $childLevel < 1) {
43+
$anchorAttributes = 'class="dropdown-toggle" data-toggle="dropdown" role="button" ' .
44+
'aria-haspopup="true" aria-expanded="false"';
45+
$caretCode = ' <span class="caret"></span>';
46+
}
47+
48+
if (count($colBrakes) && $colBrakes[$counter]['colbrake']) {
49+
$html .= '</ul></li><li class="column"><ul>';
50+
}
51+
52+
$html .= '<li ' . $this->_getRenderedMenuItemAttributes($child) . '>';
53+
$html .= '<a href="' . $child->getUrl() . '" ' . $anchorAttributes . '>' .
54+
$this->escapeHtml($child->getName()) . $caretCode . '</a>' .
55+
$this->_addSubMenu(
56+
$child,
57+
$childLevel,
58+
$childrenWrapClass,
59+
$limit
60+
) . '</li>';
61+
$itemPosition++;
62+
$counter++;
63+
}
64+
65+
if (count($colBrakes) && $limit) {
66+
$html = '<li class="column"><ul>' . $html . '</ul></li>';
67+
}
68+
69+
return $html;
70+
}
71+
72+
protected function _addSubMenu($child, $childLevel, $childrenWrapClass, $limit)
73+
{
74+
$html = '';
75+
if (!$child->hasChildren()) {
76+
return $html;
77+
}
78+
79+
$colStops = null;
80+
if ($childLevel == 0 && $limit) {
81+
$colStops = $this->_columnBrake($child->getChildren(), $limit);
82+
}
83+
84+
$submenuClass = $this->getSubmenuClass() ?: 'submenu';
85+
$html .= '<ul class="level' . $childLevel . ' ' . $submenuClass . '">';
86+
$html .= $this->_getHtml($child, $childrenWrapClass, $limit, $colStops);
87+
$html .= '</ul>';
88+
89+
return $html;
90+
}
91+
92+
protected function _getMenuItemClasses(\Magento\Framework\Data\Tree\Node $item)
93+
{
94+
$classes = [];
95+
96+
$levelClassPrefix = $this->getItemLevelClassPrefix() ?: 'level';
97+
$firstClass = $this->getFirstItemClass() ?: 'first';
98+
$activeClass = $this->getActiveItemClass() ?: 'active';
99+
$hasActiveClass = $this->getHasActiveItemClass() ?: 'has-active';
100+
$lastClass = $this->getLastItemClass() ?: 'last';
101+
$parentClass = $this->getParentItemClass() ?:'parent';
102+
103+
$classes[] = $levelClassPrefix . $item->getLevel();
104+
$classes[] = $item->getPositionClass();
105+
106+
if ($item->getIsFirst()) {
107+
$classes[] = $firstClass;
108+
}
109+
110+
if ($item->getIsActive()) {
111+
$classes[] = $activeClass;
112+
} elseif ($item->getHasActive()) {
113+
$classes[] = $hasActiveClass;
114+
}
115+
116+
if ($item->getIsLast()) {
117+
$classes[] = $lastClass;
118+
}
119+
120+
if ($item->getClass()) {
121+
$classes[] = $item->getClass();
122+
}
123+
124+
if ($item->hasChildren()) {
125+
$classes[] = $parentClass;
126+
}
127+
128+
return $classes;
129+
}
130+
}

etc/di.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
4+
<preference for="Magento\Theme\Block\Html\Topmenu" type="Webgriffe\Theme\Block\Html\Topmenu" />
5+
</config>

etc/module.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
4+
<module name="Webgriffe_Theme" setup_version="1.0.0">
5+
<sequence>
6+
Magento_Theme
7+
</sequence>
8+
</module>
9+
</config>

registration.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
\Magento\Framework\Component\ComponentRegistrar::register(
4+
\Magento\Framework\Component\ComponentRegistrar::MODULE,
5+
'Webgriffe_Theme',
6+
__DIR__
7+
);

0 commit comments

Comments
 (0)