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 :

Code HTML dans une Class PHP (Pagination)


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut Code HTML dans une Class PHP (Pagination)
    Bonsoir,

    voila, j'ai besoin de faire une pagination sur quelques pages de mon site, j'ai téléchargé une class sur un site pour ne pas réinventer la roue.. le code fonctionne et tout mais une class c'est bien fait pour être réutilisable et appelée sur différente pages du site au besoin n'est-ce pas ? pourquoi donc, je vois des portions de code html dans la class

    la class :

    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
    93
    94
    95
    96
    97
    <?php
     
    class paginate
    {
        private $db;
     
        function __construct($DB_con)
        {
            $this->db = $DB_con;
        }
     
        public function dataview($query)
        {
            $stmt = $this->db->prepare($query);
            $stmt->execute();
     
            if($stmt->rowCount()>0)
            {
                while($row=$stmt->fetch(PDO::FETCH_ASSOC))
                {
                    ?>
                    <tr>
                        <td><?php echo $row['tuts_id']; ?></td>
                        <td><?php echo $row['tuts_title']; ?></td>
                        <td><a href="<?php echo $row['tuts_link']; ?>">visit</a></td>
                    </tr>
                    <?php
                }
            }
            else
            {
                ?>
                <tr>
                    <td>Nothing here...</td>
                </tr>
                <?php
            }
     
        }
     
        public function paging($query,$records_per_page)
        {
            $starting_position=0;
            if(isset($_GET["page_no"]))
            {
                $starting_position=($_GET["page_no"]-1)*$records_per_page;
            }
            $query2=$query." limit $starting_position,$records_per_page";
            return $query2;
        }
     
        public function paginglink($query,$records_per_page)
        {
     
            $self = $_SERVER['PHP_SELF'];
     
            $stmt = $this->db->prepare($query);
            $stmt->execute();
     
            $total_no_of_records = $stmt->rowCount();
     
            if($total_no_of_records > 0)
            {
                ?><tr><td colspan="3"><?php
                    $total_no_of_pages=ceil($total_no_of_records/$records_per_page);
                    $current_page=1;
                    if(isset($_GET["page_no"]))
                    {
                        $current_page=$_GET["page_no"];
                    }
                    if($current_page!=1)
                    {
                        $previous =$current_page-1;
                        echo "<a href='".$self."?page_no=1'>First</a>&nbsp;&nbsp;";
                        echo "<a href='".$self."?page_no=".$previous."'>Previous</a>&nbsp;&nbsp;";
                    }
                    for($i=1;$i<=$total_no_of_pages;$i++)
                    {
                        if($i==$current_page)
                        {
                            echo "<strong><a href='".$self."?page_no=".$i."' style='color:red;text-decoration:none'>".$i."</a></strong>&nbsp;&nbsp;";
                        }
                        else
                        {
                            echo "<a href='".$self."?page_no=".$i."'>".$i."</a>&nbsp;&nbsp;";
                        }
                    }
                    if($current_page!=$total_no_of_pages)
                    {
                        $next=$current_page+1;
                        echo "<a href='".$self."?page_no=".$next."'>Next</a>&nbsp;&nbsp;";
                        echo "<a href='".$self."?page_no=".$total_no_of_pages."'>Last</a>&nbsp;&nbsp;";
                    }
                    ?></td></tr><?php
            }
        }
    }

    index.php

    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
    <?php
    include_once("dbconfig.php"); // connexion à la bdd
     
    include_once 'class.paging.php';
    $paginate = new paginate($DB_con);
    ?>
     
    <table align="center" border="1" width="100%" height="100%" id="data">
        <?php
        $query = "SELECT * FROM tbl_tutorials";
        $records_per_page=3;
        $newquery = $paginate->paging($query,$records_per_page);
        $paginate->dataview($newquery);
        $paginate->paginglink($query,$records_per_page);
        ?>
    </table>
    il y a quasi aucun code html dans index.php ! mon problème c'est que je souhaite gérer l'affichage du contenu dans index.php et non directement dans la class car sinon la class n'est pas réutilisable sur une autre page de mon site qui nécessitera surement un autre affichage ..
    bien-sur pour l'affichage des numéros de pages, cela ne me pose aucun problème qu'il reste dans la class c'est logique..

    J'ai regardé attentivement la class pour mettre toute la partie affichage des données dans index.php mais j'ai du mal.. je ne sais même pas si c'est bien possible et logique mon raisonnement..

    alors, oui je sais qu'il est préférable de poser la question à l'auteur, mais je ne parle pas très bien anglais et j'ai mes habitudes sur dvp

    je ne sais pas si je suis bien précis dans mes explications.. merci à vous pour votre aide en tout cas.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est ce qui arrive quand on copie-colle des codes sans les comprendre...

    Solution 1 : comprendre le code.
    Ce qui permet d'etre en mesure de le modifier.

    Solution 2 : changer de code.

    Solution 3 : écrire son propre code.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour t'aider un peu à appliquer la solution 1 de notre ami tacheté : Rien n'empêche de mettre du code HTML dans une classe générique, à condition que le code en question soit générique et/ou configurable.

    Par exemple, le bloc qui construit le menu de pagination (les liens suivant / précédent...) est le même partout, à condition de pouvoir modifier l'url de destination. Il n'y a donc absolument aucun intérêt à construire ce bloc-là à la main dans chaque page nécessitant de la pagination. D'où la fonction paginglink de ta classe qui écrit du HTML.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon.

    C'est sûr que c'est mieux de comprendre un peu l'anglais : dataview, paginglink...
    Les noms des fonctions sont explicites... (même pour quelqu'un qui, comme moi, ne maitrise pas la POO)

  5. #5
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    jreaux62 : Je ne parle pas bien anglais mais je comprends quand même les noms des functions je te rassure

    Celira : exact ! j'ai laissé le code html de la partie paginglink (car générique..) et j'ai supprimé toute la partie dataview de la class pour la mettre dans la page index.php je vous laisse juger et valider mon code et me donner si nécessaire la marche à suivre pour l’améliorer :


    la class :

    Code php : 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
    <?php
     
    class paginate
    {
        private $db;
     
        function __construct($pdo)
        {
            $this->db = $pdo;
        }
     
        public function paging($query,$records_per_page)
        {
            $starting_position=0;
            if (isset($_GET["page_no"]))
            {
                $starting_position=($_GET["page_no"]-1)*$records_per_page;
            }
            $query2=$query." limit $starting_position,$records_per_page";
            return $query2;
        }
     
        public function paginglink($query,$records_per_page)
        {
            $self = $_SERVER['PHP_SELF'];
     
            $stmt = $this->db->prepare($query);
            $stmt->execute();
     
            $total_no_of_records = $stmt->rowCount();
     
            if ($total_no_of_records > 0)
            {
                echo "<tr><td colspan=\"3\">";
                $total_no_of_pages=ceil($total_no_of_records/$records_per_page);
                $current_page=1;
                if (isset($_GET["page_no"]))
                {
                    $current_page=$_GET["page_no"];
                }
                if ($current_page!=1)
                {
                    $previous =$current_page-1;
                    echo "<a href='".$self."?page_no=1'>First</a>&nbsp;&nbsp;";
                    echo "<a href='".$self."?page_no=".$previous."'>Previous</a>&nbsp;&nbsp;";
                }
                for ($i=1;$i<=$total_no_of_pages;$i++)
                {
                    if ($i==$current_page)
                    {
                        echo "<strong><a href='".$self."?page_no=".$i."' style='color:red;text-decoration:none'>".$i."</a></strong>&nbsp;&nbsp;";
                    }
                    else
                    {
                        echo "<a href='".$self."?page_no=".$i."'>".$i."</a>&nbsp;&nbsp;";
                    }
                }
                if ($current_page!=$total_no_of_pages)
                {
                    $next=$current_page+1;
                    echo "<a href='".$self."?page_no=".$next."'>Next</a>&nbsp;&nbsp;";
                    echo "<a href='".$self."?page_no=".$total_no_of_pages."'>Last</a>&nbsp;&nbsp;";
                }
                echo "</td></tr>";
            }
        }
    }


    index.php :

    Code php : 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
    <?php
    include_once("dbconfig.php");
     
    include_once 'class.paging.php';
    $paginate = new paginate($pdo);
    ?>
     
    <table align="center" id="data">
        <?php
        $query = "SELECT * FROM tbl_tutorials";
        $records_per_page=4;
        $newquery = $paginate->paging($query,$records_per_page);
     
        $stmt = $pdo->prepare($newquery);
        $stmt->execute();
     
        if($stmt->rowCount()>0)
        {
            while($row = $stmt->fetch())
            {
                ?>
                <tr>
                    <td><?php echo $row->tuts_id; ?></td>
                    <td><?php echo $row->tuts_title; ?></td>
                    <td><a href="<?php echo $row->tuts_link; ?>">visit</a></td>
                </tr>
                <?php
            }
        }
        else
        {
            ?>
            <tr>
                <td>Nothing here...</td>
            </tr>
            <?php
        }
     
        $paginate->paginglink($query,$records_per_page);
        ?>
    </table>


    alors ??

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    La séparation a l'air ok.
    Le plus simple pour le vérifier, c'est d'essayer de faire un tableau paginé : si tu as besoin de bidouiller la classe, c'est que ce n'est pas assez générique, et si tu copies-colles des morceaux importants de code à l'extérieur de la classe, c'est qu'il ya des choses qui pourraient être mises dedans

    Un détail : personnellement, je ne mettrais pas la pagination à l'intérieur du tableau, mais en dessous du tableau.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    oui, pour le tableau je suis d'accord, c'est la mise en page de base sur le site ou j'ai téléchargé la class donc je n'ai pas encore touché.

    bon je pense que mon problème est résolu ! grâce à vous merci encore. au passage : très bel avatar célira

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. HTML dans une variable PHP
    Par tynmar dans le forum Langage
    Réponses: 4
    Dernier message: 19/03/2007, 15h32
  2. [MySQL] Stocker du code html dans une base
    Par g-ryckelynck dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/02/2007, 13h20
  3. [MySQL] Insertion de code HTML dans une table, avec UPDATE
    Par Daedalus31 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/02/2007, 12h19
  4. comment passer du code html dans une requette sql?
    Par vinceH31 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/11/2006, 18h10
  5. insertion code html dans une animation flash
    Par 3adoula dans le forum Flash
    Réponses: 2
    Dernier message: 29/08/2006, 10h12

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