Cómo añadir o quitar 1 año

Resuelto
chabinot Mensajes publicados 391 Estado Miembro -  
jordane45 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

  1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
     

    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

    0
  2. chabinot Mensajes publicados 391 Estado Miembro 16
     

    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.

    0
    1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
       

      Como te dije, hay que pasar DOS variables a tu código

      el prev o el next, como lo has hecho

      Y ... el AÑO mostrado por tu calendario para que sepa sobre qué valor debe actuar ...

      0
  3. chabinot Mensajes publicados 391 Estado Miembro 16
     

    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); } ?>
    0
    1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
       

      Cuando haces clic en tus botones ... el año cambia en la URL (donde pasaste la variable)?

      ¿Y por qué tienes .. de un lado POST .. y del otro .. GET?

      Si quieres hacerlo en POST, hay que almacenar el año en curso en tu formulario (en un campo hidden, si acaso)

      0
  4. chabinot Mensajes publicados 391 Estado Miembro 16
     

    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.

    0
  5. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
     

    ¿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

    0
  6. chabinot Mensajes publicados 391 Estado Miembro 16
     

    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" } } 
    0
  7. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
     

    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

    0
  8. chabinot Mensajes publicados 391 Estado Miembro 16
     

    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.

    0
    1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
       

      Con GET con un enlace… Y transfiriendo dos variables… Esa también era mi propuesta…

      Piensa en marcar el asunto como resuelto.

      0