Déclarer une variable globale sous DP6

Catégories:

Bonjour,

je n’arrive pas déclarer de variable globale sous DP6.
J’explique mon cas :

Je voudrais faire un tableau sur 2 colonnes dans un tpl de style de ligne.
Je fais donc ça :

<?php
if($fields['name']->content != 'Anonyme') {
  print
'<table width="600">';
print
$cpt;
    if (
$cpt % 2) {
        print
'<tr><td width="300">';
     
       print
'<table width="300"><tr><td width="50">'.'<img src="'.$fields['picture']->raw.'" width="34" height="42">'.'</td><td width="250">' . $fields['name']->content.'<br>' . $fields['value']->content . '<br>' . $fields['value_1']->content . '</td></tr></table>\n';
    
       print
'</td>';
} else {
       print
'<td width="300">';
       
       print
'<table width="300"><tr><td width="50">'.'<img src="'.$fields['picture']->raw.'" width="34" height="42">'.'</td><td width="250">' . $fields['name']->content.'<br>' . $fields['value']->content . '<br>' . $fields['value_1']->content . '</td></tr></table>';
      
       print
'</td></tr>';  
   }
 
   if (
$cpt % 2) {
        print
'<td width="300">&nbsp;</td></tr>';
    }

print '</table>';
}
?>

Cependant, comme ce fichier tpl est appelé à chaque résultat trouvé correspondant à la view, alors $cpt est toujours égal à 0 et ne s’incrémente pas…

Je voudrais donc pouvoir déclarer correctement ma variable $cpt mais je ne sais pas où…J’ai essayé

global $cpt;
$cpt = 0;

dans des pages différentes, sans succès !

Merci pour votre aide.

#

Salut,

As-tu essayé la variable $id ? car normalement dans la plus part des templates elle sert à ça justement.

Salutations

#

Re,

J’ai testé avec le $id et ça me récupère bien un chiffre.
Cependant, je pense que cet id correspond peut être à un id de ligne ou autre…mais il y a un problème car dès que tu fais une condition de non affichage de ligne (exemple avec le modulo ou un if classique) l’id est sauté et l’affichage par exemple sur 2 colonnes ne peut être réalisé.
Il me semble donc inévitable de pouvoir déclarer une variable globale.

Sais-tu où je dois la déclarer ?

Maxime.

Drupal…c’est d’la balle !

#

Par exemple, si tu fais ceci ça fonctionne pas ?

<?php
if(($id - 1) % 2 == 0) {
 
// Mon code
}
// Code
if(($id - 1) % 2 == 0) {
 
// Mon code
}
?>

Sinon, il y une solution un peu moins propre c’est de créer une fonction avec une variable static exemple :

<?php
function counter() {
  static
$counter
 
if(!isset($counter)) {
   
$counter = 0;
  }
  return
$counter++;
}
?>

Cela permet d’avoir un counter qui s’incrémente comme si c’était une variable global.

#

Bon, j’ai pris ta 2ème solution moins aléatoire que al première à mon sens ;)
J’ai un peu amélioré le code mais ça coince encore car il renvoi toujours 1 pour $counter.

Voici ma page views-view-fields—membre-max—block-1.tpl.php

<?php
// $Id: views-view-fields.tpl.php,v 1.6 2008/09/24 22:48:21 merlinofchaos Exp $
/**
* @file views-view-fields.tpl.php
* Default simple view template to all the fields as a row.
<em>
* - $view: The view in use.
* - $fields: an array of $field objects. Each one contains:
*   - $field->content: The output of the field.
*   - $field->raw: The raw data for the field, if it exists. This is NOT output safe.
*   - $field->class: The safe class id to use.
*   - $field->handler: The Views field handler object controlling this field. Do not use
*     var_export to dump this object, as it can't handle the recursion.
*   - $field->inline: Whether or not the field should be inline.
*   - $field->inline_html: either div or span based on the above flag.
*   - $field->separator: an optional separator that may appear before a field.
* - $row: The raw result object from the query, with all data it fetched.
*
* @ingroup views_templates
*/
?>

<?php
if (!function_exists('counter')) {
    function
counter() {
     if(!isset(
$counter)) {
       static
$counter;
      
$counter = 0;
    }
      return
$counter;
}
} else {
$counter++;
}
?>

<?php
counter
();
print
$counter . '<br>';
if(
$fields['name']->content != 'Anonyme') {
/</
em>
print
'<table width="600">';

    if ($counter % 2 == 0) {
       print
'A';
       print
'<tr><td width="300">';
     
       print
'<table width="300"><tr><td width="50">'.'<img src="'.$fields['picture']->raw.'" width="34" height="42">'.'</td><td width="250">' . $fields['name']->content.'<br>' . $fields['value']->content . '<br>' . $fields['value_1']->content . '</td></tr></table>';
      
       print
'</td>';
} else {
       print
'B';
       print
'<td width="300">';
       
       print
'<table width="300"><tr><td width="50">'.'<img src="'.$fields['picture']->raw.'" width="34" height="42">'.'</td><td width="250">' . $fields['name']->content.'<br>' . $fields['value']->content . '<br>' . $fields['value_1']->content . '</td></tr></table>';
      
       print
'</td></tr></table>';
   }
 
   if (
$counter % 2 == 0) {
       print
'<td width="300">&nbsp;</td></tr>';
    }

*/
}
?>

Et voici la page appelante nommée views-view-unformatted—membre-max—block-1.tpl.php :

<?php
// $Id: views-view-unformatted.tpl.php,v 1.6 2008/10/01 20:52:11 merlinofchaos Exp $
/**
* @file views-view-unformatted.tpl.php
* Default simple view template to display a list of rows.
*
* @ingroup views_templates
*/
?>

<?php foreach ($rows as $id => $row): ?>
<?php print $row; ?>
<?php endforeach; ?>

As-tu une idée ?
J’ai même essayé static en global sans succès.

Drupal…c’est d’la balle !

#

Bonjour,

j’ai eu besoin d’utiliser des variables globales.J’ai utilisé la variables php $GLOBAL.

ex :

<?php
$GLOBALS
['montableau']=array(1,2,3);

function foo(){
$montableau = $GLOBALS['montableau'];
}
?>

Cela peut il t’aider ?

#

Salut,

je vais tester ça mais oui c’est ce que je cherchais.

Merci pour ton aide !

Drupal…c’est d’la balle !

Syndiquer le contenu