Preprocess function

Events happening in the community are now at Drupal community events on www.drupal.org.
babacar's picture

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

jpoesen's picture

Salut

Regarde l'erreur:

[...] Trying to get property of non-object [...]

ç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é ;)

knibals's picture

Salut Babacar, voiçi la version corrigée de ton code:

<?php
function 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
 
}
?>

Petit à petit, on devient moins petit

Merci. Fixed

babacar's picture

Merci. Fixed

The more we know about Drupal,The better !!!!!

Partager?

jpoesen's picture

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

babacar's picture

Sans doute je vais rédiger ça au propre et le poster

The more we know about Drupal,The better !!!!!

Solution?

jpoesen's picture

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

babacar's picture

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

  1. création du fichier .info

    name = Custom print circuit
    description = Module for custom print circuit.
    core = 7.x
    version = 7.1.0
    package = Custom Print Circuit
  2. 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)

  1. Création d'un fichier custom_print_circuit.inc (Configuration du header et footer du pdf)
    <?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 !!!!!

Senegal

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: