Autor | Zpráva | ||
---|---|---|---|
moom Profil |
#1 · Zasláno: 23. 8. 2013, 08:59:16
Lidi zlatí mám prosím dotaz. Snažím se vytvořit jednoduchý web, kde si kamarád nahraje
obrázky ve formátu JPG do specifické složky a tyto fotografie se zobrazí pomocí Fancybox 2 skrze jeden odkaz (jeden link vede do galerie), U Fancybox je u každého odkazu pomocí TITLE definovaný popisek fotografie. Názvy fotografii budou na serveru s diakritikou. No a zkouším toto řešení, kde si zadám cestu, oskenuji její obsah, čističem smažu .jpg a zadám první soubor jako HREF a čističe vložím do TITLE. Kupodivu to funguje :) Protože první pole je tečka a druhé dvě tečky, tak mám zadáno $fotky[2] jako první fotografii ze složky. Jenom teď nevím jak vypsat všechny ostatní pole krom ., .., a první fotky $fotky[2], tedy všechno krom prvních tří? Máte prosím nějakou radu jak to udělat, případně je toto řešení úplně mimo? Následující kód jsem složil asi po třech hodinách usilovného hledání, ale už jsem v koncích :) <?php $cesta = "img/foto/"; $fotky = scandir($cesta); $cistic = substr($fotky[2], 0, -4); echo '<a class="fancybox" rel="gallery1" href="' . $cesta . $fotky[2] . '" title="' . $cistic . '"/>'; ?> |
||
Luke9 Profil |
#2 · Zasláno: 23. 8. 2013, 09:31:13
Napadá mě při nahrávání fotek změnit jejich jméno na 1.jpg a s každou dalšíá fotkou postupně zvyšovat číslo, pak můžeš jednoduše přes for zadat cestu a jen měnit číslovku u souboru a ten vypisuješ.
|
||
Joker Profil |
#3 · Zasláno: 23. 8. 2013, 09:34:37
moom:
> Názvy fotografii budou na serveru s diakritikou. To není dobrý nápad. Podle mých zkušeností se kódování souborů může lišit v různých operačních systémech a v kombinaci ještě s kódováním PHP skriptu není snadné vůbec takové soubory načíst. Vůbec nemluvě o tom, jestli se takový název má nějak čitelně prezentovat uživateli. K samotnému dotazu na čtení souborů, dá se použít glob(), příklad viz php.vrana.cz/prochazeni-adresaru.php |
||
Luke9 Profil |
#4 · Zasláno: 23. 8. 2013, 09:37:13
Joker:
„K samotnému dotazu na čtení souborů, dá se použít glob()“ glob() jsem neznal, určitě je to elegantnější způsob než popisovaný mnou. |
||
moom Profil |
Děkuji za pomoc, ale moc nerozumím co myslíte, že bych měl dělat pomocí GLOB?
Pokud tomu rozumím správně, tak si můžu zadat, abych si vypsal všechny určité soubory, tady je asi výhoda, že nebudu mít pole, ale soubory a nebudu mít první dvě pole jako tečku a dvojtečku. Ale mám tu zase stejný problém, jak prosím vyberu jenom první ze souborů a jak vyberu všechny ostatní krom prvního? foreach (glob("img/foto/*.jpg") as $filename) { echo "<li><a href='$filename'>$filename</a></li>\n"; } No a druhý problém je, že potřebuji, aby byla možnost k obrázku zadat Popisek TITLE, proto jsem si myslel, že bude dobré, pokud soubor bude obsahovat v názvu popisek a tento popisek se stane TITLE. Kdy TITLE je pak popiskem při zobrazení skrze Fancybox. Leda, že by každá fotografie měla popisek v TXT souboru foto.01.jpg, foto-01.txt, ale jak by se to pak prosím spojilo? Prosím, prosím, potřebuji popokopnout :) Ještě raději posilám ukázku HTML kódu, co má být výsledkem: <div class="logo"> <!-- Toto je první fotografie ze složky --> <a class="fancybox" rel="gallery1" href="img/01.jpg" title="Popisek 1"></a> </div> <div class="hidden"> <!-- A tady jsou všechny ostatní, krom té první --> <a class="fancybox" rel="gallery1" href="img/02.jpg" title="Popisek 2"></a> <a class="fancybox" rel="gallery1" href="img/03.jpg" title="Popisek 3"></a> <a class="fancybox" rel="gallery1" href="img/04.jpg" title="Popisek 4"></a> </div> |
||
Joker Profil |
#6 · Zasláno: 23. 8. 2013, 10:20:01
moom:
> jak prosím vyberu jenom první ze souborů a jak vyberu všechny ostatní krom prvního? Tak v tom foreach bude první soubor první cyklus a ostatní soubory ty ostatní cykly. Ale já měl za to, že ta potřeba vynechávat první položky byla způsobená tím, že první položky jsou „.“ a „..“ (což v tom glob není)? Nebo jsem to špatně pochopil? > proto jsem si myslel, že bude dobré, pokud soubor bude obsahovat v názvu popisek a tento popisek se stane TITLE Jo, přesně tohle jsem si kdysi myslel taky. Pak se to ale ukázalo neprůchodné. |
||
Keeehi Profil |
#7 · Zasláno: 23. 8. 2013, 10:25:54
$files = glob("img/foto/*.jpg"); if (count($files) > 0 ) { echo "<div class=\"logo\"> <!-- Toto je první fotografie ze složky --> <a class=\"fancybox\" rel=\"gallery1\" href=\"img/$files[0]\" title=\"".file_get_context("txt/".sub_str($files[0],0,-3)."txt")."\"></a> </div>"; } if (count($files) > 1 ) { echo "<div class=\"hidden\">"; reset($files); next($files); while ($filename = next($files)) { echo "<a class=\"fancybox\" rel=\"gallery1\" href=\"img/$filename\" title=\"".file_get_context("txt/".sub_str($filename[0],0,-3)."txt")."\"></a>"; } echo "</div>"; } Netestoval jsem to, takže tam může být překlep či chybka. |
||
moom Profil |
Keeehi:
Děkuji moc za pomoc, ale bude někde chybka, vložil jsem to do stránky, ale žádný kód to negeneruje. Mohu vás prosím poprosit ještě o pomoc. Vlastně ani netuším jak by se generoval ten název s diakritikou, jestli z TXT souboru stejného názvu jako fotografie, nebo z názvu fotografie, kde zase bude údajně chyba s diakritikou... Uf.. ALL: Pokud to prosím umí někdo napsat, tak to rád zaplatím, dejte prosím vědět. Joker: Děkuji za pomoc. Pokud je to neprůchodné, tak jsem nahranej... Kurňa práce.. :) Já jsem chtěl vynechat hned první tři, tedy ., .. a první soubor, ketrý je již v elementu DIV LOGO Proto jsem použil $fotky[2]
Ale jak vypsat od 3 do konce na to jsou mé znalosti PHP krátké. Jeslti by to nějak nešlo spočítat vše skrze COUNT a smazat první tři, ale jak to napsat... Tedy fotografie v DIV HIDDEN Jo a jak jste to prosím v minulosti vyřešil? |
||
juriad Profil |
#9 · Zasláno: 23. 8. 2013, 11:44:19
Něco jsem v rychlosti spíchnul. Nehledá to fotky v adresáři, ale prochází jeden soubor (ve formátu JSON), v němž jsou popsané cesty i titulky.
Tento soubor je třeba upravit při přidání fotky (to stejně musíš nějak provést, protože jsme se shodli na tom, že název obrázku title obsahovat spolehlivě nemůže). /*galerie.json*/ [ {"href": "1.jpg", "title": "Popisek 1", "class": "trida"}, {"href": "druhy.jpg", "title": "Popisek druheho obrazku", "alt": "Proste neco"}, {"href": "third.jpg", "title": "Uz me nic nenapada"} ] <?php class FancyBox { public function __construct($images, $rel) { $this->images = $images; $this->rel = $rel; } private function printImg($image) { $classes = 'fancybox'; if(isset($image->class)) { $classes .= ' ' . $image->class; unset($image->class); } echo '<a class="'.$classes.'" rel="'.$this->rel.'"'; foreach ($image as $attr => $value) { echo ' ' . $attr . '="' . $value . '"'; } echo "></a>\n"; } public function printGallery() { $count = count($this->images); if($count<=0) { return; } echo "<div class=\"logo\">\n"; $this->printImg($this->images[0]); echo "</div>\n"; unset($this->images[0]); if($count<=1) { return; } echo "<div class=\"hidden\">\n"; foreach($this->images as $key => $image) { $this->printImg($image); } echo "</div>\n"; } } $galerie = json_decode(file_get_contents("galerie.json")); $galerie = new FancyBox($galerie, 'gallery1'); $galerie->printGallery(); |
||
moom Profil |
juriad: děkuji za pomoc, jdu to vyzkoušet :)
Nemůžete mně prosím poslat na vás kontakt, že bych měl třeba někdy kšeftík, který by byl normálně placený. Šikovných lidí je někdy potřeba :) |
||
Časová prodleva: 11 let
|
0