[Résolu] Un module de Tableau de tableau

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour/Bonsoir,

Actuellement je m'attaque à la création d'un module permettant la création d'un tableau dynamique, qui ( j'aimerai ) puisse ouvrir des tableau lorsqu'on click sur une ligne de ce même tableau.

Voici le rendu de mon tableau de bas :
tableauEx

J'ai essayer de faire la manip avec du javascript ( domaine dans lequel je ne suis pas très bon ) et je bloque.
Je passe donc d'un module, pour effectuer les requêtes et récupérer les données à mettre dans les tableaux.
Puis je fait la mise en forme et les fonctions javascript dans un template au quel j'ai donner les valeurs récupérer via les requêtes précédente.

J'aimerai donc savoir, si c'est possible, si je fait fausse route ou autre.

Voici le code de mon module ( j'ai join les fichiers au cas ou ) :

<php
function application_ags_rederable_page()
{
// nb_ligne du tableau ( donc de site )
    $query_nb_ligne = db_query('
      select count(*)+1 as nb from ags_site');
  $res_nb_ligne = $query_nb_ligne;

  while($record = $res_nb_ligne -> fetchAssoc() )
{
      $nb_ligne['nb'] = $record['nb'];
   }

// Select les sites et leurs infos
$query_les_sites = db_query('
     select site.idSite, site.adresse, site.public, ( site.dateOuverture + interval site.dureeContrat year ) as finContrat, Datediff((site.dateOuverture + interval site.dureeContrat year), DATE(NOW())) as tempsRestant, site.typeHebergement, typeSite.libelleTypeSite, concat(tech.nom, tech.version) as techno , statut.libelleStatut
      from {ags_site} site, {ags_typeSite} typeSite, {ags_technologie} tech, {ags_statut} statut
     where site.idTypeS = typeSite.idTypeS
      and site.idStatut = statut.idStatut
        and site.idTech = tech.idTech
      order by (finContrat)');

$res_les_sites = $query_les_sites;
$i = 1;

   while( $record = $res_les_sites -> fetchAssoc() )
   {
      $liste_site[$i]['idSite'] = $record['idSite'];
     $liste_site[$i]['adresse'] = $record['adresse'];
       $liste_site[$i]['finContrat'] = $record['finContrat'];
     $liste_site[$i]['tempsRestant'] = $record['tempsRestant'];
     $liste_site[$i]['typeHebergement'] = $record['typeHebergement'];
       $liste_site[$i]['typeSite'] = $record['libelleTypeSite'];
      $liste_site[$i]['techNom'] = $record['techno'];
        $liste_site[$i]['statut'] = $record['libelleStatut'];

     // change le typehebergement en 'UFC' ou 'Autres'.
     if( $record['typeHebergement'] == 1)
     {
          $liste_site[$i]['typeHebergement'] = 'ufc';
        }
      else
       {
          $liste_site[$i]['typeHebergement'] = 'autres';
     }
     
       // change le numérique en 'oui' ou 'non'.
      if( $record['public'] == 1 )
     {
          $liste_site[$i]['public'] = 'oui';
     }
      else
       {
          $liste_site[$i]['public'] = 'non';
     }

     // recupère les informations des responsables du site "$record['idSite']"
      $query_les_ResSite = db_query('
           select res.idR, res.nom, res.prenom, res.tel, res.mail, typeRes.libelleTypeR
           from ags_gerer gerer, ags_responsable res, ags_typeResponsable typeRes
         where gerer.idSite ='.$record['idSite'].'
          and gerer.idR = res.idR
            and res.idTypeR = typeRes.idTypeR');

     $res_les_resSite = $query_les_ResSite;
     $j=0;
     
       // rempli les informations du/des responsable du site "$record['idSite']"
      while( $rec = $res_les_resSite -> fetchAssoc() )
        {
          $res_site[$record['idSite']] [$j] ['idRes'] = $rec['idR'];
           $res_site[$record['idSite']] [$j] ['nomRes'] = $rec['nom'];
          $res_site[$record['idSite']] [$j] ['prenomRes'] = $rec['prenom'];
            $res_site[$record['idSite']] [$j] ['tel'] = $rec['tel'];
         $res_site[$record['idSite']] [$j] ['mail'] = $rec['mail'];
           $res_site[$record['idSite']] [$j] ['fonction'] = $rec['libelleTypeR'];
           $res_site[$record['idSite']] [$j] ['nb_Res'] = $j+1;

          $j++;
      }
      // incrementation
      $i++;
  }
  // intialisation des valeurs pour le template
  $output = array(
       '#theme' => 'application_ags_template',
     '#type' => 'markup',
        '#liste_site' => $liste_site,
     '#nb_ligne' => $nb_ligne,
     '#res_site' => $res_site,
);
return $output;
}

?>

Et voici celui de mon template :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <style type="text/css">
    table
    {
      border-collapse:collapse;
    }
    th
    {
      background-color:grey;
      color:white;
    }
    th,td
    {
      background-color : #DCDCDC;
    }
    tr
    {
      border-collapse:collapse;
    }
  </style>

  <table id="tableSite">  <!-- Tableau -->
    <tr>                    <!-- Ligne -->
      <th>id</th>             <!-- Colonne -->
      <th>adresse</th>
      <th>public</th>
      <th>fin de contrat</th>
      <th>temps Restant</th>
      <th>typeHebergement</th>
      <th>typeSite</th>
      <th>techNom</th>
      <th>statut</th>
    </tr>
    <?php
      $i
= 1;
      while(
$i<$nb_ligne['nb'])
      {
       
//id="<?php $liste_site[$i]['idSite']; onclick="tableRes(this.id)
   
?>

    <tr id="<?php $liste_site[$i]['idSite'];?>" onclick="tableRes(this.id)">
        <td> <?php print $liste_site[$i]['idSite']; ?>                  </td>
        <td> <?php print $liste_site[$i]['adresse']; ?>                 </td>
        <td> <?php print $liste_site[$i]['public']; ?>                  </td>
        <td> <?php print $liste_site[$i]['finContrat']; ?>              </td>
        <td> <?php print $liste_site[$i]['tempsRestant'] . " jours"; ?> </td>
        <td> <?php print $liste_site[$i]['typeHebergement']; ?>         </td>
        <td> <?php print $liste_site[$i]['typeSite']; ?>                </td>
        <td> <?php print $liste_site[$i]['techNom']; ?>                 </td>
        <td> <?php print $liste_site[$i]['statut']; ?>                  </td>
    </tr>
        <?php
          $i
++;
      }
       
?>

  </table>

<script type='text/javascript'>
// fonction d'affichage des Responsables par site lors du click
function tableRes(id)
{
    var idSite = id;
    document.getElementById(id).innerHTML = "
    <table>
      <?php
        $j
=0;
        while(
$j < $res_site["+id+"] [$j] ['nb_Res'] )
        {
     
?>

        <tr>
          <td> <?php print $res_site["+id+"] [$j] ['idRes']; ?>           </td>
          <td> <?php print $res_site["+id+"] [$j] ['nomRes']; ?>       </td>
          <td> <?php print $res_site["+id+"] [$j] ['prenomRes']; ?>  </td>
          <td> <?php print $res_site["+id+"] [$j] ['tel']; ?>               </td>
          <td> <?php print $res_site["+id+"] [$j] ['mail']; ?>             </td>
          <td> <?php print $res_site["+id+"] [$j] ['fonction']; ?>      </td>
        </tr>
      <?php
        $j
++;
        }
     
?>

    </table>
    "
}

Fichier attachéTaille
Icône texte brut module3.77 Ko
Version de Drupal : 

J'ai essayer avec le code suivant, j'y suis presque, mais je n'arrive pas à activer la fonction onclick.

Code here :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <style type="text/css">
    table
    {
      border-collapse:collapse;
    }
    th
    {
      background-color:grey;
      color:white;
    }
    th,td
    {
      background-color : #DCDCDC;
    }
    tr
    {
      border-collapse:collapse;
    }
    .hidden
    {
      display: none;
      background-color: #EFEFEF;
    }
  </style>

  <table id="tableSite">  <!-- Tableau -->
    <tr>                    <!-- Ligne -->
      <th>id</th>             <!-- Colonne -->
      <th>adresse</th>
      <th>public</th>
      <th>fin de contrat</th>
      <th>temps Restant</th>
      <th>typeHebergement</th>
      <th>typeSite</th>
      <th>techNom</th>
      <th>statut</th>
    </tr>
    <?php
      $i
= 1;
      while(
$i<$nb_ligne['nb'])
      {
   
?>

    <tr onclick="ouvrirLigne(this,<?php print $liste_site[$i]['idSite'];?>)">
        <td> <?php print $liste_site[$i]['idSite']; ?>                  </td>
        <td> <?php print $liste_site[$i]['adresse']; ?>                 </td>
        <td> <?php print $liste_site[$i]['public']; ?>                  </td>
        <td> <?php print $liste_site[$i]['finContrat']; ?>              </td>
        <td> <?php print $liste_site[$i]['tempsRestant'] . " jours"; ?> </td>
        <td> <?php print $liste_site[$i]['typeHebergement']; ?>         </td>
        <td> <?php print $liste_site[$i]['typeSite']; ?>                </td>
        <td> <?php print $liste_site[$i]['techNom']; ?>                 </td>
        <td> <?php print $liste_site[$i]['statut']; ?>                  </td>

    </tr>
    <tr class="hidden" id="<?php print $liste_site[$i]['idSite'];?>">
      <th>id</th>
      <th>Nom</th>
      <th>Prenom</th>
      <th>tel</th>
      <th>mail</th>
      <th>fonction</th>
    </tr>
        <?php
          $j
=0;
          while(
$j < $res_site[$i] ['nb_Res'] )
          {
       
?>

          <tr class="hidden" id="<?php $liste_site[$i]['idSite'];?>">
            <td> <?php print $res_site[$i] [$j] ['idRes']; ?>             </td>
            <td> <?php print $res_site[$i] [$j] ['nomRes']; ?>            </td>
            <td> <?php print $res_site[$i] [$j] ['prenomRes']; ?>      </td>
            <td> <?php print $res_site[$i] [$j] ['tel']; ?>               </td>
            <td> <?php print $res_site[$i] [$j] ['mail']; ?>             </td>
            <td> <?php print $res_site[$i] [$j] ['fonction']; ?> </td>
          </tr>
        <?php
          $j
++;
          }
       
?>

        <?php
          $i
++;
      }
       
?>

  </table>

<script type='text/javascript'>
function ouvrirLigne(tr,idSite)
{
  var i=0;
  var arrayVal = $([class="hidden"] [id=idSite]);
    for( i in arrayVal.length )
    {
      if( arrayVal[i].style.display == 'none' )
      {
        arrayVal[i].style.display = 'table-row';
      }
      else
      {
        arrayVal[i].style.display = 'none';
      }
    }
}