/** * MODULE : Édition d'une news */ public function edit() { // Erreur 404 if (!$this->getData([$this->getUrl(0), $this->getUrl(2)])) { return false; } elseif ($this->getPost('submit')) { // Modifie la clef de la news si le titre a été modifié $key = $this->getPost('title') ? $this->getPost('title', helper::URL) : $this->getUrl(2); // Sauvegarde la date de création de la news $date = $this->getData([$this->getUrl(0), $this->getUrl(2), 'date']); // Si la clef à changée if ($key !== $this->getUrl(2)) { // Incrémente la nouvelle clef de la news pour éviter les doublons $key = helper::increment($key, $this->getData($this->getUrl(0))); // Supprime l'ancienne news $this->removeData([$this->getUrl(0), $this->getUrl(2)]); } // Modifie la news ou en crée une nouvelle si la clef a changée $this->setData([$this->getUrl(0), $key, ['title' => $this->getPost('title', helper::STRING), 'date' => $date, 'content' => $this->getPost('content')]]); // Enregistre les données $this->saveData(); // Notification de modification $this->setNotification('News modifiée avec succès !'); // Redirige vers l'édition de la nouvelle news si la clef à changée ou sinon vers l'ancienne helper::redirect('module/' . $this->getUrl(0) . '/edit/' . $key); } // Contenu de la page self::$content = template::openForm() . template::openRow() . template::text('title', ['label' => 'Titre de la news', 'value' => $this->getData([$this->getUrl(0), $this->getUrl(2), 'title']), 'required' => 'required']) . template::newRow() . template::textarea('content', ['class' => 'editor', 'value' => $this->getData([$this->getUrl(0), $this->getUrl(2), 'content'])]) . template::newRow() . template::button('back', ['value' => 'Retour', 'href' => helper::baseUrl() . 'module/' . $this->getUrl(0), 'col' => 2]) . template::submit('submit', ['col' => 2, 'offset' => 8]) . template::closeRow(); template::closeForm(); }
/** MODULE : Configuration de la redirection*/ public function index() { // Traitement du formulaire if ($this->getPost('submit')) { // Modifie l'URL de redirection $this->setData([$this->getUrl(0), 'url', $this->getPost('url', helper::URL)]); // Enregistre les données $this->saveData(); // Notification de succès $this->setNotification('URL de redirection enregistrée avec succès !'); // Redirige vers l'URL courante helper::redirect($this->getUrl()); } // Contenu de la page self::$content = template::openForm() . template::openRow() . template::text('url', ['label' => 'URL de redirection', 'value' => $this->getData([$this->getUrl(0), 'url'])]) . template::newRow() . template::button('back', ['value' => 'Retour', 'href' => helper::baseUrl() . 'edit/' . $this->getUrl(0), 'col' => 2]) . template::submit('submit', ['col' => 2, 'offset' => 8]) . template::closeRow() . template::closeForm(); }
/** MODULE : Aperçu des données saisies */ public function data() { // Liste données saisies if ($this->getData([$this->getUrl(0), 'data'])) { // Crée une pagination (retourne la première news et dernière news de la page et la liste des pages $pagination = helper::pagination($this->getData([$this->getUrl(0), 'data']), $this->getUrl()); // Inverse l'ordre du tableau pour afficher les données en ordre décroissant $inputs = array_reverse($this->getData([$this->getUrl(0), 'data'])); // Check si l'id du premier résultat est paire $firstPair = $pagination['first'] % 2 === 0; // Crée l'affichage des données en fonction de la pagination for ($i = $pagination['first']; $i < $pagination['last']; $i++) { // Ouvre la row ouverte à chaque id paire/impaire (dépend du premier résultat) if ($firstPair and $i % 2 === 0 or !$firstPair and $i % 2 === 1) { self::$content .= template::openRow(); } // Formatage des données $content = ''; foreach ($inputs[$i] as $input => $value) { $content .= $input . ' : ' . $value . '<br>'; } self::$content .= template::background($content, ['col' => 6]); // Ferme la row ouverte à chaque id paire/impaire (dépend du premier résultat) ou pour le dernier champ if ($firstPair and $i % 2 === 1 or !$firstPair and $i % 2 === 0 or !isset($inputs[$i + 1])) { self::$content .= template::closeRow(); } } // Ajoute la liste des pages en dessous des news self::$content .= $pagination['pages']; } // Contenu de la page self::$content = template::title('Données saisies') . self::$content . template::openRow() . template::button('back', ['value' => 'Retour', 'href' => helper::baseUrl() . 'module/' . $this->getUrl(0), 'col' => 2]) . template::closeRow(); }
/** * Crée un système de pagination (retourne un tableau contenant les informations sur la pagination (first, last, pages)) * @param array $array Tableau de donnée à utiliser * @param string $url URL à utiliser, la dernière partie doit correspondre au numéro de page, par défaut utiliser $this->getUrl() * @return array */ public static function pagination($array, $url) { // Scinde l'url $url = explode('/', $url); // Url de pagination $urlPagination = is_numeric(end($url)) ? array_pop($url) : 1; // Url de la page courante $urlCurrent = implode('/', $url); // Nombre d'éléments à afficher $nbElements = count($array); // Nombre de page $nbPage = ceil($nbElements / 10); // Page courante $currentPage = is_numeric($urlPagination) ? (int) $urlPagination : 1; // Premier élément de la page $firstElement = ($currentPage - 1) * 10; // Dernier élément de la page $lastElement = $firstElement + 10; $lastElement = $lastElement > $nbElements ? $nbElements : $lastElement; // Mise en forme de la liste des pages $pages = false; for ($i = 1; $i <= $nbPage; $i++) { $disabled = $i === $currentPage ? ' class="disabled"' : false; $pages .= '<a href="' . helper::baseUrl() . $urlCurrent . '/' . $i . '"' . $disabled . '>' . $i . '</a>'; } // Retourne un tableau contenant les informations sur la pagination return ['first' => $firstElement, 'last' => $lastElement, 'pages' => '<div class="pagination">' . $pages . '</div>']; }