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"> </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.
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Salut,
As-tu essayé la variable $id ? car normalement dans la plus part des templates elle sert à ça justement.
Salutations
yvmarques@drupal.org
58
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 !
Maxime69
181
Par exemple, si tu fais ceci ça fonctionne pas ?
<?phpif(($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 :
<?phpfunction 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.
yvmarques@drupal.org
58
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"> </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é
staticenglobalsans succès.Drupal…c’est d’la balle !
Maxime69
181
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 ?
anlong
4
Salut,
je vais tester ça mais oui c’est ce que je cherchais.
Merci pour ton aide !
Drupal…c’est d’la balle !
Maxime69
181