Autor Zpráva
JM
Profil *
Vážení , rád bych Vás tímto požádal o radu ohledně úpravy jednoho scriptu který zasílám níže. Potřebuji v něm docílit toho, aby se mi jednotlivé položky řadící se jako " seznam " řadily tak, abych měl na stránce 3 vedle sebe - tedy v každém řádku 3 položky. Neviděl by jste někdo kde toho v tomto určitém scriptu docílit?? Děkuji

<?php

@session_start();
if(!isset($_SESSION['razeni']))
$_SESSION['razeni'] = 'seznam';

if(isset($_GET['ord']))
switch($_GET['ord'])
{
case 'cena' : $_SESSION['order'] = 'zb.cena'; break;
case 'nazev': $_SESSION['order'] = 'zb.nazev'; break;
default: $_SESSION['order'] = NULL;
}


if(isset($_GET['raz']))
$_SESSION['razeni'] = (($_SESSION['razeni'] == 'katalog') ? 'seznam' : 'katalog');
if(!isset($kat) && !isset($pkat))
Header("Location: ./index.php");

$menu = 1;
function __autoload($name)
{
require_once $name . '.php';
}

//require_once 'connect.php';
class zbozi extends connect
{
public $od = 0;
public $limit = 12;

public $kat;
public $pkat;

function __construct()
{
parent::__construct();
if(isset($_SESSION['razeni']) &&(($_SESSION['razeni']) == 'katalog'))
$this->limit = 20;
}

function vypis()
{
$array = '';
$array = intval($_GET['kat']);

if(is_numeric( $_GET['pkat'] ))
$array .= ', ' . intval($_GET['pkat']);

$select = "SELECT nazev FROM kategori WHERE id_kategori IN (" . $array . ") ORDER BY id_kategori";

$data = mysql_query($select, $this->link );
if( @mysql_num_rows( $data) != 0 )
{
print '<h3>';
print @mysql_result($data, 0, 0);
if( @mysql_result($data, 1, 0) != NULL)
print '/' . @mysql_result($data, 1, 0);
print '</h3>';
}

$select = "SELECT zb.id_zbozi, zb.nazev, zb.popis_z, zb.cena, zb.akce, zb.kod, dos.dostupnost, zb.img_1
FROM zbozi zb, zaruky za, vyrobci vy, dostupnost dos
WHERE (
zb.id_zaruka = za.id_zaruky
)
AND (
zb.id_vyrobci = vy.id_vyrobce
)
AND (
zb.skladem = dos.id_dostupnosti
)
AND(
" .
(($this->pkat == NULL) ? "id_kategori = '" . $this->kat . "'" : "id_podkategori = '" . $this->pkat . "'" ) . "
)
ORDER BY " . (($_SESSION['order'] == NULL) ? 'zb.akce, nazev' : $_SESSION['order']) . "
LIMIT " . ($this->od * $this->limit) . "," . $this->limit;

$select2 = "SELECT zb.id_zbozi, zb.nazev, zb.popis_z, zb.cena, zb.akce, zb.kod, dos.dostupnost, zb.img_1
FROM zbozi zb, zaruky za, vyrobci vy, dostupnost dos
WHERE (
zb.id_zaruka = za.id_zaruky
)
AND (
zb.id_vyrobci = vy.id_vyrobce
)
AND (
zb.skladem = dos.id_dostupnosti
)
AND(
" .
(($this->pkat == NULL) ? "id_kategori = '" . $this->kat . "'" : "id_podkategori = '" . $this->pkat . "'" ) . "
)";

if(($data = mysql_query($select, $this->link)) == 0)
{
self::error_msg('Chyba v dotazu.');
return 0;
}


if(($pocet = mysql_num_rows($data))== 0)
{
self::error_msg("V této kategorii neexistuje žádný produkt.");
return 0;
}
$celkem = mysql_num_rows(mysql_query($select2, $this->link));

$i = 1;


if($celkem > $pocet)
{
$pages = "Strana ";
for($j = 0; $j < ($celkem / $this->limit); $j++)
$pages .= (($j == $this->od) ? ($j + 1) : '<a href="zbozi.php?kat=' . intval($this->kat) . '&amp;' .
(($this->pkat != NULL) ? 'pkat=' . intval($this->pkat) : NULL) . 'od=' . $j . '"> <big>' . ($j + 1) . '</big> </a>');
}

print '<p>Celkem bylo nalezeno ' . $celkem . ' produkt&ugrave;. Na stránce je zobrazeno ' . $pocet . '. <br />' . $pages;
print '<br /><span class="menu_nadpis">Zobrazit jako <a href="zbozi.php?kat=' . intval($this->kat) . '&amp;' .
(($this->pkat != NULL) ? 'pkat=' . intval($this->pkat) . '&amp;' : NULL) . 'raz=1">'
. (($_SESSION['razeni'] == 'katalog') ? 'seznam' : 'katalog') . '</a>
| Se&oslash;adit podle:
<a href="zbozi.php?kat=' . intval($this->kat) . '&amp;' .
(($this->pkat != NULL) ? 'pkat=' . intval($this->pkat) : NULL) . '&amp;ord=cena">ceny</a>/<a href="zbozi.php?kat=' . intval($this->kat) . '&amp;' .
(($this->pkat != NULL) ? 'pkat=' . intval($this->pkat) : NULL) . '&amp;ord=nazev">názvu</a>
<br /></span>';

print "</p>\n";

if($_SESSION['razeni'] != 'katalog'):
print '<table>';
$i = 1;
while($row = mysql_fetch_array($data))
{
print (($i++ % 2) ? '<tr>' : NULL);
print '<td style="border-style: groove; border-left-width: 0px;border-top-width: 0px" width="200px">' ;
print ' ';
print '<b>
<a href="produkt.php?kat=' . intval($this->kat) . '&amp;' .
(($this->pkat != NULL) ? 'pkat=' . intval($this->pkat) : NULL) . '&amp;id=' . $row['id_zbozi'] . '">'
. $row['nazev'] . '</a>
</b><br />
' . (($row['img_1']) ?'<img src="images_n/' . $row['img_1'] . '" width="100px" style="float: right" alt="img" />' : NULL) . '
<small>Kód: ' . $row['kod'] . '</small>
<br />
' . (($row['popis_z']) ? $row['popis_z'] : $row['popis_z']) . '
<br />
Dostupnost: ' . $row['dostupnost'] . '
<br />
<i>
Cena: ' . $row['cena'] . '
</i>

<form method="post" action="pridat.php">
<input type="hidden" name="id" value="' . intval($row['id_zbozi']) . '" />
<input type="text" name="pocet" value="1" size="1" />
<input type="image" value="Košík" name="new_k" src="./images/kosik.gif" />
</form>
';
print '</td>' . (($i % 2) ? '</tr>' : NULL) ;
$j++;
}
if( $j % 2 )
print '</tr>';
print '</table>';

endif;
if($_SESSION['razeni'] == 'katalog'):

print '<table>';
while($row = mysql_fetch_array($data))
{
print '<tr><td>' . $row['kod'] . '</td><td width="150px"><b><a href="produkt.php?kat=' . intval($this->kat) . '&amp;' .
(($this->pkat != NULL) ? 'pkat=' . intval($this->pkat) : NULL) . '&amp;id=' . $row['id_zbozi'] . '">' .
(strlen($row['nazev'] > 20) ? substr($row['nazev'], 0, 20) . '...' : $row['nazev']) . '</a></b></td>';
print '<td> &nbsp;<i>' . $row['dostupnost'] . '</i>&nbsp; </td>';
print '<td>Cena: ' . $row['cena'] . ' K&egrave;</td>';
print '<td>
<form method="post" action="pridat.php">
<input type="hidden" name="id" value="' . intval($row['id_zbozi']) . '" />
<input type="text" name="pocet" value="1" size="1" />
<input type="image" value="Košík" name="new_k" src="images/kosik.gif" alt="kosik" />
</form></td>
</tr>';

}
print '</table>';
endif;

print '<p>' . $pages . '</p>';
}

function error_msg($msg)
{
print '<span style="color: red;">' . $msg . '</span>';
}
}

require_once './head.php';

$use = new zbozi();

$use->kat = $_REQUEST['kat'
Frozen
Profil
Nemáš někde ukázku výsledku? resp. nedá se to řešit přes css?
JM
Profil *
testovaci je rozjete zde

http://www.jsystems.eu/bylinky/zbozi.php?kat=3
jenikkozak
Profil
JM:
Nepoužívejte tabulku, dejte jednotlivé položky např do divů a nechte je plavat pomocí float. Pak se budou skládat vedle sebe podle velikosti okna. A bude to pro Vás snazší, nebudete muset počítat, o kolikátý sloupeček se jedná.

OT: „O mě“ se píše s enkem.
Systém na trávení je trávicí, trávící je pouze během trávení.
Promiňte, ale zdrojový kód té stránky je poměrně hrozný.

Když použijete správné kódování stránky i editoru, nebudete muset znaky s interpunkcí zadávat pomocí entit.
JM
Profil *
jenikkozak:
DEKUJI :-) za poznamku a za radu. jeste vyckam na jine popr a pak se na to vrhnu
jenikkozak
Profil
JM:
jeste vyckam na jine popr a pak se na to vrhnu
Pokud byste nevěděl, kde to v tom zmatku upravit, tak začátek oné buňky je na řádku 277, konec na 325. Ty by stačilo přepsat na začátek a konec <div>u.
Frozen
Profil
JM:
neni na co čekat jennikkozak byl nejrychlejší a další už nic nenapíší ;-)
JM
Profil *
jenikkozak:
mate pravdu, je v tom takovy zmatek ze ted jsem se uz ztratil uplne - dam si prestavku a pak to treba uvidim :-) dekuju
JM
Profil *
JM:
Ne nezda - rad bych celou vec vyresil tak jak to je a to upravou modulo.... proto prosim o radu jak tedy pomoci modu tohoto docilit. Vcera jsem bohuzel o module jeste ani nevedel tak se omlouvam
jenikkozak
Profil
Ale proč chcete použít zbytek po dělení? Jen proto, abyste mohl použít tabulku. Jenomže uvědomte si, že na tento případ se tabulka příliš nehodí, zde je její použití nesémantické, neboť tabulka by měla dávat smysl při čtení zleva doprava s tím, že sloupečky by měly obsahovat podobné vlastnosti, což v tomto případě samozřejmě nebude.
Pokud však použití tabulky vyžadujete, pomůže vám odkaz na onen výpis do sloupců.
JM
Profil *
odkaz mi mozno pouze - dekuji, ale ja potrebuji pomoci prakticky s tou upravou. Na ujasnenou - upravuji ten kod nikoliv pisi. je to tvorba jiz nekym hotova a za podminek ktere jsou aktualni jine nez uprava rozsireni neni akceptovatelne. proto ze jsem to podcenil a nyni nevim, zadam o pomoc touto cestou. dekuji za pochopeni
jenikkozak
Profil
Mnou navržená úprava je ale snazší než dumat nad tím, jak to rozdělit do sloupečků tabulky. Vždyť jsem Vám i napsal, které řádky máte upravit.

Místo
<table><tr><td></td><td></tr><td></td></tr><tr><td></td><td></tr><td></td></tr></table>
se v tom cyklu automaticky dá tvořit <div></div>. Divy se dají nastylovat tak, že budou vypadat podobně jako ta tabulka (jediný problémek může být to, že nebudou umět se správně rovnat, pokud budou mít rozdílné výšky, ale tomu se dá pomoci nastavením minimální výšky či využití overflow).

Ale nepodařilo se mi Vás přesvědčit, musíte si tedy počkat, až se někdo odhodlá k tomu, aby Váš předlouhý (a nepřehledný) kód prošel a poradil, jak tam udělat tu tabulku.
Tori
Profil
Ze zvědavosti jsem si to prošla, a pár poznámek:
- V druhém dotazu do DB je zbytečné číst komplet.záznamy produktů z celé kategorie, když pak jen spočítáte řádky. Zjednodušila bych to přinejmenším na "SELECT COUNT(*) AS 'celkem' FROM...".
- Proměnná $i je definovaná dvakrát, $array (která napodiv obsahuje řetězec) jakbysmet.
- Používání $this->kat versus $_GET['kat'], nebo intval() na hodnoty z databáze mi není moc jasné
- Tohle:
(($row['popis_z']) ? $row['popis_z'] : $row['popis_z'])
se dá vykrátit na $row['popis_z'].

- Největší záhadou mi je použití $j v cyklu while a po něm. Ř.331 má zřejmě sloužit k uzavření <tr> v případě, že na posledním řádku je méně buněk než sloupců. Jak se toho ale dosáhne, když hodnota $j před cyklem je rovna počtu stránek, neboli
ceil($celkem / $this->limit)
, to je pro mne magie.

- Byť zcela souhlasím s jenikemkozakem a použitím <div>ů, pravděpodobně (= nezkoušela jsem to) by vám jako dočasné řešení mohly pomoci následující úpravy:
edit: opraveno.
// řádek 269 nahradit:
$i = $pocetSloupcu = 3;

// ř.275 nahradit: (ukončí předchozí řádek (pokud nejsme ještě na prvním řádku) a začne nový)
if ($i%$pocetSloupcu==0)
  print ($i>$pocetSloupcu ? '</tr>':''). '<tr>';
  
// ř.325-327 nahradit:
print '</td>';
$i++;

// ř.331-333 nahradit: (jen doplní prázdné buňky do konce řádku)
while ($i%$pocetSloupcu != 0) {
  print '<td>&nbsp;</td>';
  $i++;
}
print '</tr>';
Omlouvám se, že do tohoto kódu nejsem schopná vymyslet nic méně hrozného.
JM
Profil *
Tori:
Ahoj Tori, za nic se neomlouvej ja dekuji mic za tvou snahu. Avsak nejak se nepodarilo, myslis ze bych treba mohl napr emailem poslat script ke korekci? dekuju
Tori
Profil
JM:
Zkusila jsem to teď a zjistila, že jsem vám poradila bludy, za což se omlouvám. Opravila jsem ty změny, takhle by to mělo fungovat.
JM
Profil *
JM:
Ja skladam velkou poklonu a tisicere diky Tori. Velmi dekuju. Mohu se nejak odvdecit??

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0