Autor Zpráva
Fandaas
Profil *
Ahoj, dělám fotogalerii a potřeboval bych, aby se mi po každé třetí fotce zalomil řádek, nejlépe, aby byly pokaždé ty tři fotky v jednom divu.

Je to udělaný přes databázi, zdroják je zde:

...
$album = $_GET['aid'];

include "include/in_db.php";
@$query = mysql_query("SELECT id,name,many,url FROM dexterous_albums WHERE id = '$album'");
@$check = mysql_num_rows($query);

if ($check > 0) {
$data = mysql_fetch_row($query);

$i = $data[2];
echo "<div class='foto'>";

while ($i > 0): // dokud je $i větší než nula, prováděj následující příkazy


echo "<div class='box'>";
echo "<img src='";
echo "$data[3]";
echo "$i";
echo ".jpg";
echo "' />";
echo "</div>";


$i--;

endwhile;

echo "</div>";

} else {
echo "<div class='error'><h3>Neexistující album!</h3></div>";
}

...

Ale teď mi to nějak nejde, zkoušel několik způsobů, ale nic. Nevíte náhodou co s tím? Jak udělat, aby byly pokaždé tři fotky v jednom divu? Díky moc za pomoc.
WertriK
Profil
$y = 1;
while ($i > 0): // dokud je $i větší než nula, prováděj následující příkazy

if ($z == 1) {
echo "<div >";
}

echo "<div class='box'>";
echo "<img src='";
echo "$data[3]";
echo "$i";
echo ".jpg";
echo "' />";
echo "</div>";

if ($z == 3) {
echo "</div>";
$z = 0;
}

$i--;
$z++;
endwhile;
gaminn
Profil *
WertriK
Není tam ještě ošetřený případ, kdy se zobrazuje počet fotek nedělitelný 3.

$z = 1;
while ($i > 0): // dokud je $i větší než nula, prováděj následující příkazy

if ($z % 3 == 1) {
echo "<div >";
}

echo "<div class='box'>";
echo "<img src='";
echo "$data[3]";
echo "$i";
echo ".jpg";
echo "' />";
echo "</div>";

if ($z % 3 == 0 || $z == $check) {
echo "</div>";
}

$i--;
$z++;
endwhile;

Snad to není blbost a bude to fungovat;)
WertriK
Profil
gaminn
Jsi to moje asi nepochopil :)
Ta proměnná je jen od 1 do 3, takže není třeba dělitelnost řešit :)
Fandaas
Profil *
gaminn

Máš pravdu ten příklad předtím funguje, ale není tam ošetřený případ, kdy se zobrazuje počet fotek nedělitelný 3. Ten tvůj boužel ale nefunguje. Div se hodí za každou fotku a přeskočí jednu, prostě ňák skáče z místa na místo.

Nevíte, jak by se to dalo udělat, aby to bylo ošetřeno pro nedělitelný počet fotek?

Děkuji za zájem. Děkuji za odpověď.
Fandaas
Profil *
gaminn
Jsi to moje asi nepochopil :)
Ta proměnná je jen od 1 do 3, takže není třeba dělitelnost řešit :)


Ano, ale koncový div se v tomto případě nezobrazí.
WertriK
Profil
Snad to pofakčí fčil :)

$y = 1;
while ($i > 0): // dokud je $i větší než nula, prováděj následující příkazy

if ($z == 1) {
echo "<div >";
}

echo "<div class='box'>";
echo "<img src='";
echo "$data[3]";
echo "$i";
echo ".jpg";
echo "' />";
echo "</div>";

if ($z == 3) {
echo "</div>";
$z = 0;
}

$i--;
$z++;
endwhile;

if ($y < 3) {
echo "</div>";
}
Fandaas
Profil *
WertriK

Jejda, proč mě to taky nenapadlo. Už to jede. Děkuji moc, díky moc za zájem a urychlené vyřešení problému. Díky moc.
pavel prochazka.zde.cz
Profil *
kod jsem ale nijak nezkousel......

echo "<div class='box'>";
while ($i > 0): // dokud je $i větší než nula, prováděj následující příkazy

echo "<img src='";
echo "$data[3]";
echo "$i";
echo ".jpg>'";

$i--;

endwhile;
echo "</div>";

} else {
echo "<div class='error'><h3>Neexistující album!</h3></div>";
}
gaminn
Profil *
WertriK
Já myslím, že jsem tě pochopil, ale ty jsi nepochopil mě. Snad už je vše pochopeno;)

Fandaas
Ten můj příklad funguje dobře, jen jsem přesně nepochopil, jak tam zacházíš s proměnnou $check (neuvědomil jsem si, že ta má nejspíš vždy hodnotu 1). Takže v té podmínce místo $check napiš $data[2]. Nebo úplně abstraktně - druhá podmínka pro vypsání musí být true v případě, když se vypsala každá třetí fotka nebo se vypsala poslední fotka. Není snad problém si to potom upravit.
gaminn
Profil *
pavel prochazka.zde.cz
Nj, jenže on chce mít na jednom řádku vždy tři fotky. Tady to prostě vypíše všechny fotky do jedný linie.
pavel prochazka.zde.cz
Profil *
ok, ja z databazema neumim vubec zachazet a tak nemam tuseni co me muze vratil.
Pokud je uz vsechno vyreseno, tak se tim uz nebudu zabejvat...
gaminn
Profil *
pavel prochazka.zde.cz
Tady nejde vůbec o databázi.
gaminn
Profil *
WertriK
Nechci být hnidopich, ale jen tak mě napadlo, že toto tvoje řešení není pořád to pravé ořechové. Uvedu příklad - vypisuje se 9 obrázků, takže dojde ke správnému zakončení divu už v samotném cyklu while. Jenže tím pádem je v $z nejdřív 0, následně je inkrementováno, takže $z=1. To pořád splňuje podmínku pro vypsání zakončovacího divu v poslední podmínce.
Martin Majliš
Profil
Myslim, ze todle by mohlo fungovat:

$pocet = $data[2]; // pocet
$naRadek = 3; // kolik jich ma byt na radek
for ($i = 0; $i < $pocet; $i+= $naRadek) {
// vzdy se poskoci o radek
echo "<div class='box'>";

for ($j = 0; $j < $naRadek; $j++) {
// vypsani fotek z daneho radku
// spocitani aktualniho id
$id = 3 * $i + $j;
if ($id < $pocet) {
// skutecne je jeste potreba fotku vypsat
echo "<img src='";
echo "$data[3]";
echo "$id";
echo ".jpg";
echo "' />";
}
// sem by se mohl dat do else break, ale je to zbytecne
}
echo "</div>";
}
gaminn
Profil *
Martin Majliš
$id = $naRadek * $i + $j;

Je to v podstatě ekvivalent (stačí zaměnit $z % 3 na $z % $naRadek):

$z = 1;
while ($i > 0): // dokud je $i větší než nula, prováděj následující příkazy

if ($z % 3 == 1) {
echo "<div >";
}

echo "<div class='box'>";
echo "<img src='";
echo "$data[3]";
echo "$i";
echo ".jpg";
echo "' />";
echo "</div>";

if ($z % 3 == 0 || $z == $data[2]) {
echo "</div>";
}

$i--;
$z++;
endwhile;
Martin Majliš
Profil
gaminn:
Ja to jen proletl ocima, a kdyz za tim meli nejake pripominky, tak jsem si myslel, ze to obsahuje chybu a nezkoumal jsem to blize. Promin.

Takze jedina "dobra vec" v tom mojem prispevku byla, ze jsem ukazal, ze je dobre se zamyslet, jestli je skutecne zvetsovani promenne o 1 vzdy to nejlepsi reseni. Ze obcas se hodi i neco jineho. :o)
gaminn
Profil *
Martin Majliš
No ještě taková drobnost - Fandaas má každý obrázek obalený <div class="box">, ty tam máš použit tento div pro každé tři obrázky (takhle to je samozřejmě lepší, o jeden div méně, ale stylovat se to dá úplně stejně).

Jo, máš pravdu, že to jde i jinak, ale spotřebuješ na to o dost více kódu;) (nebo to je těmi komentáři? :D)

Tohle je naprosto dokonalá verze :D (kdo ví, jestli se sem ještě Fandaas někdy podívá a zdokonalí si tak stránky;)):



$naRadek = 5;
for ($i = $data[2], $z = 1 ; $i > 0 ; $i--, $z++) {
if ($z % $naRadek == 1) echo "<div >";

echo "<img class='box' src='";
echo $data[3];
echo $i;
echo ".jpg";
echo "' />";

if ($z % $naRadek == 0 || $z == $data[2]) echo "</div>";
}
gaminn
Profil *

$naRadek = 5;
for ($i = $data[2], $z = 1 ; $i > 0 ; $i--, $z++) {
if ($z % $naRadek == 1) echo '<div>';
echo '<img class="box" src="' . $data[3] . $i . '.jpg" />';
if ($z % $naRadek == 0 || $z == $data[2]) echo '</div>';
}
Toto téma je uzamčeno. Odpověď nelze zaslat.