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: 12 let
|
0