Autor Zpráva
soucekgns
Profil
Potřeboval bych ze složky vypsat pouze určitý počet souborů (např. 3)
Mám tento script, ale nevím jak ho upravit, zkoušel jsem Odkaz, ale to nefunguje. Díky za rady
$slozka = opendir("albums/".$album->thumbs."/");
while ($soubor = readdir($slozka)) {
  if ($soubor != "." && $soubor != "..") {  
  }
}
Michal Benda
Profil
Jako třeba jenom první tři soubory? Moc teda nevím k čemu je to dobré, ale nemohlo by to být takto?

$slozka = opendir("albums/".$album->thumbs."/");
$x=1;
while ($soubor = readdir($slozka)) {
  if ($soubor != "." && $soubor != "..") {
    echo $soubor."<br />";
    $x++;
    
    if($x == 3){
      break;
    }
  }
}


Nevím jestli chceš vypisovat jenom názvy a nebo obsahy těch souborů, ale postup by byl obdobný...
soucekgns
Profil
Michal Benda:
nevím k čemu je to dobré
:-) k vytvoření odkazu na fotogalerii

Díky, to postačí
Taps
Profil
soucekgns:
zkus níže uvedené
<?
$slozka = opendir("albums/".$album->thumbs."/");
while ($soubor = readdir($slozka)) {
  if ($soubor != "." && $soubor != "..") { 
    $nazev[]=$soubor;
   
    }

}
shuffle($nazev);

echo $nazev[0];
echo $nazev[1];

?>
soucekgns
Profil
to funguje.. s menší úpravou :-), diky
shuffle($nazev);
for ($i = 0; $i < 10; $i++) {
    echo $nazev[$i];
}
Rellik
Profil
EDIT: příspěvek odebrán aby nemátl... Funkční řešení je v dalším mé odpovědi...
Alphard
Profil
Rellik:
$celkove_zaznamu = MySQL_Num_Rows(mysql_query('select * from galerie'));
Tak tohle snad ani neukazujte...

Zbytek nebudu ani číst, ale nestačilo by něco jako tohle?
select * from galerie order by rand() limit 10
Rellik
Profil
Alphard:
„$celkove_zaznamu = MySQL_Num_Rows(mysql_query('select * from galerie'));“
Tak tohle snad ani neukazujte...
Jo je možné, že je to prasárna, je to script z dob mých začátků a jelikož to funguje, tak to nějak neřeším... ;-) Jinak ta DB je tam jen na to aby se doplnila složka z fotkama. Fotky to pak náhodně ukazuje z té složky. V podstatě tam ta DB nemusí vůbec být...
Nicméně cituji: Funkci mysql_num_rows je vhodné použít pouze v případě, kdy data z tabulky budeme tak jako tak potřebovat... Takže nevidím důvod to tak nepoužít, protože ty data to stejně hned vypisuje. kdyby šlo pouze o vypsání počtu záznamů, tak beru, že by byl vhodnější ten druhý zápis...
Alphard
Profil
Rellik:
Nicméně cituji: Funkci mysql_num_rows je vhodné použít pouze v případě, kdy data z tabulky budeme tak jako tak potřebovat... Takže nevidím důvod to tak nepoužít
Naprosto jste to nepochopil. Vy nevypisujete data získaná tím dotazem, po zjištění počtu řádků vše zahodíte. Co to dělá dál jsem se ani nesnažil zjistit, ale vypadá to na šílenost, která by šla zkrátit na pět řádků.
Když už sem dáváte staré skripty, aspoň to nechte v editoru přeformátovat, v tomhle se nedá vyznat.

soucekgns:
zkoušel jsem Odkaz, ale to nefunguje
Jak nefunguje, vypisuje se nějaká chyba?
Rellik
Profil
Alphard:
, v tomhle se nedá vyznat.
vyznat se v tom dá. Jen se chce podívat dál..
z té databáze se zjistí počet vytvořených fotogalerií, z toho se pak náhodně jedna vybere a dosadí k otevření složky ze které se načtou všechny vložené fotografie z nichž se opět náhodně jenom jedna zobrazí. A pochybuju že by se to celé vlezlo na 5 řádků kódu.. Jo a ještě sem zapomněl že se zároveň přitom všem generuje minuatura zrovna zobrazené fotky..
Jinak myslím není problém si to ořezat podle potřeby...

<?php
		$id_galerie = './slozka/'; //složka ze které má být náhodný obrázek zobrazen
		$pocet = 0;

if($ra = opendir($id_galerie)) {
		$vypis_file = array();

	while ($soubor_file = readdir ($ra))
			{
				if($soubor_file!="."&&$soubor_file!=".."&&!is_dir($soubor_file))
					{
						$pocet++;
						$nahodny = rand(1,$pocet);
						$vypis_file[$nahodny] = $soubor_file;
					}
			}
			}

	while (list($celkem, $nazev) = each ($vypis_file))
			{
				$vytvor_nahled = "<img src=\"".$id_galerie."/".$nazev."\" alt=\"".$nazev."\" />";

				if (($celkem >= 1) and ($celkem < 2))
					{
						echo $vytvor_nahled."\n";
					}
			}
			echo "<br />Celkový počet fotek je: ".$pocet;
	closedir($ra);
?> 
Tori
Profil
Rellik:
Sice jste nežádal o radu, ale když už to sem dáváte jako řešení, tak mi to nedá:

Středník za podmínkou (ř.5) způsobí, že se následující řádek provede i v případě, že je podmínka vyhodnocena jako false. Předpokládám, že jste chtěl napsat : anebo { (a odpovídající ukončení za řádkem 28).
Návratovou hodnotu u readdir (první blok while) bych porovnávala pomocí ===, vysvětlení vizte v manuálu v části o návratových hodnotách.
while (($soubor_file = readdir($ra)) !== false)

Na ř.10 stačí ověření pomocí !is_dir() - "." a ".." jsou přeci také složky.
Ještě by šlo zabránit chybovým hláškám v případě špatně zadané cesty:
if (is_dir($id_galerie))  {
  $ra = opendir($id_galerie);
Alphard
Profil
Rellik:
vyznat se v tom dá. Jen se chce podívat dál..
Řečnický obrat, musíte uznat, že v podobě [#10] je to mnohem přehlednější.

Smazal jste mi původní kód, takže na to nelze snadno reagovat, pokusím se ale odhadnout situaci.
Máte fotogalerii postavenou tak, že jednotlivé galerie jsou v samostatných adresářích a chcete vybrat jednu náhodnou fotku.

$dirs = glob('img/*', GLOB_ONLYDIR);
shuffle($dirs); // doplňuji, rychlejší by bylo použít array_rand()
$images = glob("$dirs[0]/*.jpg");
shuffle($images);
echo "<img src=\"$images[0]\"><br>\nCelkový počet: ".count($images);
Rellik
Profil
Tori:
Středník za podmínkou (ř.5) způsobí, že se následující řádek provede i v případě, že je podmínka vyhodnocena jako false
Jj díky za upozornění. Já tam měl původně chybovou hlášku když galerie neexistovala. Chybka se vloudila - kód sem opravil.. Je plně funkční.
Alphard:
Předchozí řešení nebudem dál řešit. ono je to trochu složitější... část popisu jak mi to funguje sem psal v minulém příspěvku. Ale pro pořádek zopakuju:
1/ v DB mám uložené názvy vytvořených složek galerie (ty se vytváří v administraci při vytvoření nové galerie)
2/ script, který sem smazal má několik úkolů:
A - z databáze náhodně vybrat jednu složku galerie
B - zjistit jestli galerie obsahuje už nějaké fotky
C - pokud ano tak ze složka vybrat náhodně jeden obrázek
D - zjistit, jestli už je pro daný obrázek vygenerována miniatura a podle toho ji zobrazit a nebo vytvořit jako odkaz na patřičnou galerii na webu
E - vypsat počet fotek a název galerie

Teď snad uznáte, že to na těch 5 řádků opravdu nejde... A dál to neřešme... :-)

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