Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/friendsofredaxo/navigation_array
Helper Class to build navigations for REDAXO cms
https://github.com/friendsofredaxo/navigation_array
navigation redaxo redaxo-addon
Last synced: about 1 month ago
JSON representation
Helper Class to build navigations for REDAXO cms
- Host: GitHub
- URL: https://github.com/friendsofredaxo/navigation_array
- Owner: FriendsOfREDAXO
- License: mit
- Created: 2019-09-15T11:55:12.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-08-09T14:30:21.000Z (4 months ago)
- Last Synced: 2024-08-09T16:54:11.802Z (4 months ago)
- Topics: navigation, redaxo, redaxo-addon
- Language: PHP
- Homepage:
- Size: 159 KB
- Stars: 31
- Watchers: 7
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# REDAXO FOR NavigationArray
Navigation Array ist ein PHP Klasse für die einfache Erstellung einer Navigationsstruktur als Array.
## Features
- Offline Artikel und Ycom Rechte werden berücksichtigt
- Startkategorie kann frei gewählt werden
- Tiefe kann festgelegt werden
- Kategorien filtern und manipulieren (z.B. mit Meta Infos) über Callbacks
- Mitgelieferte Fragmente für die HTML Ausgabe der Navigation## Array-Struktur
So sieht das generierte Array aus. Es enthält alle Kategorien und Unterkategorien bis zur angegebenen Tiefe. Offline Kategorien und Rechte aus Ycom werden vorher aus dem Array entfernt.
```php
array:7 [▼
0 => array:11 [▶]
1 => array:11 [▶]
2 => array:11 [▶]
3 => array:11 [▶]
4 => array:11 [▼
"catId" => 43
"parentId" => 0
"level" => 0
"catName" => "Kontakt"
"url" => "/kontakt/"
"hasChildren" => true
"children" => array:2 [▼
0 => array:11 [▼
"catId" => 178
"parentId" => 43
"level" => 1
"catName" => "Kontaktformular"
"url" => "/kontakt/kontaktformular/"
"hasChildren" => false
"children" => []
"path" => array:1 [▶]
"active" => false
"current" => false
]
1 => array:11 [▶]
]
"path" => []
"active" => true
"current" => true
]
5 => array:11 [▶]
6 => array:11 [▶]
]
```## Array generieren
### Aufruf mit Konstruktor
```php
// define namespace
use FriendsOfRedaxo\NavigationArray\BuildArray;
// create object
$navigationObject = new BuildArray(-1, 3);
// generate navigation array
$navigationArray = $navigationObject->generate();
```### Aufruf mit Methoden
```php
// define namespace
use FriendsOfRedaxo\NavigationArray\BuildArray;
// create navigation array
$navigationArray = BuildArray::create()
->setStart(-1)
->setDepth(4)
->setIgnore(true)
->setCategoryFilterCallback(CategoryFilter())
->setCustomDataCallback(CustomData())
->generate();
```## HTML Ausgabe
In erster Linie generiert Navigation Array ein Array. Die Ausgabe als HTML ist Aufgabe des Entwicklers. Hier sind einige Beispiele, wie das Array in HTML integriert werden kann.### Fragmente
Mit Fragmenten wird die Logic sauber vom Code getrennt. Das Fragment 'navigation.php' kann kopiert, angepasst und in `project` oder `theme` Ordner abgelegt werden.```php
// Festlegen des Namespace
use FriendsOfRedaxo\NavigationArray\BuildArray;// Navigation Array erstellen
$navigationObject = new BuildArray(-1, 3);
$navigationArray = $navigationObject->generate();//Fragmente laden Navigation Array und Klasse für aktive Elemente übergeben
$fragment = new rex_fragment();
$fragment->setVar('navigationArray', $navigationArray);
$fragment->setVar('activeClass', 'active');// Navigation ausgeben
echo $fragment->parse('navigation_array/navigation.php');
```
### PHP Funktion
Alternativ kann man das Array auch direkt in PHP Verarbeiten hier einige Beispiele
#### Beispiel einfache Navigation
```php
// Function to generate the navigation list
function generateNavigationList($items) {
if (empty($items)) {
return '';
}
$output = '
- ';
- ';
$output .= '' . $item['catName'] . '';// Check if this item has children
if ($item['hasChildren']) {
$output .= generateNavigationList($item['children']);
}$output .= '
';
foreach ($items as $item) {
$output .= '
}
$output .= '
return $output;
}
use FriendsOfRedaxo\NavigationArray\BuildArray;
$NavigationArray = BuildArray::create()->setDepth(3)->generate();
// Generate the navigation list
$navigationList = generateNavigationList($NavigationArray);
// Output the navigation list
echo $navigationList;
```
#### Beispiel erweiterte Navigation mit Callback
```php
use FriendsOfRedaxo\NavigationArray\BuildArray;
$mainnavi_array = (new BuildArray())
->setCustomDataCallback(function($cat) {
return ['navtype' => $cat->getValue('cat_navigationstyp')];
})
->generate();
$mainnavigation_items = [];
function createNavigationItems($navi) {
$items = [];
$class_active = $navi['active'] ? 'active' : '';
$class_current = $navi['current'] ? ' current' : '';
$class_has_child = $navi['children'] ? ' has-child' : '';
$items[] = "
{$navi['catName']}";
if ($navi['children']) {
$items[] = 'X';
$items[] = '
- ';
foreach ($navi['children'] as $nav_child) {
$items[] = createNavigationItems($nav_child);
}
$items[] = '
}
$items[] = '
return implode($items);
}
foreach ($mainnavi_array as $navi) {
$navtype_arr = explode('|', $navi['navtype']);
if (in_array('main', $navtype_arr)) {
$mainnavigation_items[] = createNavigationItems($navi);
}
}
$mainnavigation = '
- ' . implode($mainnavigation_items) . '
```
##### Erklärung
Zu Beginn wird die Klasse `BuildArray` aus dem `FriendsOfRedaxo\NavigationArray`-Namespace verwendet, um ein Array für die Hauptnavigation zu generieren. Dabei wird eine benutzerdefinierte Callback-Funktion verwendet, um zusätzliche Daten für jeden Eintrag in der Navigation festzulegen. In diesem Fall wird das Feld `navtype` mit dem Wert des Feldes `cat_navigationstyp` aus der Kategorie des Eintrags befüllt.
Anschließend wird eine leere Array-Variable `$mainnavigation_items` definiert. Diese wird später mit den generierten Navigationselementen befüllt.
Die Funktion `createNavigationItems` wird definiert, um rekursiv die HTML-Struktur für jedes Navigationselement zu erstellen. Dabei werden verschiedene CSS-Klassen basierend auf den Eigenschaften des Navigationselements gesetzt, wie z.B. `active`, `current` und `has-child`. Die Funktion gibt den HTML-Code für das Navigationselement als String zurück.
In der Schleife `foreach ($mainnavi_array as $navi)` wird über jedes Element in der generierten Hauptnavigation iteriert. Das Feld `navtype` wird in ein Array `$navtype_arr` aufgeteilt, indem der Wert anhand des Trennzeichens `|` gesplittet wird. Wenn der Wert `main` in `$navtype_arr` enthalten ist, wird die Funktion `createNavigationItems` aufgerufen und das generierte Navigationselement wird dem Array `$mainnavigation_items` hinzugefügt.
Schließlich wird die Hauptnavigation als HTML-Code in der Variable `$mainnavigation` gespeichert, indem die einzelnen Navigationselemente mit `implode` zu einem String zusammengefügt werden.
Das Feld `cat_navigationstyp` hat derzeit die Werte "meta, main, footer". Es wird verwendet, um zu bestimmen, welche Navigationselemente in der Hauptnavigation angezeigt werden sollen. In diesem Fall werden nur die Elemente angezeigt, deren `navtype` den Wert 'main' enthält.
#### Beispiel: Bootstrap 5 Navigation
```php
';
$sub[] = bsnavi5($cat['children']);
$sub[] = '';
$subnavi = join("\n", $sub);
}
$catname = $cat['catName'];
if ($cat['active'] == true) {
$active = ' active';
}
$catname = '' . $catname . '';
$output[] = '
}
return implode("\n", $output);
}
use FriendsOfRedaxo\NavigationArray\BuildArray;
$NavigationArray = BuildArray::create()->setDepth(4)->generate();
?>