Aller au contenu

Sujets conseillés

Posté

Bonjour

J'ai un script qui récupère des photos depuis une base de donnée pour les afficher ensuite sur une page web

function showPhotos($cat,$page,$end)
{
global $database,$ds_cats2,$ds_cats5,$SETTINGS;

$start = $page * $end - ($end);

$data = '';

$query = mysql_query("SELECT * FROM ".$database['prefix']."Photos".
WHERE cat = \''.$cat.'\''
)."
ORDER BY name
LIMIT $start,$end
")

while ($PHOTO = mysql_fetch_object($query))
{
$data .= '<td align="center"><img src="'.cleanData($PHOTO->pic1).'" height="100" width="90" alt="'.cleanData($PHOTO->name).'" title="'.cleanData($PHOTO->name).'"> <br /><span class="album"><a href="' 'index.php?cmd=PHOTO&cat='.$PHOTO->cat.'&PHOTO='.$PHOTO->id).'" title="'.cleanData($PHOTO->name).'">'.cleanData($PHOTO->name).'</a></span>'.($PHOTO->submitted_by ? '<br>    '.$ds_cats2.' '.cleanData($PHOTO->submitted_by) : '').'</td>';
}

$data .= '<br>';

return mysql_num_rows($query)>0 ? $data : '<br>';
}

Les photos sont affichées à l'aide du template:

<table cellpadding="4" cellspacing="1" border="0" width="100%">


<tr>

<?php echo $this->PHOTOS; ?>
</tr>

</table>

Ce script m'affiche toutes les photos sur une seule ligne, ce que je veux c'est afficher 5 photos sur chaque ligne.

Comment je dois m'y prendre?

Merci par avance de votre aide.

Posté (modifié)

En mettant les <tr> dans $data ça devrait être bon ;)

Modifié par captain_torche
Inutile de citer le message précédent (surtout quand il est si long); on vient de le lire (captain_torche, modérateur)
Posté (modifié)

Merci mais ça me donne uniquement une seule photo par ligne, je cherche plutot à avoir 5 photos par ligne,

j'ai pensé à un truc du genre

$a = 0;



if ($a == 0) {
echo "<tr>";
}
$a++;
echo "<td>";

Mon code

echo "
</td>";

if ($a == 5) {
echo "</tr>";
$a = 0;
}

mais je n'arrive pas à l'intégrer dans mon script :(

Modifié par djilou
Posté (modifié)

Ah excuse moi j'avais mal compris. Pour l'instant je n'ai pas trop d'idée pour ton prbleme :(

Je vais reflechir ;)

Pierre

Edit : Petite idée mais absolument pas sur, en mettant :

td { width:20%; }

Dans le CSS ?

Modifié par oxerrois
Posté

La largeur en CSS ne marchera pas, puisqu'avec un tableau il faut obligatoirement qu'il y ait une nouvelle ligne de spécifiée.

djilou, ton code devrait marcher, mais il faut le mettre au bon endroit : la première déclaration de $a avant la boucle while, et le reste entourant le contenu de ladite boucle.

Il faudra bien sûr supprimer les anciens <tr> de ton code.

Posté

Salut,

Tu ne nous aides pas beaucoup

Mets ton code ici pour que l'on puisse le voir et corriger :)

Portekoi

PS: Si c'est un long code, utilise [codeBOX ] [/codeBOX ]

Posté (modifié)

Je ne vois pas comment je peux l'inserer dans la boucle while vu que c'est le résultat de la variable $data qui est affiché dans le template donc si je mets le <tr> avant le while il ne serait pas pris en compte dans le template

$a = 0;



if ($a == 0) {
echo "<tr>";
}
$a++;
while ($PHOTO = mysql_fetch_object($query))
{
$data .= '<td align="center"><img src="'.cleanData($PHOTO->pic1).'" height="100" width="90" alt="'.cleanData($PHOTO->name).'" title="'.cleanData($PHOTO->name).'"> <br /><span class="album"><a href="' 'index.php?cmd=PHOTO&cat='.$PHOTO->cat.'&PHOTO='.$PHOTO->id).'" title="'.cleanData($PHOTO->name).'">'.cleanData($PHOTO->name).'</a></span>'.($PHOTO->submitted_by ? '<br>    '.$ds_cats2.' '.cleanData($PHOTO->submitted_by) : '').'</td>';
}
if ($a == 5) {
echo "</tr>";
$a = 0;
}

j'ai essayé directement dans le template mais ça ne donne rien

<table cellpadding="4" cellspacing="1" border="0" width="100%">
<?php
$a = 0;

if ($a == 0) {
echo "<tr>";
}
$a++;
echo $this->PHOTOS;

if ($a == 0) {
echo "</tr>";
$a = 0;
}
?>
</table>

Modifié par Portekoi
Posté

Si on te dit de le mettre dans le while, c'est dans le while qu'il faut le mettre :)

Essaie ca :


$a = 0;
while ($PHOTO = mysql_fetch_object($query))
{
if ($a == 0) {
echo "<tr>";
}

$data .= '<td align="center"><img src="'.cleanData($PHOTO->pic1).'" height="100" width="90" alt="'.cleanData($PHOTO->name).'" title="'.cleanData($PHOTO->name).'"> <br /><span class="album"><a href="' 'index.php?cmd=PHOTO&cat='.$PHOTO->cat.'&PHOTO='.$PHOTO->id).'" title="'.cleanData($PHOTO->name).'">'.cleanData($PHOTO->name).'</a></span>'.($PHOTO->submitted_by ? '<br>    '.$ds_cats2.' '.cleanData($PHOTO->submitted_by) : '').'</td>';

if ($a == 5) {
echo "</tr>";
$a = 0;
}
$a++;
}

Posté (modifié)

Comme je l'ai dis c'est le résultat de la variable $data qui est affiché dans le template

donc avec ton code le <tr> </tr> ne sont pas pris en compte, dans le code source de la page je n'ai que les <td> </td>

Voila comment est afficher le résultat

d'abord on a ce bout de code :

$tpl_category->assign('PHOTOS', showPhotos($cat,$page));

puis dans le template :

<table cellpadding="4" cellspacing="1" border="0" width="100%">	
<tr>
<?php echo $this->PHOTOS; ?></tr>
</table>

Modifié par djilou
Posté

oui c'est ce que j'ai fais, mais le <tr> n'est pas pris en compte je ne le vois pas quand j'affiche le code source de ma page :(

Posté

ça y est ça marche avec ce code :thumbup:

$a = 0;
while ($PHOTO = mysql_fetch_object($query))
{

if ($a == 0) {
$data .= '<tr>';
}
$a++;

$data .= '<td align="center"><img src="'.cleanData($PHOTO->pic1).'" height="100" width="90" alt="'.cleanData($PHOTO->name).'" title="'.cleanData($PHOTO->name).'"> <br /><span class="album"><a href="' 'index.php?cmd=PHOTO&cat='.$PHOTO->cat.'&PHOTO='.$PHOTO->id).'" title="'.cleanData($PHOTO->name).'">'.cleanData($PHOTO->name).'</a></span>'.($PHOTO->submitted_by ? '<br>    '.$ds_cats2.' '.cleanData($PHOTO->submitted_by) : '').'</td>';

if ($a == 4) {
$data .= '</tr>';
$a = 0;
}

}

Merci bcp de votre patiente et de votre aide :thumbsup:

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...