1

Bonjour,

Désolée, je n'ai pas trouver les balises pour le code...

Je viens vous demander de l'aide car ça fait un moment que je cherche mais je n'y arrive pas.

Je développe sous symfony.
Je crée des graphes à partir des données de la bdd.

Il faut que j'arrive à les enregistrer en pdf.

Alors voilà mon pb, j'arrive à les afficher sur ma âge html, mais je n'arrive pas à faire un pdf à partir de ce que j'ai.
Ton outil html2pdf à l'air très bien pour ce que je veux

Le problème c'est que je construit mes graphes avec des variables.

Et quand j'enregistre mon pdf, il me dit qu'il ne connait pas ses variables.

Voilà mon code :

Je calcule mes variables à partir de requêtes et affiche le partial correspondant
Code :
if($this->getRequestParameter('btn_OK_med_rand')){	
				
	$this->date = $this->getRequestParameter('date_med_rand');
	$this->poste = $this->getRequestParameter('rad_med_rand');
			
	if($this->date!='' && $this->poste!=''){
		$this->medaille = Doctrine::getTable('TSoudure')->getRandMed($this->date, $this->poste);
		$this->nb_soud = Doctrine::getTable('TSoudure')->getNbSoudMedaille_Finition($this->medaille);
 
		$this->partial = 'partial_graph';
				
}


Dans mon partial :
J'affiche mes graphes (ça marche très bien c'est bon)
Code :
<?php 
	echo "Nombre de soudures <b>: ".$nb_soud."</b><br><br>";
	for($i=1; $i<=$nb_soud; $i++){ 
		
			$NumOrdre = $i;
			echo "<b>Soudure ".$i."</b>";
			$soudure = p_courbe_finition_makegraph($medaille, $NumOrdre);
			p_courbe_finition_sidebar($soudure, $medaille, $NumOrdre);
			echo "<br><br>";
		 
		} 
?>
<form method="post">
	<input type="submit" value="PDF" name="btn_PDF"/>
</form>


Et l'action sur mon bouton PDF:
Code :
if($this->getRequestParameter('btn_PDF')){
	ob_start();
 	include('../apps/frontend/modules/form_speciaux/templates/_graph.php');
	$content = ob_get_clean();
	
	// conversion HTML => PDF
	require_once('include/html2pdf/html2pdf.class.php');
	try
	{
		$html2pdf = new HTML2PDF('P','A4','fr', false, 'ISO-8859-15');
		//		$html2pdf->setModeDebug();
		$html2pdf->setDefaultFont('Arial');
		$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
		$html2pdf->Output('graph_DPX.pdf');
	}
	catch(HTML2PDF_exception $e) { echo $e; }
}


Mon PDF se crée mais le problème c'est que j'ai Undefined variable nb_soud in .../_graph.php line 2

Quand je met les valeurs à $nb_soud et $medaille, il me crée mon fichier pdf comme je veux, avec mes graphes...

J'ai essayer de mettre le code de mon bouton directement avec l'affichage de mes graphes. Mais dans ce cas j'ai une page blanche.
Je bloque complètement.

Quand je fais ça :
Code :
if($this->getRequestParameter('btn_OK_med_rand')){	
				
	$this->date = $this->getRequestParameter('date_med_rand');
	$this->poste = $this->getRequestParameter('rad_med_rand');
			
	if($this->date!='' && $this->poste!=''){
		$this->medaille = Doctrine::getTable('TSoudure')->getRandMed($this->date, $this->poste);
		$this->nb_soud = Doctrine::getTable('TSoudure')->getNbSoudMedaille_Finition($this->medaille);
 
		$this->partial = 'partial_graph';
				
 
	}
	ob_start();
 	include('../apps/frontend/modules/form_speciaux/templates/_graph.php');
	$content = ob_get_clean();
	
	// conversion HTML => PDF
	require_once('include/html2pdf/html2pdf.class.php');
	try
	{
		$html2pdf = new HTML2PDF('P','A4','fr', false, 'ISO-8859-15');
		//		$html2pdf->setModeDebug();
		$html2pdf->setDefaultFont('Arial');
		$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
		$html2pdf->Output('graph_DPX.pdf');
	}
	catch(HTML2PDF_exception $e) { echo $e; }
				
}


Il me propose d'enregistrer le fichier avant d'avoir ouvert la page avec les graphes, et il me dit forcément pareil : Undefined variable nb_soud ..

Qqun peut m'aider?

Merci d'avance

2

normal... tu charges toi meme le fichier de la vue partiel "graph" de ton module "form_speciaux". Ce n'est pas fait pour cela. Il faut que tu utilises les fonctions de symfony, car sinon il ne passera pas tes variables (ici date, poste, nb_soud et autres) à la vue...

include_partial('form_speciaux/graph', array('date' => $this->date, 'poste' => $this->poste, 'medaille' => $this->medaille, .....));

en symfony, il ne faut JAMAIS utiliser les include et require de PHP...
Ancien pseudo : lolo

3

Merci de ta réponse.

Dans mon indexSuccess, je passe déjà les paramètres souhaités à mon partial

include_partial('form_speciaux/graph', array('medaille'=>$medaille, 'nb_soud'=>$nb_soud));

Il m'affiche bien mes graphes, le problème est seulement quand j'enregistre en pdf.

Le problème c'est qu'il va chercher include('../apps/frontend/modules/form_speciaux/templates/_graph.php');

Et là dedans mes variables ne sont pas définis.

Je peux mettre directement le code dans mon partial graph ? Comme ça ?

<?php 
	echo "Nombre de soudures <b>: ".$nb_soud."</b><br><br>";
	for($i=1; $i<=$nb_soud; $i++){ 
		
			$NumOrdre = $i;
			echo "<b>Soudure ".$i."</b>";
			$soudure = p_courbe_finition_makegraph($medaille, $NumOrdre);
			p_courbe_finition_sidebar($soudure, $medaille, $NumOrdre);
			echo "<br><br>";
		 
	}
	
	ob_start();
 	include('../apps/frontend/modules/form_speciaux/templates/_graph.php');
	$content = ob_get_clean();

	// conversion HTML => PDF
	require_once('include/html2pdf/html2pdf.class.php');
	try
	{
		$html2pdf = new HTML2PDF('P','A4','fr', false, 'ISO-8859-15');
		//		$html2pdf->setModeDebug();
		$html2pdf->setDefaultFont('Arial');
		$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
		$html2pdf->Output('graph_DPX.pdf');
	}
	catch(HTML2PDF_exception $e) { echo $e; }
?>



J'ai essayer
<?php 
	ob_start();
	echo "Nombre de soudures <b>: ".$nb_soud."</b><br><br>";
	for($i=1; $i<=$nb_soud; $i++){ 
		
			$NumOrdre = $i;
			echo "<b>Soudure ".$i."</b>";
			$soudure = p_courbe_finition_makegraph($medaille, $NumOrdre);
			p_courbe_finition_sidebar($soudure, $medaille, $NumOrdre);
			echo "<br><br>";
		 
	}

	$content = ob_get_clean();

	// conversion HTML => PDF
	require_once('include/html2pdf/html2pdf.class.php');
	try
	{
		$html2pdf = new HTML2PDF('P','A4','fr', false, 'ISO-8859-15');
		//		$html2pdf->setModeDebug();
		$html2pdf->setDefaultFont('Arial');
		$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
		$html2pdf->Output('graph_DPX.pdf');
	}
	catch(HTML2PDF_exception $e) { echo $e; }
?>


Mais il m'affiche des caractères illisibles et ne me propose pas d'enregistrer mon pd;

Désolée, je ne suis pas une pro en php

4

pour info, pour mettre du code, c'est la balise [ pre ] ... [ /pre ]



après, dans tout ce que tu dis, je ne comprends pas ce qui est dans la classe action, et ce qui est dans les vues... est-ce que tu pourrais être plus explicite ? en précisant à chaque fois dans quel fichier on se trouve, et également en mettant les méthodes complètes
Ancien pseudo : lolo

5

J'explique tout.

Tout d'abord j'ai un formulaire dans un partial _form :
<div class="formul">
	<form method="post">	
		<table>
			<tr>
				<td>Date <input type="text" name="date_med_rand" class="dateRdv" value="<?php echo date('Y').'-'.date('m').'-'.date('d'); ?>"/></td>
				<td rowspan="3">
					<input type="radio" name="rad_med_rand" value="Matin"> Matin<br/>
					<input type="radio" name="rad_med_rand" value="Journee"> Journée <br/>
					<input type="radio" name="rad_med_rand" value="Nuit"> Nuit<br/>
				</td>
			</tr>								
			<tr>
				<td><small>Le format doit être AAAA-MM-JJ</small></td>
				<td></td>
			</tr>
		</table>

		<input type="submit" name="btn_OK_med_rand" value="IMPRESSION"/>
	</form>
</div>


J'ai dans mon action, l'action de mon bouton :

		/*
		*	Bouton "IMPRESSION" du formulaire 'DPX: impression journalière de médaille'
		*/
		if($this->getRequestParameter('btn_OK_med_rand')){	
				
			$this->date = $this->getRequestParameter('date_med_rand');
			$this->poste = $this->getRequestParameter('rad_med_rand');
			
			if($this->date!='' && $this->poste!=''){
				$this->medaille = Doctrine::getTable('TSoudure')->getRandMed($this->date, $this->poste);
				$this->nb_soud = Doctrine::getTable('TSoudure')->getNbSoudMedaille_Finition($this->medaille);

				$this->partial = 'partial_graph';
				

			}
			
		}


Qui envoie donc dans le partial graph grâce au code suivant qui est dans mon indexSuccess :
else if( $partial == 'partial_graph' ) {
	include_partial('form_speciaux/graph', array('medaille'=>$medaille,
										'nb_soud'=>$nb_soud));
						
}


Et voilà le code de mon partial graph :
<?php 
	echo "Nombre de soudures <b>: ".$nb_soud."</b><br><br>";
	for($i=1; $i<=$nb_soud; $i++){ 
		
			$NumOrdre = $i;
			echo "<b>Soudure ".$i."</b>";
			$soudure = p_courbe_finition_makegraph($medaille, $NumOrdre);
			p_courbe_finition_sidebar($soudure, $medaille, $NumOrdre);
			echo "<br><br>";
		 
	}

?>

<<form method="post">
	<input type="submit" value="PDF" name="btn_PDF"/>
</form>


Ce que je veux, c'est que quand j'appuies sur le bouton PDF, je veux enregistrer les graph qui sont sur ma page.
J'ai fait l'action de mon bouton dans mon action :

		/*
		*	Bouton "PDF" pour l'impression journalière pour les DPX
		*/
		if($this->getRequestParameter('btn_PDF')){
		
			 	ob_start();
			 	
 				include('../apps/frontend/modules/form_speciaux/templates/_graph.php');
				$content = ob_get_clean();
	
				// conversion HTML => PDF
				require_once('include/html2pdf/html2pdf.class.php');
				try
				{
					$html2pdf = new HTML2PDF('P','A4','fr', false, 'ISO-8859-15');
					//		$html2pdf->setModeDebug();
					$html2pdf->setDefaultFont('Arial');
					$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
					$html2pdf->Output('graph_DPX.pdf');
				}
				catch(HTML2PDF_exception $e) { echo $e; }
		}


Cest là le problème, je me demandais, est ce qu'il est possible de mettre le code du bouton PDF directement dans mon partial graph? Mais que dois-je mettre après ob_start() ?

J'espère avoir été plus claire.
Merci de ton aide

6

ok, donc c'est bien ce que j'avais compris, et comme j'ai répondu en ./2, il ne faut pas utiliser d'includes dans symfony, jamais... il faut que tu charge ta vue partiel comme je l'ai marqué
Ancien pseudo : lolo

7

lates/_graph.php'); Ok donc je remplace include('../apps/frontend/modules/form_speciaux/temp

Par

include_partial('form_speciaux/graph', array('date' => $this->date, 'poste' => $this->poste, 'medaille' => $this->medaille, .....));
?

En effet, je comprends mieux comme ça.

Dernière question :

J'ai un echo dans un des fichiers qui sont appelés par mon partial graph pour afficher mes graphiques.

Ca peut être ça qui me provoque l'erreur ( je ne l'ai plus exactement sous les yeux mais c'est Can't be send... il y a déjà qq chose dans mon navigateur)

Merci beaucoup

8

normalement non ce n'est pas ca.

l'erreur doit te dire dans quel fichier et à quelle ligne il y a eu une sortie vers le navigateur. regarde bien l'erreur
Ancien pseudo : lolo

9

J'ai retesté ce matin et il ne m'affiche pas d'où vient mon erreur.

Il m'affiche des images que j'ai normalement dans mon header en énorme.
Et une phrase en bas : TCPDF ERROR: Some data has already been output, can't send PDF file

Et je n'ai plus la barre de développement de symfony normalement en haut à droite. Donc je ne sais pas comment savoir d'où ça vient

10

heu, t'as pensé à indiquer que tu ne voulais pas du layout ?
Ancien pseudo : lolo

11

Ah non. Je dois configurer ça dans le view.yml ?

Mais en fait, dans mon layout, j'ai seulement le <head>
Tout mon body est dans mon template de mon module, ici form_speciaux par exemple. Car je devais utiliser de body de type différents suivant les modules.
Ca risque de faire cette erreur également ?

Et pour la syntaxe du view.yml, c'est qq chose comme ça ?
form_speciaux:
  _graph:
    has_layout:	false


Merci beaucoup à toi pour ton aide

12

symff (./11) :
Tout mon body est dans mon template de mon module, ici form_speciaux par exemple. Car je devais utiliser de body de type différents suivant les modules. Ca risque de faire cette erreur également ?

oui. de plus, ce n'est pas la bonne méthode... il fallait créer différents layouts, et indiquer via le view.yml lequel utilisé... car là ce n'est pas vraiment propre ! ou encore il faut utiliser des slots.
symff (./11) :
Et pour la syntaxe du view.yml, c'est qq chose comme ça ?

non, car _graph est une partial, et non une vrai view... tu dois indiquer directement dans l'action que tu ne veux pas de layout : $this->setLayout(false);

tu utilises quelle version de symfony ? si c'est la 1.4, je te conseille fortement de faire complètement le tutorial JobEet : http://www.symfony-project.org/jobeet/1_4/Doctrine/en/ car j'ai l'impression que tu as quelques lacunes
Ancien pseudo : lolo

13

Merci beaucoup ! Oui j'ai des lacunes c'est vrai.
Je connaissais pas symfony et j'ai du m'y mettre très vite car je fais un stage qui n'est pas très long.

Merci à toi. Je vais regarder tout ça