| Autor | Zpráva | ||
|---|---|---|---|
| Jcas Profil * |
#1 · Zasláno: 1. 6. 2012, 06:21:45 · Upravil/a: Jcas
Poprosím radu laikovi. Jedna stránka nekonečně zatíží prohlížeč.
I když script vkládám do prostřed index.php, část se zpracuje až za patičkou - absolutně nechápu. Zatím je předmětů málo, tak chci na první stránce zobrazit vše a podadresáře udělají selekci. Časem na první stránce zobrazím pouze vybrané, nebo náhodné. Asi je pravda, že to je od začátku špatná architektura, ale co čekat od laika. /eshop/podadr/fotky Každá fotka má jeden soubor.csv, kde jsou informace(cena popis atd.) <?php
//FUNKCE NA NEčTENí INFO O OBRáZKU
function ZiskejInfo($soubor) {
if(file_exists($soubor)) {
$handle = fopen($soubor, "r");
$contents = fread($handle, filesize($soubor));
fclose($handle);
return $contents;
}
}
//FUNKCE NA ZJIšTěNí DAT OBRáZKU (TYP, VELIKOST)
/*
$informace = getimagesize(`obr1.jpg`);
echo `Šířka obrázku je `,$informace[0],` pixelů.<br>`;
echo `Výška obrázku je `,$informace[1],` pixelů.<br>`;
echo `Formát obrázku je číslo `,$informace[2],`.`;
*/
function ZiskejData($soubor) {
$data=getimagesize($soubor);
return $data;
}
?>
<!-- ------FUNKCE NA VYPIS ADRESARU------
projde adr "galerie" a kazdy pod-adr ulozi jako polozku do pole folder.
Nasledne zavola funkci pro zobrazeni adresaru -->
<?php
function ObsahSlozky($slozka, $co='dir') { //pri volani funkce predame adr. nasi "galerie"
$folder = Array();
$file = Array(); // zinicializujeme pole
$obsah = scandir($slozka); //[0]=., [1]=..,[2]=dir nebo file
foreach($obsah as $key => $polozka) { //prochazi pole - obsah adresáře $slozka
if($polozka != "." && $polozka != ".."){ //vynechame tecky nadadresářů.
if(is_dir($slozka."/".$polozka)) {
$folder[] = $polozka; //ulozim do pole pouze adresare
}
else {
$typ = ZiskejData($slozka.'/'.$polozka);
if($typ[2]==2||$typ[2]==3) {$file[] = $polozka;} //povoleno pouze jpeg a png
}
}
}
//volání funkcí na zobrazení
if($co=='dir') {ZobrazDir($folder);
} else {ZobrazFile($slozka, $file);}
}
//-------FUNKCE NA ZOBRAZENI POD-ADRESARU (OBSAHU GALERIE)----------
?>
<div id="adresare"><table align='center'><tr>
<?php
function ZobrazDir($folder) {
$celkem = count($folder); //pocet adresaru (velikost pole)
--$celkem; // protoze pole se pocita od 0, nastavim si celkovy pocet -1
$pocet = 3; //POCET OBR NA RADKU. opet o -1
$prvek = 0; //zaciname prvkem pole[0]
while($prvek < count($folder)) { //cyklus, ktery projde vsechny prvky pole
for($i=$prvek; $i<=$pocet && $i<=$celkem; ++$i) { //cykl. který zobrazi na jednom radku obr. slozky
echo "<td align='center' width='125'><a href='http://www.zocschmoravskebranice.eu/index.php?page=eshop&dir=".$folder[$i]."' ><img src='galerie_soubory/folder.gif' width='40' height='44' alt='folder' style='border: 0'/></a></td>";
if($i == $pocet || $i == $celkem) {
echo '</tr><tr>';
}
}
for($i=$prvek; $i<=$pocet && $i<=$celkem; ++$i) { //cykl, ktery zobrazi na druhem radku jmeno adresare
echo "<td align='center'>".$folder[$i]."</td>";
if($i == $pocet || $i == $celkem) {
echo '</tr><tr>';
}
}
$pocet += 4;
$prvek += 4;
}
echo '</tr></table></div>';
foreach($folder as $poddir) { //zobrazení náhledů na hl. stránce
ObsahSlozky($_GET['page'].'/'.$poddir, 'file'); //voláme podadresáře a zobrazíme vše.
}
}
//------FUNKCE NA ZOBRAZENI GALERIE-OBRAZKU--------
function ZobrazFile($slozka, $file) {
$celkem = count($file); //pocet souboru (velikost pole)
$pocet = 3; //POCET OBR NA RADKU -1 kvůly polčítání od nuly.
--$celkem; // protoze pole se pocita od 0, nastavim si celkovy
echo '<div id="polozky"><table align="center"><tr>';
foreach($file as $key => $name) { //procházení všech obrázků
$soubor = $slozka.'/'.$name; //obrazek
$jmeno = explode('.', $name); //odstranění koncovky souboru
$soubor2 = $slozka.'/'.$jmeno[0].'.csv'; //soubor s info o obrázku
$informace = ZiskejInfo($soubor2); //Načte info k obrázku cena=informace[0]
$rozmery = ZiskejData($soubor); //$rozmery[0]-šířka, [1]-výška
while($rozmery[0]>125||$rozmery[1]>100) {
$rozmery[0] = $rozmery[0]/2;
$rozmery[1] = $rozmery[1]/2;
}
echo '<td><p>
<a href="eshop_detail.php?soubor='.$jmeno[0].'" target="_blank">
<img src="'.$soubor.'" tilte="'.$name.'" alt="'.$name.'" width="'.$rozmery[0].'" height="'.$rozmery[1].'" />
</a></p><strong>'.$informace[0].',- Kč</strong>
<p>
</p></td>';
if($key==$celkem) {echo '</tr></teble></div>';
} elseif ($key==$pocet) {
echo '</tr><tr>'; $pocet = ($pocet+4);}
}
}
//-------VOLANI FUNKCE------------
if(isset($_GET['dir'])) { //zobrazení podadresáře
ObsahSlozky($_GET['page']."/".$_GET['dir']);
}
else { //základní zobrazení
ObsahSlozky($_GET['page']);
}
?>Jo a jak to funguje-nefunguje se můžete podívat na www.zocschmoravskebranice.eu/index.php?page=eshop |
||
| Ugo Profil |
#2 · Zasláno: 1. 6. 2012, 07:35:07
nepřipadá mi že by se skript cyklil, to zobrazení je podivný, rozhodně si oprav na ř. 116 "teble" => "table", teoreticky by to mohlo i pomoct
|
||
| Joker Profil |
#3 · Zasláno: 1. 6. 2012, 07:41:54
Jcas:
„Jedna stránka nekonečně zatíží prohlížeč.“ Pokud zatěžuje prohlížeč, nebude chyba v PHP. Ale tady bych řekl, že se ta stránka prostě jen pomalu načítá z důvodu, že ty „malé“ obrázky jsou ve skutečnosti velké obrázky s nastavenými malými rozměry. Zejména jeden z nich (ten poslední z tabulky), který sám o sobě má 1MB, což je skoro polovina velikosti celé stránky. Kdyby se použily obrázky skutečně toho rozměru co je pak potřeba, zmenšil by se datový objem a tím i čas potřebný k načtení stránky na 1/4. Lehce související, opravdu by ta podivná animace v hlavičce nešla nahradit normálním obrázkem na pozadí s textem přes něj? Jinak na řádku 116 je překlep table-teble. |
||
| Jcas Profil * |
#4 · Zasláno: 1. 6. 2012, 11:36:50
Tak ten překlep opravdu mohl za to podivné zobrazení.
Ale stejně je to celé blbě, protože kliknutí na podadresář se mají zobrazit pouze příslušné obr a ne znova zobrazovat adresáře. To je jedno-to se musí ještě pořádně doladit. Každopádně děkuju. Lehce související, opravdu by ta podivná animace v hlavičce nešla nahradit normálním obrázkem na pozadí s textem přes něj? - To jsem poprvé zvládl vytvořit v Gimpu animaci. Tak je to trochu potěšení nad svým výtvorem. |
||
|
Časová prodleva: 14 let
|
|||
0