Autor Zpráva
moom
Profil
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
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
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
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
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
$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
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 :)

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