Gestion des menus

Dans FractalCMS, il est possible de créer des menus. c'est menu pourront être ensuite récupéré sur le site et affiché sur la page.

Interface

Editer / Ajouter

L'édition d'un article se réalise en cliquant sur le stylet de la ligne. La création se réalise en cliquant sur le bouton Ajouter.

Création d'un nouveau menu : étape 1

Lors de l'ajout d'un menu, il est demandé en étape 1 le nom de ce menu.

  1. actif : Permet d'activer le menu
  2. Nom : c'est le nom qui permettra de le trouver, cette valeur est unique

Création d'un nouveau menu : étape 2

Après avoir saisie un nom unique et valider le formulaire. Le formulaire ce met à jour afin de permettre d'ajouter des élements du menu, en cliquant sur le bouton Ajouter un élément.

Création d'un nouveau menu : ajout d'un élément

Les attributs du formulaire

Nom : Nom de l'élément

Route CMS : Lien vers un article actif de FractalCMS

Route locale : Lien vers une action d'un contrôleur hors FractalCMS de votre application Web

Parent : L'élément créé peut-être un enfant d'un autre élément.

Création d'un nouveau menu : Exemple créer menu "header"

Récupérer le menu sur votre application Web

Il est possible d'adapter la donnée de retour afin de correspondre à votre logique.

{
    try {
        $result = [];
            $menuId = Parameter::getParameter('MENU', $name);
            $menu = Menu::findOne($menuId);
            if ($menu instanceof Menu) {
                $menuItemsQuery = $menu->getMenuItemChild();
                $result = $this->build($menuItemsQuery);
            }
        return $result;
    } catch (Exception $e) {
        Yii::error($e->getMessage(), __METHOD__);
        throw $e;
    }
}

protected function build(ActiveQuery $menuItemsQuery)
{
    try {
        $result  = [];
        /** @var MenuItem $menuItem */
        foreach ($menuItemsQuery->each() as $menuItem) {
            $part = [];
            $contentTarget = $menuItem->getContent()->andWhere(['active' => 1])->one();
            if ($contentTarget instanceof Content || empty($menuItem->route) === false) {
                $route = ($contentTarget !== null) ? $contentTarget->getRoute() : $menuItem->route;
                $part['name'] = $menuItem->name;
                $part['route'] = $route;
                $subMenuQuery = $menuItem->getMenuItems();
                if ($subMenuQuery->count() > 0 ) {
                    $part['child'] = $this->build($menuItem->getMenuItems());
                }
                $result[] = $part;
            }
        }
        return $result;
    } catch (Exception $e) {
        Yii::error($e->getMessage(), __METHOD__);
        throw $e;
    }

}