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 :

Appel d'une fonction dans une class


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Points : 125
    Points
    125
    Par défaut Appel d'une fonction dans une class
    Désirant insérer du code html parser en pdf dans une cellule j'ai copié ce parseur rudimentaire dont la principale fonction est ci-dessous dans la class PDF du fichier PhpToPDF.php (classe facilitant la creation de tableaus en pdf)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function WriteHTML($html)
    {
        //Parseur HTML
        $html=str_replace("\n",' ',$html);
        ...........................................
        }
    }
    Le pdf est bien généré, et le code html bien dépouillé de ses balises.
    Je me heurte à un problème de positionnement de mon texte parser , un truc de débutant.

    Dans classe pdftophp, le texte affiché dans la cellule est contenu dans la variable $data[$i]['TEXT']

    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
    //Save the current position
    			$x=$this->GetX();
    			$y=$this->GetY();
     
    //print the text
    	$this->MultiCellTable(
    			$data[$i]['CELL_WIDTH'],
    			$data[$i]['LN_SIZE'],
    			$data[$i]['TEXT'], //ICI
    			$data[$i]['BRD_TYPE'],
    			$data[$i]['T_ALIGN'],
    			$data[$i]['V_ALIGN'],
    			1,
    			$h - $data[$i]['LN_SIZE'] * $data[$i]['CELL_LINES']
    			);
    Il me reste donc à appliquer ma fonction de parser WriteHTML
    Quelque chose comme ...
    $data[$i]['TEXT']=$this->WriteHTML($data[$i]['TEXT']);
    Comment écrire cela correctement dans le $this->MultiCellTable ci dessus


    Merci à tous

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Il manque un return a ta fonction non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function WriteHTML($html){
        //Parseur HTML
        $html=str_replace("\n",' ',$html);
        ...........................................
        return $html;
    }
    puis ensuite il suffirait d'appeler la fonction en tant que paramète de MultiCellTable

    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
    //Save the current position
    			$x=$this->GetX();
    			$y=$this->GetY();
    
    //print the text
    	$this->MultiCellTable(
    			$data[$i]['CELL_WIDTH'],
    			$data[$i]['LN_SIZE'],
    			$this->WriteHTML($data[$i]['TEXT']),
    			$data[$i]['BRD_TYPE'],
    			$data[$i]['T_ALIGN'],
    			$data[$i]['V_ALIGN'],
    			1,
    			$h - $data[$i]['LN_SIZE'] * $data[$i]['CELL_LINES']
    			);
    Aussi \n correspond à un <br/>, un saut de ligne, et non un espace donc je ne vois pas trop a quoi sert la fonction writeHTML

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Points : 125
    Points
    125
    Par défaut
    La fonction complete
    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
    function WriteHTML($html)
    {
        //Parseur HTML
        $html=str_replace("\n",' ',$html);
        $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
        foreach($a as $i=>$e)
        {
            if($i%2==0)
            {
                //Texte
                if($this->HREF)
                    $this->PutLink($this->HREF,$e);
                else
                    $this->Write(5,$e);
            }
            else
            {
                //Balise
                if($e{0}=='/')
                    $this->CloseTag(strtoupper(substr($e,1)));
                else
                {
                    //Extraction des attributs
                    $a2=explode(' ',$e);
                    $tag=strtoupper(array_shift($a2));
                    $attr=array();
                    foreach($a2 as $v)
                    {
                        if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
                            $attr[strtoupper($a3[1])]=$a3[2];
                    }
                    $this->OpenTag($tag,$attr);
                }
            }
        }
    	 return $html;
    }
    Cela étant, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    			$this->MultiCellTable(
    					$data[$i]['CELL_WIDTH'],
    					$data[$i]['LN_SIZE'],
    					$this->WriteHTML($data[$i]['TEXT']),
    					$data[$i]['BRD_TYPE'],
    					$data[$i]['T_ALIGN'],
    					$data[$i]['V_ALIGN'],
    					1,
    					$h - $data[$i]['LN_SIZE'] * $data[$i]['CELL_LINES']
    					);
    J'ai à l'affichage de mon pdf deux fois le texte !

    Une première fois bien positionné dans la cellule (multicell parfaitement appliqué) mais non formaté par le WriteHTML

    Une seconde fois parfaitement formaté par le WriteHTML mais positioné en dehors de la cellule.

    Pourquoi 2 fois le texte ???

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Je ne connais pas FPDF mais je crois que tu ne devrais pas, dans la fonction writeHTML, écrire sur le PDF ($this->write et PutLink pas exemple) mais simplement retourner la chaine à écrire dans la cellule.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Points : 125
    Points
    125
    Par défaut
    C'est surtout que je ne sais pas bien manipuler les classes !
    Pour bien comprendre la structure, je résume )

    Dans le fichier principal, j'ai l'appel de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $contenuTableau = array($c1l2,$c2l2,$c3l2);
    $PDF->drawTableau($PDF, $proprietesTableau, $proprieteHeader, $contenuHeader, $proprieteContenu, $contenuTableau);
    Dans le fichier phptopdf contenant ma classe, j'ai comme structure
    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
     
    class phpToPDF extends FPDF {      
     
            function WriteHTML($html){
                ....
            }
     
            function Draw_Data($data, $header = true){
     
                 $this->MultiCellTable(
    			$data[$i]['CELL_WIDTH'],
    			$data[$i]['LN_SIZE'],
    			$this->WriteHTML($data[$i]['TEXT']), ....)
             }
     
             function drawTableau(&$pdf, $tableType, ..., $datas){
             ..................
             $pdf->Draw_Data($data);
             }
    }
    Qu'en penses tu ?

    Pourquoi ai-je deux intansciation ? c'est comme cela que l'on dit ?

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Non non tu n'as qu'une seule instanciation.

    L'instanciation est le fait de créer une entité d'une classe, un objet.

    À mon avis le problème vient du fait que writeHTML ne fait pas que retourner la chaine à écrire mais l'écris également, donc, ca l'écris deux fois.

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. Appel d'une fonction dans une fonction (sql server 2005)
    Par catchouse dans le forum Développement
    Réponses: 10
    Dernier message: 06/05/2009, 12h03
  4. Response.Redirect dans une fonction dans une classe
    Par jpower dans le forum ASP.NET
    Réponses: 14
    Dernier message: 24/08/2007, 09h45
  5. Appeler une fonction dans une fonction
    Par bryanstaubin dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/06/2007, 09h39

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