Cómo añadir o quitar 1 año
Resueltojordane45 Mensajes publicados 30427 Fecha de registro Estado Moderador Última intervención -
¿Cómo puedo añadir o restar un año haciendo clic en los botones 'next' o 'previous'?
Merci de votre aide.
Cordialement
8 respuestas
-
Hola,
Primero necesitarías que tus botones inicien una acción...
Ya sea mediante un enlace o mediante una llamada ajax.
Una vez que hayas implementado eso, transmitir una variable que contendrá dos variables: la fecha actual y si hay que hacer prev o next, será fácil.
A partir de ahí, podrás, en tu PHP, recuperar estas dos variables y usarlas para añadir o restar lo que desees.
.
Atentamente,
Jordane -
Effectivement,
Voilà les lignes modifiées :
<?php namespace App; use \DateTime; require_once __DIR__ . '/vendor/autoload.php'; $year = new DateTime(); $year = $year->format('Y'); $year = intval($year); if(isset($_POST['prev'])) { $anne = $year; $anne--; var_dump($anne); } if(isset($_POST['next'])) { $year++; } $year = new Year($year); ?> <nav> <form method="post"> <input class="btn btn-primary" name="prev" type="submit" value="Précédant"> </form> <button class="btn btn-success" id="premier">Premier semestre</button> <button class="btn btn-success" id="second">Deuxième semestre</button> <form method="post"> <input class="btn btn-primary" name="next" type="submit" value="Suivant"> </form> </nav>Le souci que j'ai maintenant, c'est qu'il ne le fait qu'une fois prev -> 2022, next->2024.
J'ai dû mal faire quelque part.
Si tu as une idée, je t'en saurai très reconnaissant.
-
Gracias,
Solo quiero el año, solo funciona una vez.
Aquí está de nuevo el código:
<?php namespace App; require_once __DIR__ . '/vendor/autoload.php'; $year = new Year($_GET['year'] ?? null); if(isset($_POST['prev'])) { $year->year--; $year = new Year($year->year); } if(isset($_POST['next'])) { $year->year++; $year = new Year($year->year); } ?> -
Gracias,
Intenté poner todo en _GET, pero no se muestra nada en la URL, por eso introduzco la URL.
Soy un poco principiante en PHP.
gracias por ayudarme a codificarlo correctamente.
-
¿De qué forma envías los datos a tu código PHP? (¿Cuál es el código HTML o JS que se utiliza a nivel de tus botones?
.
Atentamente,
Jordane -
Je te renvoie tout ça.
1 - index.php
<?php namespace App; require_once __DIR__ . '/vendor/autoload.php'; $year = new Year($_GET['year'] ?? null); if(isset($_GET['prev'])) { $year->year--; $year = new Year($year->year); } if(isset($_GET['next'])) { $year->year++; $year = new Year($year->year); } ?> <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Calendrier</title> <!-- Favicon --> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> <!-- Styles CSS --> <link rel="stylesheet" href="css/styles.css"> <!-- Scripts --> <script src="js/date.prototype.js" defer></script> <script src="js/date.time.js" defer></script> <script src="js/calend.js" defer></script> </head> <body> <div class="container"> <header> <div class="datetime"> <span class="date"></span><br> <span class="num-day"></span> <span class="num-week"></span><br> <span class="reste"></span> </div> <h1><a href="">Calendrier</a> <?= $year->year ?> </h1> <div class="time"></div> </header> <nav> <form method="get"> <input class="btn btn-primary" name="prev" type="submit" value="<"> </form> <button class="btn btn-success" id="premier">Premier semestre</button> <button class="btn btn-success" id="second">Deuxième semestre</button> <form method="post"> <input class="btn btn-primary" name="next" type="submit" value=">"> </form> </nav> <section id="sect01"> <?= $year->getFirstSem($year->year) ?> </section> <section id="sect02"> <?= $year->getSecondSem($year->year) ?> </section> </div> <footer> <p>Copyright © calendrier (2023-<span class="cpy"></span></span>). Tous droits réservés</p> </footer> </body> </html>2 - calend.js (uniquement pour affichage de page)
// Déclarations const first = document.querySelector('#premier'), second = document.querySelector('#second'), sect01 = document.querySelector('#sect01'), sect02 = document.querySelector('#sect02'), opt = { month: 'numeric' } month = new Date().toLocaleDateString('fr-FR', opt) // Afficher premier ou second semestre suivant le mois if (month <= 6) { sect01.style.display = 'flex' sect02.style.display = 'none' } else { sect01.style.display = 'none' sect02.style.display = 'flex' } // Afficher premier semestre au click first.addEventListener('click', () => { sect01.style.display = 'flex' sect02.style.display = 'none' }) second.addEventListener('click', () => { sect01.style.display = 'none' sect02.style.display = 'flex' })Je n'arrive pas à coder correctement les boutons 'Previous' et 'Next'.
3 - composer.json
{ "name": "amaur/new-php", "description": "Calendrier", "type": "project", "license": "1.0.0", "authors": [ { "name": "Amaury le Cour" } ], "minimum-stability": "stable", "autoload": { "psr-4": { "App\\": "class/" } }, "require": { "symfony/var-dumper": "^6.2" } } -
Utilizas un formulario en POST para transmitir tus datos
<form method="post"> <input class="btn btn-primary" name="next" type="submit" value=">"> </form>
Como te dije ya... te bastaría añadir un input hidden que contenga el año "en curso" para luego poder sumar o restar a ese año...
.
Cordialement,
Jordane -
Gracias por todo.
En realidad, solo añadí 2 métodos a mi clase Year así:
/** * Envia el año siguiente * @return Year */ public function nextYear(): Year { $year = $this->year + 1; return new Year($year); } /** * Envia el año anterior * @return Year */ public function prevYear(): Year { $year = $this->year - 1; return new Year($year); }y en index.php queda:
<nav> <a href="<?= $url ?>?year=<?= $year->prevYear()->year ?>" class="btn btn-primary">Prev</a> <button class="btn btn-success" id="premier">Primer semestre</button> <button class="btn btn-success" id="second">Segundo semestre</button> <a href="<?= $url ?>?year=<?= $year->nextYear()->year ?>" class="btn btn-primary">Next</a> </nav>
$url = $_SERVER['PHP_SELF'];
Ça marche exactement comme je le voulais.