IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Tableau croisé dynamique


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut Tableau croisé dynamique
    Bonjour,

    Je souhaite formater les données issues d'une requête PDO sous forme de tableau croisée dynamique comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    +-----------------+-----+-----+-----+-----+
    | Art title       | FR  | EN  | DE  | ES  | <- liens permettant de changer la vue "art title", par defaut liste les derniers article en français
    +-----------------+-----+-----+-----+-----+
    | bonjour-paris   | URL | URL | URL | URL | <- liens permettant d accéder à l édition/modification des traductions de l article
    | bonne-nuit      | URL | URL | URL | URL |
    +-----------------+-----+-----+-----+-----+
    La requête PDO se compose comme ceci:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT
    	SQL_CALC_FOUND_ROWS art.id AS art_id,
    	t.id,
    	t.title,
    	t.permalink,
    	l.code AS lang,
    	t.status AS status,
    	UNIX_TIMESTAMP(t.modified) AS modified
    FROM
    (
    	SELECT id
    	FROM articles
    	ORDER BY created DESC
    	LIMIT 10
    ) art
    	LEFT OUTER JOIN translations t ON art.id = t.art_id
    	LEFT OUTER JOIN languages l ON l.code = t.lang

    Les données récupérées sont stockées dans un tableau $results['articles'] dont voici un exemple de contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Array
    (
        [2] => Array
            (
                [0] => Array
                    (
                        [id] => 5
                        [title] => Bonjour de paris
                        [permalink] => bonjour-de-paris
                        [lang] => fr
                        [status] => closed
                        [modified] => 1354147689
                    )
     
                [1] => Array
                    (
                        [id] => 6
                        [title] => Hello from paris
                        [permalink] => hello-from-paris
                        [lang] => en
                        [status] => publish
                        [modified] => 1354147689
                    )
     
                [2] => Array
                    (
                        [id] => 7
                        [title] => Hola de paris
                        [permalink] => hola-de-paris
                        [lang] => es
                        [status] => closed
                        [modified] => 1354147689
                    )
     
                [3] => Array
                    (
                        [id] => 8
                        [title] => Hallo aus paris
                        [permalink] => Hallo-aus-paris
                        [lang] => de
                        [status] => publish
                        [modified] => 1354147689
                    )
     
            )
     
        [1] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [title] => Bienvenue chez moi
                        [permalink] => Bienvenue-chez-moi
                        [lang] => fr
                        [status] => closed
                        [modified] => 1354147689
                    )
     
                [1] => Array
                    (
                        [id] => 2
                        [title] => Welcome home
                        [permalink] => welcome-home
                        [lang] => en
                        [status] => publish
                        [modified] => 1354147689
                    )
     
                [2] => Array
                    (
                        [id] => 3
                        [title] => Bienvenida a casa
                        [permalink] => bienvenida-a-casa
                        [lang] => es
                        [status] => publish
                        [modified] => 1354147689
                    )
     
                [3] => Array
                    (
                        [id] => 4
                        [title] => Willkommen zu Hause
                        [permalink] => willkommen-zu-Hause
                        [lang] => de
                        [status] => closed
                        [modified] => 1354147689
                    )
     
            )
     
    )
    1
    Mon problème est que je ne sais pas comment générer le tableau en gérant le header et les lignes à la fois...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    $output = '';
    $output .= "<tr>\n";
    $output .= "<th>Article</th>\n";
    $output .= "<th>FR</th>";
    $output .= "<th>EN</th>";
    $output .= "<th>DE</th>";
    $output .= "<th>ES</th>";
    $output .= "</tr>";
     
    $lang = (isset($_GET['lang'])) ? $_GET['lang'] : 'fr';
     
    foreach ($results['articles'] as $gouparticle) 
    { 		
    	$output .= "<tr>";
    	foreach ($gouparticle as $article) 
    	{ 	
    		if($article['lang'] == $lang) 
    		{
    			$output .= "<td>{$article['title']}</td>";	
    			$output .= "<td>{$article['lang']}</td>";
    		}
     
    		if($article['lang'] != $lang){ $output .= "<td>{$article['lang']}</td>"; }
    	}	
    	$output .= "</tr>";
    }
    echo $output;
    Merci pour votre aide.

    Cordialement
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Points : 392
    Points
    392
    Par défaut
    Les headers des tableaux
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <TR>
      <TH> ... </TH>
      <TH> ... </TH>
      <TH> ... </TH>
      <TH> ... </TH>
    </TR>
    sortent en premier, donc sans doute avant tes boucles.
    ligne 11 sans doute

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La tableau que tu fais avec ton code actuel ne te convient pas en quoi ?
    Il faut juste que tu ajoutes tes liens.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    @tatareau

    @sabotage : les colonnes de header ne correspond pas aux lignes... Il est aussi possible que certains articles demander dans une langue "vue : Art title" ne soit pas encore traduit, donc non existant, une cellule vide doit donc remplacer le lien de la traduction.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    +-----------------+-----+-----+-----+-----+
    | Art title       | FR  | EN  | DE  | ES  |
    +-----------------+-----+-----+-----+-----+
    | bonjour-paris   | FR  | EN  | ES  | DE  | <- liens ne correspondants pas avec les colonnes...
    | bonne-nuit      | FR  | EN  | ES  | DE  |
    +-----------------+-----+-----+-----+-----+
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

Discussions similaires

  1. filtrer tableau croisé dynamique sous excel
    Par kernel57 dans le forum Excel
    Réponses: 7
    Dernier message: 17/11/2006, 14h18
  2. Tableau croisé dynamique
    Par papy_tergnier dans le forum Access
    Réponses: 5
    Dernier message: 26/12/2005, 18h05
  3. Tableau croisé dynamiqué élaboré sous Access
    Par Mahefasoa dans le forum Access
    Réponses: 1
    Dernier message: 20/11/2005, 08h04
  4. tableau Croisé Dynamique
    Par Bjuice2 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/11/2005, 10h36
  5. tableau croisé dynamique sous delphi, comment ?
    Par Brice Yao dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/07/2005, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo