Submitted by Maxime69 on
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.
Salut, As-tu essayé la
Permalien Soumis par yvmarques@drupal.org le 20 Juillet, 2009 - 23:03
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
Permalien Soumis par Maxime69 le 21 Juillet, 2009 - 09:10
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
Permalien Soumis par yvmarques@drupal.org le 21 Juillet, 2009 - 10:05
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
Permalien Soumis par Maxime69 le 21 Juillet, 2009 - 12:25
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é
static
englobal
sans succès.Bonjour, j'ai eu besoin
Permalien Soumis par anlong le 20 Août, 2009 - 14:59
Bonjour,
j'ai eu besoin d'utiliser des variables globales.J'ai utilisé la variables php $GLOBAL.
ex:
Cela peut il t'aider ?
Salut, je vais tester ça
Permalien Soumis par Maxime69 le 22 Août, 2009 - 18:20
Salut,
je vais tester ça mais oui c'est ce que je cherchais.
Merci pour ton aide !