11484 sujets

JavaScript, DOM et API Web HTML5

Bonjour , je dois afficher un tableau html basique et son contenu , mais il se trouve que le contenu actuel est de plus de 600 lignes.

Je ne souhaite pas faire de pagination car la personne pour qui je fais le site ne veut pas.
Donc nous avons pensé à un autre moyen de "trier" les lignes.

En gros, le contenu sont des infos de formations qui sont trier comme ça :
Thème > Domaine > Formations

Donc dans les intitule des colonnes le client voudrait un menu déroulant (en gros un <select> d'un formulaire) pour choisir le thème ou le domaine dont il veut voir afficher les formations.
Sauf que celà implique je pense du JS pour afficher directement les résultat une fois le thème ou domaine choisis.

Le seul problême est que je connais pas le JS et que je l'apprendrais que début 2018 ...
Ducoup j'aurai besoin d'aide dans la démarche JS à entreprendre car je suis vraiment mais vraiment une bouse en JS

Merci d'avance pour l'aide
Cordialement, Camille
Hello

Je pense qu'il faudra du JS et peut-être de l'ajax pour effectuer la recherche selon le choix.

Pour commencer, est-ce que cette liste est exhaustive ou non?
Salut !

Ton tableau doit se presenter comment ? sur trois colonne ? j'ai pas trop compris le Thème > Domaine > Formations, ça correspond à quoi ? à un champs du tableau ? une colonne ?
en gros les formations sont rangés dans des catégories que l'on appellent ici des domaines
les domaines sont rangés dans des catégories que l'on appellent des thèmes

Il y as : 11 thèmes , environ 50 domaines et 650+ formations.

J'aimerai afficher le contenu/infos des formations mais que certaines suivant le choix dans le <select> effectué
J'ai 2 questions/remarques:

1) Est-ce que cette liste est exhaustive? Ou vous serez amener à ajouter du contenu?

2) En ce qui concerne l'UI. J'imagine plutôt 2 boutons select. Un pour sélectionner un thème et un autre pour sélectionner un domaine.

Et je pense qu'on appel AJAX sera effectué à chaque fois qu'un thème ou un domaine sera selectionné.
Allan, Du contenu viendra à être ajouté.

Je pensais aussi à 2 Select , le seul problême est que je connais pas vraiment JS et pour moi AJAX n'est pas un langage ou autre mais pour le moment c'est seulement un produit ménager
En gros ce que je cherche n'est pas de toucher au tableau en lui même mais à son contenu en faisant la requete SQL voulu au moment du choix dans un des deux selecteur
Je ne connais pas vraiment JS ni JQuery mais est-ce que quelque chose comme quand la personne à choisis le thème on peut envoyer l'infos en $_POST (ducoup on fait un formulaire) ou autre ?

Sur un site un mec fais un truc comme ça apparement via :
document.form1.submit(); //on envoie le formulaire vers la page ciblée 


EDIT 1 :
Finalement je suis partie sur ça : maintenant je dois traiter lerésultat en PHP

EDIT 2 :
Sachant que je vais avoir 2 select, je peut cibler les select via un id sur chacun des selects ?
Modifié par OnePunch (24 Nov 2017 - 14:30)
Je vois pas en quoi c'est une solution.

Ce que vous voulez réaliser est clairement de l'ajax en JS.

Avec PHP, vous pourrez soumettre des données via un formulaire et les stockez en base de données mais vous ne pourrez jamais faire une fonctionnalité telle que "au clic, selon le choix du domaine, affiche moi les formations qui correspondent."

Peut-être effectivement, apprendre le JavaScript/jQuery/JSON , c'est qu'est une API et revenir avec plus de connaissances.
sachant que le site que je fais est pour mon stage et qu'il se finit mercredi j'ai pas le temps d'apprendre.

Mais avec ce que j'ai fais, je peut stocker le choix de l'utilisateur en $_POST pour ensuite traiter les données via du PhP, et c'est ce que je veut en fait
Pour une solution simple pure php à la "papa" et une petite touche de jQuery :

1 - construire la page en php côté serveur :
-Créer les selects themes et domaines en utilisant leur id dans la value de l'option
-Sélectionner toutes les lignes du tableau(avec l'id du theme et l'id du domaine associé à chaque enregistrement) pour créer le tableau en utilisant les identifiants des domaines et themes comme des class sur chaque ligne du tableau ou encore en utilisant les attributs de type "data-attribut" que permet le html5

2 - côté client il faut à chaque changement de valeur sur les selects agir sur les "class" :
Les valeurs sélectionnées dans les "<select>" correspondent aux "class" associées aux lignes que l'on veut voir affichée. Le principe est de masquer en utilisant la class "none" toutes les lignes puis de supprimer cette class "none" de toutes les lignes que l'on veut voir affichées...

illustration:

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

        <style>
            .none {
                display: none;
            }
        </style>
    </head>
    <body>
        <?php
        // put your code here
        ?>
        <span>
            <label for="theme">Theme</label>
            <select id="theme">
                <option value="t1">Nature</option>
                <option value="t2">Astronomie</option>
                <option value="t3">Technologie</option>
            </select>
        </span>
        <span>
            <label for="domaine">Domaine</label>
            <select id="domaine" >
                <option value="" class='vide t1 t2 t3' selected></option>
                <option value="d11" class='t1'>L'agriculture</option>
                <option value="d12" class='t1'>L'écologie</option>
                <option value="d14" class='t2'>Les étoiles</option>
                <option value="d15" class='t2'>Les planêtes</option>
                <option value="d16" class='t3'>Les voitures électriques</option>
                <option value="d17" class='t3'>Les drones</option>
                <option value="d18" class='t3'>Les smartphones</option>
            </select>
        </span>
        <div id="tableau">
            <table>
                <tr>
                    <th>Référence</th>
                    <th>Titre</th>
                    <th>Auteur</th>
                    <th>Publication</th>
                </tr>
                <tr class="t1 d11"><td>11111</td><td>La culture du blé</td><td>Biscote</td><td>01/11/2002</td></tr>
                <tr class="t1 d11"><td>11112</td><td>La culture des béteraves</td><td>Biscote</td><td>01/11/2002</td></tr>
                <tr class="t1 d12"><td>11113</td><td>Les herbicide naturel</td><td>Biscote</td><td>01/11/2002</td></tr>
                <tr class="t1 d12"><td>11114</td><td>Quest-ce que la culture bio</td><td>Biscote</td><td>01/11/2002</td></tr>
                <tr class="t2 d14"><td>11115</td><td>Le soleil</td><td>Biscote</td><td>01/11/2002</td></tr>
                <tr class="t2 d14"><td>11114</td><td>Les super mamie Nova</td><td>Biscote</td><td>01/11/2002</td></tr>
                <tr class="t2 d15"><td>11115</td><td>Le soleil</td><td>Biscote</td><td>01/11/2002</td></tr>
                <tr class="t2 d15"><td>11116</td><td>Le système solaire</td><td>Biscote</td><td>01/11/2002</td></tr>
            </table>
        </div>
        <script>
            $("#tableau tr").addClass("none");
            $("#theme").on("change", function(){
                theme=$(this).find("option").filter(":selected").attr("value");
                //Suppression de la sélection
                $("#domaine option").addClass("none");
                $("#domaine option").removeAttr("selected");
                //Sélection des domaines rattachés au theme sélectionné
                $("#domaine option."+theme).removeClass("none");
                $("#domaine option.vide").attr("selected","selected");
                $("#domaine option.vide").removeClass("none");
                
                selectLigne();
            });
            $("#domaine").on("change", function(){
                selectLigne();
            });
            
            /*
             * Sélection des lignes du tableau
             */
            function selectLigne() {
                theme=$("#theme").find("option").filter(":selected").attr("value");
                domaine=$("#domaine").find("option").filter(":selected").attr("value");
                //Suppression de la sélection
                $("#tableau tr").addClass("none");
                //Sélection des lignes rattachés au theme et domaine sélectionnés
                sep="";
                if (domaine!="") {
                    sep=".";
                }
                $("#tableau tr."+theme+sep+domaine).removeClass("none");
            }
        </script>
    </body>
</html>


C'est une solution "rustique" à la portée de tout débutant en php et jQuery.
Je ne préconise pas de faire cela avec des gros volumes d'information mais 600 lignes c'est pas grand chose.

Bonne journée,
GJboba
Modifié par GJboba (25 Nov 2017 - 17:36)