Déclarer une variable globale sous DP6

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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.

Version de Drupal : 

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.

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.

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 ?