From eb3e1eb8c8365d3b3d1d39f24314ba420255afc2 Mon Sep 17 00:00:00 2001 From: polo Date: Mon, 21 Apr 2025 20:36:10 +0200 Subject: page menu et chemin, partie1 --- src/view/FooterBuilder.php | 2 +- src/view/HeaderBuilder.php | 2 + src/view/MenuBuilder.php | 88 +++++++++++++++++++++++++++++++++++++++++++ src/view/NavBuilder.php | 9 ++++- src/view/templates/header.php | 2 +- src/view/templates/menu.php | 15 ++++++++ 6 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 src/view/MenuBuilder.php create mode 100644 src/view/templates/menu.php (limited to 'src/view') diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php index 49da71c..5a7748f 100644 --- a/src/view/FooterBuilder.php +++ b/src/view/FooterBuilder.php @@ -29,7 +29,7 @@ class FooterBuilder extends AbstractBuilder $empty_admin_zone = 'empty_admin_zone'; $link_edit_page = new URL(['page' => CURRENT_PAGE, 'action' => 'modif_page']); $link_new_page = new URL(['from' => CURRENT_PAGE, 'page' => 'nouvelle_page']); - $link_change_paths = new URL(['from' => CURRENT_PAGE, 'page' => 'menu_chemins']); + $link_change_paths = new URL(['page' => 'menu_chemins']); $link_change_password = new URL(['from' => CURRENT_PAGE, 'action' => 'modif_mdp']); isset($_GET['id']) ? $link_change_password->addParams(['id' => $_GET['id']]) : ''; diff --git a/src/view/HeaderBuilder.php b/src/view/HeaderBuilder.php index eef2663..28aae13 100644 --- a/src/view/HeaderBuilder.php +++ b/src/view/HeaderBuilder.php @@ -16,7 +16,9 @@ class HeaderBuilder extends AbstractBuilder { if($child->getName() === 'nav'){ $this->nav = $child; + // actuellement le noeud nav ne contient aucune info utile et l'envoyer à NavBuilder est inutile $nav_builder = new NavBuilder($this->nav); + $nav = $nav_builder->render(); } elseif($child->getName() === 'breadcrumb'){ diff --git a/src/view/MenuBuilder.php b/src/view/MenuBuilder.php new file mode 100644 index 0000000..0fcfbe5 --- /dev/null +++ b/src/view/MenuBuilder.php @@ -0,0 +1,88 @@ +getName() . '.php'; + + if(file_exists($viewFile)) + { + /*if(!empty($node->getNodeData()->getData())) + { + extract($node->getNodeData()->getData()); + }*/ + + // ajouter un article + $new_article = ''; + if($_SESSION['admin']) + { + $this->unfoldMenu(Director::$menu_data, 0 - $this->margin_left_multiplier); + } + else{ + header('Location: ' . new URL); + die; + } + + ob_start(); + require $viewFile; + $this->html = ob_get_clean(); // pas de concaténation ici, on écrase + } + } + + private function unfoldMenu(Page $menu, int $margin_left): void + { + $margin_left += $this->margin_left_multiplier; + $this->html .= '
' . "\n"; + + foreach($menu->getChildren() as $entry) + { + $div_style = 'margin-left: ' . $margin_left . 'px;'; + $checked = $entry->IsInMenu() ? 'checked' : ''; + $this->html .= '
+ + + + + + + + '; + + if(str_starts_with($entry->getEndOfPath(), 'http')){ + $this->html .= ' + ' . $entry->getEndOfPath() . ' + '; + } + else{ + $this->html .= '' . $entry->getPagePath() . ''; + } + + + // supprimer me label "visible" et griser le texte et bouton en JS à la place + + /* + => flèche gauche: position = position du parent + 1, parent = grand-parent, recalculer les positions + => flèche droite: position = nombre d'éléments de la fraterie + 1, l'élément précédent devient le parent + => flèches haut et bas: inversement de position, comme pour les noeuds, mais dans la table page + => checkbox: in_menu ^= 1 + */ + + if(count($entry->getChildren()) > 0){ + $this->unfoldMenu($entry, $margin_left); + } + $this->html .= '
' . "\n"; + } + $this->html .= "
\n"; + $margin_left -= $this->margin_left_multiplier; + } +} \ No newline at end of file diff --git a/src/view/NavBuilder.php b/src/view/NavBuilder.php index 603fcfa..2718569 100644 --- a/src/view/NavBuilder.php +++ b/src/view/NavBuilder.php @@ -1,5 +1,7 @@ html .= ''; } diff --git a/src/view/templates/header.php b/src/view/templates/header.php index 0bf4396..4b633a6 100644 --- a/src/view/templates/header.php +++ b/src/view/templates/header.php @@ -1,7 +1,7 @@
-
+ diff --git a/src/view/templates/menu.php b/src/view/templates/menu.php new file mode 100644 index 0000000..a7f318e --- /dev/null +++ b/src/view/templates/menu.php @@ -0,0 +1,15 @@ + \ No newline at end of file -- cgit v1.2.3