Nachdem Alexander vor einiger Zeit so freundlich war und euch gezeigt hat, wie man ziemlich einfach ein neues Modul für Icinga Web 2 einrichtet, setze ich genau an dieser Stelle an und erkläre, wieder auf der Basis des Hello World Moduls, die Einrichtung der Navigation.
Wir befinden uns also aktuell hier:
Untergeordnete Menü-Punkte
Angenommen wir möchten unseren Menü-Punkt auf der linken Seite in weitere Themen-Bereiche aufteilen, müssen wir uns mal wieder die configuration.php ansehen:
menuSection('Hello World', array(
'url' => 'helloworld'
));
Für dieses Beispiel, werden wir ihn in zwei Einträge aufteilen:
menuSection('Hello', array(
'icon' => 'globe'
));
$section->add('World', array(
'url' => 'helloworld',
'priority' => 100
));
$section->add('Universe', array(
'url' => 'helloworld/universe',
'priority' => 101
));
Wer genau hinsieht, stellt fest, dass unser erster Menü-Punkt nun auf keine URL mehr verlinkt. Das führt dazu, dass er nur noch als Gruppierungs-Element dient und bei Interaktion, seine untergeordneten Einträge ausklappt. Dafür allerdings hat er nun ein schickes Icon spendiert bekommen. Außerdem wurde eine neue Eigenschaft hinzugefügt, mit der die Priorität (oder auch Reihenfolge) der Einträge beeinflusst werden kann. Diese sind übrigens standardmäßig alphabetisch sortiert.
Nun sieht das Menü folgendermaßen aus:
Tabs
Möchte man keinen Menü-Punkt einrichten, Menü-Unterpunkte noch weiter gruppieren oder hat schlicht und einfach keinen Platz mehr (soll schon vorgekommen sein..) kann man alternativ auch Tabs in seinen Sichten anzeigen. Der Einfachheit halber, oder auch weil mir gerade nichts besseres einfällt, werden wir nun die gerade hinzugefügten Menü-Unterpunkte erneut als Tabs in den beiden Sichten anzeigen. Hierfür sehen wir uns mal den IndexController an:
getTabs()->activate('world');
}
public function getTabs()
{
$tabs = parent::getTabs();
$tabs->add(
'world',
array(
'title' => 'World',
'url' => 'helloworld'
)
);
$tabs->add(
'universe',
array(
'title' => 'Universe',
'url' => 'helloworld/universe'
)
);
return $tabs;
}
}
Damit die Tabs allerdings auch angezeigt werden, müssen wir sie in der Sicht für die indexAction (index.phtml) ausgeben:
compact): ?>
= $tabs; ?>
Hello World
Betrachtet das neu hinzugefügte Konstrukt als Konvention. Niemand zwingt euch dazu es genau so zu machen, jedoch stellt ihr damit sicher, dass eure Sichten im Vollbild-Modus und Dashboard korrekt angezeigt werden.
Da allerdings der Menü-Punkt und Tab für das Universum gerade ins Leere führt.. müssen wir noch einen Controller für diese Route anlegen. Dazu erstellen wir eine neue Datei mit dem Namen UniverseController.php und das dazu gehörige view script:
getTabs()->activate('universe');
}
public function getTabs()
{
$tabs = parent::getTabs();
$tabs->add(
'world',
array(
'title' => 'World',
'url' => 'helloworld'
)
);
$tabs->add(
'universe',
array(
'title' => 'Universe',
'url' => 'helloworld/universe'
)
);
return $tabs;
}
}
compact): ?>
= $tabs; ?>
Hello Universe
Die Datei-Struktur sollte nun folgendermaßen aussehen:
Spalten
Wer zufällig schon einmal das Monitoring-Modul eingesetzt hat, wird bemerkt haben, dass manche Links nicht zu einer Änderung des kompletten Inhalts führen, sondern neue Inhalte rechts in einer zusätzlichen Spalte darstellen. Damit die neue Route, welche wir im folgenden definieren, nicht den kompletten Inhalt verändert, müssen wir das allerdings explizit ändern.
UniverseController.php
// *Snip*
public function galaxyAction()
{
$galaxy = $this->params->getRequired('galaxy');
$this->view->galaxy = $galaxy;
}
public function getTabs()
// *Snip*
views/scripts/universe/galaxy.phtml
compact): ?>
= $tabs->showOnlyCloseButton(); ?>
Hello = $galaxy; ?>
views/scripts/universe/index.phtml
Hello Universe
= $this->qlink('Greet the Milky Way', 'helloworld/universe/galaxy', array('galaxy' => 'Milky Way')); ?>
= $this->qlink('Greet Andromeda', 'helloworld/universe/galaxy', array('galaxy' => 'Andromeda')); ?>
0 Kommentare