Submitted by Thewiu on
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 :
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 |
---|---|
module | 3.77 Ko |
J'ai essayer avec le code
Permalien Soumis par Thewiu le 13 Février, 2015 - 14:31
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';
}
}
}
Bonjour/Bonsoir,
Permalien Soumis par Thewiu le 17 Février, 2015 - 09:16
Bonjour/Bonsoir,
J'ai trouver un compromis avec des ligne caché et une fonction de modification de style.
Cordialement Pigneret William.