Autor Zpráva
tomsonrecord
Profil
Zdravím všechny chytré hlavy a prosím o radu začátečníkovi.
Nechávám načítat do stránky obrázky z konkrétní složky. Všechno funguje, jen se obrázky načtou v jiném pořadí, než bych předpokládal. Poradíte prosím někdo jak načíst obrázky seřazené podle názvů jpg-ů. Děkuji.
Zde je použitý kód:
<?php
$slozka = opendir("ref/"); //otevření složky
while($obrazek = readdir($slozka))
{
if($obrazek != "." && $obrazek != "..") // odstranění virtuálních objektů
{
echo "<a href=\"ref/".$obrazek."\" rel=\"lightbox[skupina]\"><img src=\"ref/".$obrazek."\"></a>";
}
}
?>
juriad
Profil
Použij scandir, případně si napřed názvy seřaď sám.
tomsonrecord
Profil
juriad:
i se scandir to řadí jpg-y pořád špatně. Jak si to myslel s tím seřazením napřed?

Předpokládal bych, že soubor 01.jpg bude jako první, 02.jpg bude jako druhý atd. Ale tak to není.
peta
Profil
Zkousel jsi to podle example 2 (http://cz1.php.net/function.scandir)?
<?php
$dir = "/tmp";
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
    $files[] = $filename;
}

sort($files);

print_r($files);

rsort($files);

print_r($files);

?>
Tez mozna example 1
<?php
$dir    = '/tmp';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);

print_r($files1);
print_r($files2);
?>
tomsonrecord
Profil
peta:
dík vyzkoušel jsem example 2
vypsalo mi to toto:

Array ( [0] => . [1] => .. [2] => 01.jpg [3] => 02.jpg [4] => 03.jpg [5] => 04.jpg [6] => 05.jpg [7] => 06.jpg [8] => 07.jpg [9] => 08.jpg [10] => 09.jpg [11] => 10.jpg )

za použití:
$dir = "ref/";
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
    $files[] = $filename;
}
 
sort($files);
print_r($files);

Je možné se prosím zbavit ještě těch virtuálních objektů a nechat vypsat pouze název souboru? Děkuji.
MrVoltz
Profil *
Nevím, proč se s tím tak obtěžuješ.

<?php
$s = scandir("ref/"); // Hodíme to do pole
sort($s); // Seřadíme to
foreach($s as $f) { // Procházíme pole, $f má při každém cyklu v sobě jméno souboru
 if($f == "." || $f == "..") continue; // Pokud je to vitruální objekt, přeskoč k dalšímu cyklu
 echo "<a href=\"ref/".$f."\" rel=\"lightbox[skupina]\"><img src=\"ref/".$f."\"></a>"; // Vypíšeme
}
?>
peta
Profil
tomsonrecord:
"Je možné se prosím zbavit ještě těch virtuálních objektů a nechat vypsat pouze název souboru? Děkuji. "
if($obrazek != "." && $obrazek != "..") // odstranění virtuálních objektů
{
Dyt to je primo tvuj kod z prvni zpravy.
juriad
Profil
Jenom poznámka, nejsou to virtuální objekty, ale je to hardlink na aktuální adresář (.) a rodičovský adresář (..). Zajišťují transparentně tu magii, že funguje "ref/../ref/./01.jpg". Ještě existuje konvence, že soubor, jehož název začíná tečkou, je skrytý. Toto dohromady může z těchto dvou souborů dělat něco extra speciálního, ale není tomu tak.
tomsonrecord
Profil
MrVoltz:
Děkuji, to funguje dobře. Obtěžuji se s tím tak, protože jsem začátečník a učím se s každým vyřešeným případem. Ještě jednou dík.
tomsonrecord
Profil
Prosím o další radu,
pokouším se kód od MrVoltz ještě použít i pro include všech souborů ze složky. Trápím se teď pro změnu s tím, že neumím include z nadřazení složky (řádek č.6).
Nejspíš mě pošlete do háje, ale snad se najde někdo, kdo poradí.
Toto mi samozřejmě nefunguje ani obdoby:
<?php
$s = scandir("ref/"); // Hodíme to do pole
sort($s); // Seřadíme to
foreach($s as $f) { // Procházíme pole, $f má při každém cyklu v sobě jméno souboru
 if($f == "." || $f == "..") continue; // Pokud je to vitruální objekt, přeskoč k dalšímu cyklu
include "ref/"$f;
}
?>
Děkuji.
peta
Profil
tomsonrecord: Smutne, nezalozil jsi to jako nove tema, ikdyz to je nove tema.
Neumis napsat ../ pro nadrazenou slozku pred adresu? Pripadne ne uplne chapu, oc se pokousis. Co treba vypsat strukturu adresare, vyznacit v ni, kde je umisten kod programu, ktere soubory to ma includovat (aspon 1-3)?

* inc/a.php
* inc/b.php
* inc/c.php
* program.php
$dir = "inc/";
$s = scandir($dir);
...
include $dir.$f; // tady nemas tecku pro spojovani. To by ale zapnute error_reporting() asi nahlasilo, takze asi o tom vis.
(Ten zapis je ale pro podslozku inc/, ne pro nadrazenou slozku. Pro nadrazenou by tam bylo $dir = "../inc/";)
tomsonrecord
Profil
peta:
pardon a nebuď smutný, příště založím nové téma. Teprve se tu s tím seznamuji, myslím aj s diskuzí. Každopádně děkuji, tvé rady mi pomohly.

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: