Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 31 additions & 12 deletions modules/mod_menu/mod_menu.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,38 @@

defined('_JEXEC') or die;

use Joomla\CMS\Helper\ModuleHelper;
// TS changes - start
use Joomla\Module\Menu\Site\Helper\MenuHelper;
use Joomla\Module\Menu\Site\Module\MenuModule;
// TS changes - end

$list = MenuHelper::getList($params);
$base = MenuHelper::getBase($params);
$active = MenuHelper::getActive($params);
$default = MenuHelper::getDefault();
$active_id = $active->id;
$list = MenuHelper::getList($params);
$base = MenuHelper::getBase($params);
$active = MenuHelper::getActive($params);
$default = MenuHelper::getDefault();
$active_id = $active->id;
$default_id = $default->id;
$path = $base->tree;
$showAll = $params->get('showAllChildren', 1);
$class_sfx = htmlspecialchars($params->get('class_sfx', ''), ENT_COMPAT, 'UTF-8');
$path = $base->tree;
$showAll = $params->get('showAllChildren', 1);
$class_sfx = htmlspecialchars($params->get('class_sfx', ''), ENT_COMPAT, 'UTF-8');

if (count($list)) {
require ModuleHelper::getLayoutPath('mod_menu', $params->get('layout', 'default'));
}
// TS changes - start
$data = [
'module' => $module,
'list' => $list,
'active' => $active,
'default' => $default,
'active_id' => $active_id,
'default_id' => $default_id,
'path' => $path,
'showAll' => $showAll,
'class_sfx' => $class_sfx,
];

$modInstance = new MenuModule($params, $module);
$modInstance->setData($data);

$layout = '@module/mod_menu/' . explode(':', $params->get('layout', 'default'))[1] . '/' . explode(':', $params->get('layout', 'default'))[1] . '.html.twig';

echo $modInstance->render($layout);
// TS changes - end
59 changes: 59 additions & 0 deletions modules/mod_menu/src/Module/MenuModule.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php
/**
* @version 3.0.0
* @package Joomla.Site
* @subpackage mod_menu
*
* @copyright Copyright (C) Katalyst Education 2015. Wszystkie prawa zastrzeżone.
* @license GNU General Public License v2 lub późniejsza; zobacz LICENSE.txt
* @author Tomasz Stach <tomasz.stach@katalysteducation.org> - http://katalysteducation.org
*/

namespace Joomla\Module\Menu\Site\Module;

defined('_JEXEC') || die;

\JLoader::import('twig.library');

use Phproberto\Joomla\Twig\Module\BaseTwigModule;

/**
* Menu module.
*
* @since 2.0.0
*/
class MenuModule extends BaseTwigModule
{
/**
* Module created by module
*
* @var string
*/
protected $data;

/**
* Method to set data from module.
*
* @param array $data
*/
public function setData(array $data) : void
{
$this->data = $data;
}

/**
* Load layout data.
*
* @return array
*/
protected function loadLayoutData() : array
{
return [
'cssClass' => $this->getCssClass(),
'cssId' => $this->getCssId(),
'moduleInstance' => $this,
'params' => $this->getParams(),
'data' => $this->data
];
}
}
26 changes: 0 additions & 26 deletions modules/mod_menu/tmpl/collapse-default.php

This file was deleted.

93 changes: 1 addition & 92 deletions modules/mod_menu/tmpl/default.php
Original file line number Diff line number Diff line change
@@ -1,92 +1 @@
<?php

/**
* @package Joomla.Site
* @subpackage mod_menu
*
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

defined('_JEXEC') or die;

use Joomla\CMS\Helper\ModuleHelper;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $app->getDocument()->getWebAssetManager();
$wa->registerAndUseScript('mod_menu', 'mod_menu/menu.min.js', [], ['type' => 'module']);
$wa->registerAndUseScript('mod_menu', 'mod_menu/menu-es5.min.js', [], ['nomodule' => true, 'defer' => true]);

$id = '';

if ($tagId = $params->get('tag_id', '')) {
$id = ' id="' . $tagId . '"';
}

// The menu class is deprecated. Use mod-menu instead
?>
<ul<?php echo $id; ?> class="mod-menu mod-list nav <?php echo $class_sfx; ?>">
<?php foreach ($list as $i => &$item) {
$itemParams = $item->getParams();
$class = 'nav-item item-' . $item->id;

if ($item->id == $default_id) {
$class .= ' default';
}

if ($item->id == $active_id || ($item->type === 'alias' && $itemParams->get('aliasoptions') == $active_id)) {
$class .= ' current';
}

if (in_array($item->id, $path)) {
$class .= ' active';
} elseif ($item->type === 'alias') {
$aliasToId = $itemParams->get('aliasoptions');

if (count($path) > 0 && $aliasToId == $path[count($path) - 1]) {
$class .= ' active';
} elseif (in_array($aliasToId, $path)) {
$class .= ' alias-parent-active';
}
}

if ($item->type === 'separator') {
$class .= ' divider';
}

if ($item->deeper) {
$class .= ' deeper';
}

if ($item->parent) {
$class .= ' parent';
}

echo '<li class="' . $class . '">';

switch ($item->type) :
case 'separator':
case 'component':
case 'heading':
case 'url':
require ModuleHelper::getLayoutPath('mod_menu', 'default_' . $item->type);
break;

default:
require ModuleHelper::getLayoutPath('mod_menu', 'default_url');
break;
endswitch;

// The next item is deeper.
if ($item->deeper) {
echo '<ul class="mod-menu__sub list-unstyled small">';
} elseif ($item->shallower) {
// The next item is shallower.
echo '</li>';
echo str_repeat('</ul></li>', $item->level_diff);
} else {
// The next item is on the same level.
echo '</li>';
}
}
?></ul>
<?php defined('_JEXEC') or die; ?>
16 changes: 16 additions & 0 deletions modules/mod_menu/tmpl/default/default.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<ul class="{{ params.moduleclass_sfx }}">
{% for item in data.list %}
<li>
{% set classes = data.class_sfx ~ (item.anchor_css ? (" " ~ item.anchor_css) : "") ~ (item.id == data.active.id ? " active" : "") %}
<a href="{{ item.flink }}" class="{{ classes }}" {% if item.browserNav == '1' %}target="_blank"{% endif %} title="{{ item.anchor_title }}">{{ item.title }}</a>
{% if item.deeper %}
<ul>
{% elseif item.shallower %}
{% for i in range(1, item.level_diff) %}
</ul></li>
{% endfor %}
{% else %}
</li>
{% endif %}
{% endfor %}
</ul>
97 changes: 97 additions & 0 deletions modules/mod_menu/tmpl/default/default.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
## Info

**Module:** mod_menu

**Template:** default

**Description:** This is the view which we use to display a default menu items.

## Data

### {{ data.list }}

This is a list of all menu items. It should be displayed in such way:
```
{% if data.list|length > 0 %}
<ul>
{% for item in data.list %}
<li>
<a href="{{ item.flink }}" class="{{ data.class_sfx }} {% if item.id in data.path or (item.type == 'alias' and data.path|length > 0 and item.params.get('aliasoptions') == data.path|last) %} active{% endif %}" title="{{ item.anchor_title }}">{{ item.title }}</a>
{% if item.deeper %}
<ul>
{% elseif item.shallower %}
{% for i in range(1, item.level_diff) %}
</ul></li>
{% endfor %}
{% else %}
</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
```

**Tips:**

- Item link should be taken from:
```
{{ item.flink }}
```

- Info about active element should be taken from the `data.path` for specific ID:
```
if item.id in data.path
```
or for the `aliasoptions` for the an 'alias' **NOT TESTED**:
```
data.path|length > 0 and item.params.get('aliasoptions') == data.path|last
```

- If the next item is deeper:
```
{% if item.deeper %}
```

- If the next item is shallower:
```
{% elseif item.shallower %}
```

- How many levels should be ended:
```
{% for i in range(1, item.level_diff) %}
</ul></li>
{% endfor %}
```

### {{ data.base }}

This is a base menu item (usualy is the same as active).

### {{ data.active }}

This is an active menu item.

### {{ data.default }}

This is a default menu item for the webpage (home page).

### {{ data.active_id }}

This is a ID for active item.

### {{ data.default_id }}

This is a ID for default item.

### {{ data.path }}

This is a path for current subpage.

### {{ data.showAll }}

This is a showAll marker.

### {{ pageclass_sfx }}

CSS class suffix.
Loading