Posted by babacar on September 1, 2013 at 3:09pm
Bonjour,
Pour passer les variables à mon fichier .tpl
j'ai du faire cette function
function custom_print_circuit_preprocess_circuit_node_print(&$variables){
$node = $variables['node']
$variables['title'] = $node->title;
}j'obtiens cette erreur
Notice : Trying to get property of non-object dans custom_print_circuit_preprocess_circuit_node_print() (ligne 71 dans /var/www/hotel/sites/all/modules/custom_print_circuit/custom_print_circuit.module).
bien entendu un hook_menu et un hook_theme precede
function custom_print_circuit_theme($existing, $type, $theme, $path) {
return array(
'circuit_node_print' => array(
'variables' => array('node' => NULL),
'template' => 'circuit_node_print',
'path' => drupal_get_path('module', 'custom_print_circuit'),
),
);
}j'utilise le theme zen pour information supplémentaire
Un coup de main please

Comments
Regarde le message d'erreur
Salut
Regarde l'erreur:
ça veux dire que tu as tenté de traiter un certain variable comme objet quand, en fait, ce n'est pas un objet.
Tu auras le même erreur quand tu ferais quelque chose comme:
$foo = 'hello world';print $foo->title;
Donc la première étape: essaie de déterminer quelle ligne est à la base de cette erreur.
Deuxième étape: essayer de comprendre pourquoi.
J.
Salut voici ton code corrigé ;)
Salut Babacar, voiçi la version corrigée de ton code:
<?phpfunction custom_print_circuit_preprocess_circuit_node_print(&$variables){
$node = $variables['node']; //ajout d'un point-virgule :)
$variables['title'] = $node['title']; // voir le message de Joeri
}
?>
Merci. Fixed
Merci. Fixed
The more we know about Drupal,The better !!!!!
Partager?
Nice!
Peux-tu partager ta solution avec nous, histoire d'aider les autres qui ont le même problème et qui tombent sur cette discussion.
Merci!
J.
Sans doute je vais rédiger ça
Sans doute je vais rédiger ça au propre et le poster
The more we know about Drupal,The better !!!!!
Solution?
Salut Babacar
si t'as le temps, merci de partager ta solution avec nous.
La communauté t'a aidé à trouver la solution, donc en revanche ça serait génial si pourrais remercier la communauté en partageant.
Merci Babacar.
J.
Bonjour, Désolé pour ce
Bonjour,
Désolé pour ce retard(imprévus obligent).
j'ai du développer un petit module pour faire de l'impression bien vrai qu'il existe le module print.
Voici le scénario une agence de sites touristiques propose des programmes de vacances à ses clients.
Chaque programme est composé de plusieurs étapes et chaque étape contient un intitulé,une date,une description,une image principale du lieu, des images du lieu pour plus d'illustrations et le lieu dans lequel les visiteurs passerons la nuit.
L'idée était de présenter les programmes sous formes de devis , de les imprimer et /ou les envoyer aux visiteurs pour qu'ils aient un aperçu de leur circuit.
j'ai du créer un type de contenu circuit avec les champs suivants (Title, Etape) avec Etape un champ de type field_collection dont voici le contenu
Etape (Inititule,Date,Lieu,Image_principale,Images_lieu,Lieu_nuite)
j'ai utiliser le module http://www.drupal.org/project/ds pour gérer l'affichage histoire de mettre les images des lieu et le lieu_nuite à droite le reste à gauche
Passons au module:
Il convenait d'ajouter un tab item à coté de Voir|Editer d'un node en mode display ce qui nous emmènerait à avoir ceci Voir|Editer|Imprimer
On a du utiliser la librairie tcpdf
création du fichier .info
name = Custom print circuitdescription = Module for custom print circuit.
core = 7.x
version = 7.1.0
package = Custom Print Circuit
création du fichier .module
<?php
/<strong>
* Implements hook_menu().
*/
function custom_print_circuit_menu() {
$items = array();
$items['node/%node/impression'] = array(
'title' => 'Impression',
'page callback' => 'custom_print_circuit_impression',
'access callback' => 'custom_print_circuit_check',
'access arguments' => array(1),
'weight' => 2,
'type' => MENU_LOCAL_TASK,
);
return $items;
}
function custom_print_circuit_check($node){
if($node->type == "circuit"){
return TRUE;
}
return FALSE;
}
function custom_print_circuit_impression(){
module_load_include('inc', 'custom_print_circuit','custom_print_circuit');
$obj_pdf = new circuit('P', 'mm', 'A4', true, 'UTF-8', false);
$obj_pdf->SetCreator('Babacar');
$titre = "PDF Report";
$obj_pdf->SetTitle($titre);
$obj_pdf->setPrintHeader(true);
$obj_pdf->setPrintFooter(true);
$obj_pdf->SetDefaultMonospacedFont('helvetica');
$obj_pdf->SetHeaderMargin(150);
$obj_pdf->SetFooterMargin(20);
$obj_pdf->SetMargins( 15, 36, 15, true);
$obj_pdf->SetAutoPageBreak(TRUE, 30);
$obj_pdf->SetFont('Times', '', 12);
$obj_pdf->setFontSubsetting(false);
$obj_pdf->AddPage();
ob_start();
$output = db_query('SELECT n.nid,n.title,n.type,s.field_details_voyage_value
FROM {node} n
LEFT JOIN field_data_field_details_voyage s on n.nid=s.entity_id
WHERE n.type = :type', array(':type' => 'circuit'))->fetchObject();
$img = db_query('SELECT f.fid,f.uri,f.filename,a.bundle
FROM file_managed f
LEFT JOIN field_data_field_image_principale a on f.fid=a.field_image_principale_fid
WHERE bundle = :bundle',array(':bundle'=>'field_etape'))->fetchObject();
$etape = entity_load('node',array($output->nid));
$node_data = $etape[ $output->nid ];
$wrapper = entity_metadata_wrapper('node', $node_data);
$list_etape = field_get_items('node', $node_data, 'field_etape');
?>
<h1 id="" align="center"><?php echo $output->title ?></h1>
<?php foreach ($list_etape as $delta=>$value):?>
<h2><?php echo $wrapper->field_etape[$delta]->field_intitule->value() ?></h2>
<?php $date = $wrapper->field_etape[ $delta ]->field_date->value();?>
<h3><?php echo date('d,M,Y', $date ); ?> </h3>
<table width="100%">
<tr>
<td width="65%">
<?php echo '<img src="'.$wrapper->field_etape[$delta]->field_image_principale->file->url->value().'" width="300px"/>' ?>
</td>
<td width="35%">
<?php foreach ($wrapper->field_etape[$delta]->field_images_lieu as $value):?>
<?php echo '<img src="'.$value->file->url->value().'" width="100px" height="100px"/>'?>
<?php endforeach ?>
</td>
</tr>
</table>
<h3 align="right">Nuit à :<?php echo $wrapper->field_etape[$delta]->field_lieu_nuite->value() ?></h3>
<p><?php echo $wrapper->field_etape[$delta]->field_description->value->raw(); ?></p>
<?php endforeach ?>
<p><?php echo $output->field_details_voyage_value ?></p>
<?php
$content = ob_get_contents();
$obj_pdf->writeHTML($content, true, false, true, false, '');
ob_end_clean();
$obj_pdf->Output('devis.pdf', 'I');
//return theme('circuit_node_print');
}
/
* Implements hook_theme().
*/
function custom_print_circuit_theme($existing, $type, $theme, $path) {
return array(
'circuit_node_print' => array(
'variables' => array('node' => NULL),
'template' => 'circuit_node_print',
'path' => drupal_get_path('module', 'custom_print_circuit'),
),
);
}
function custom_print_circuit_preprocess_circuit_node_print(&$variables){
$node = $variables['node'];
$variables['title'] = $node['title'];
}
A ce niveau j'ai du perdre du temps parce que je n'arrivais qu'à transmettre le titre du node en cours au fichier.tpl et je devais présenter quelque chose j'ai du coder un "template" au niveau de la fonction de page_callback (custom_print_circuit_impression)
Par conséquent le hook_theme et la preprocess function ne sont pas utilisé pour le moment
3. Intégration de la libraire tcpdf dans le repertoire du module (custom_print_circuit/lib/tcpdf)
<?php
require_once(drupal_get_path('module', 'custom_print_circuit').'/lib/tcpdf/config/lang/fra.php');
require_once(drupal_get_path('module', 'custom_print_circuit').'/lib/tcpdf/tcpdf.php');
class circuit extends TCPDF {
public function Header() {
if((count($this->pages) === 1))
{
$file = 'sites/all/themes/zen/STARTERKIT/images/logo-hotel.png';
//$this->setPNGQuality(90);
$this->Image($file, 10, 8, 15, 0, 'PNG', 'http://www.hotel.sn');
$text_header = '<p style="color:#3E4E99;font-family:times new roman;font-size:16px;font-weight:bold;">BALI <br/>ENVIRONNEMENT</p>';
$text_header .='<hr width="100%" color="blue"/>';
}
$this->writeHTMLCell(150, 90, 30, 10, $text_header, 0, 0, 0, true, 'C', true);
$this->SetTextColor(0, 0, 255);
}
public function Footer() {
$this->SetY(-15);
$this->SetFont(PDF_FONT_NAME_MAIN, 'I', 8);
$text_footer = 'NOURANNE ENVIRONNEMENT - ESPACE VOYAGES - JI DANAU POSO N° 38 - SANUR / DENPASAR<br />';
$text_footer .= 'TEL / FAX : (indicatif international) +62 361 285 785';
$this->writeHTMLCell(160, 50, 30, 280, $text_footer, 0, 0, 0, true, 'C', true);
}
}
?>
Si quelque chose n'est pas clair ou que vous désirez de plus amples détails n'hésitez pas.
Merci
The more we know about Drupal,The better !!!!!