Antworten auf deine Fragen:
Neues Thema erstellen

Reihenfolge durcheinanderwürfeln

sokie

Mod | Web

AW: Reihenfolge durcheinanderwürfeln

autsch, sorry... o man - tut mir leid. da hab ich einfach nicht nachgedacht und fehler gepostet, danke fürs klären Duddle.
 

H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Auch von mir ein riesiges Dankeschön an Duddle, jetzt funktioniert es einwandfrei.

Nun stelle ich mir bzw. Euch Profis schon wieder eine neue Frage, die mit diesem Code zu tun hat:

Könnte man den Code noch dahingehend optimieren, das abhängig vom Dateinamen ein bestimmtes Bildverzeichnis gewählt wird?

Derzeit heißen die unterschiedlichen Galerien so:
  • galerie-sport.php
  • galerie-theater.php
etc.

Wenn es nun z.B. möglich Wäre in dem Code der die 10 zufälligen Bilder ausgibt gleich mit anzugeben:

wenn Dateiname=galerie-sport.php - dann wähle Verzeichnis rubrik_001

u.s.w.

Ja wenn das ginge, dann könnte ich in jede Datei den selben PHP Code einbauen, bzw. per Include einbinden ohne das man jemals etwas ändern müsste.

Vielen Dank!
 

cebito

undefined

AW: Reihenfolge durcheinanderwürfeln

Ja wenn das ginge, dann könnte ich in jede Datei den selben PHP Code einbauen, bzw. per Include einbinden ohne das man jemals etwas ändern müsste.
Nein, dann bräuchtest du nur eine Seite (galerie.php) die würdest du dann z.B. so aufrufen
PHP:
<a href="galerie.php?kategorie=sport">Sport</a>
<a href="galerie.php?kategorie=theater">Theater</a>
jetzt kannst du in "galerie.php" per
PHP:
$_GET["kategorie"]
ermitteln, welcher Wert dort übergeben wurde und dementsprechend weiter verfahren. Wichtig ist, das du den Wert auf seine Gültigkeit überprüfst.
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Nein, dann bräuchtest du nur eine Seite (galerie.php) die würdest du dann z.B. so aufrufen
PHP:
<a href="galerie.php?kategorie=sport">Sport</a>
<a href="galerie.php?kategorie=theater">Theater</a>
jetzt kannst du in "galerie.php" per
PHP:
$_GET["kategorie"]
ermitteln, welcher Wert dort übergeben wurde und dementsprechend weiter verfahren. Wichtig ist, das du den Wert auf seine Gültigkeit überprüfst.

Das ist ja interessant, das wäre ja ein Idee...

Ob ich das hinbekomme?
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Okay, dann will ich mal probieren...

Ich habe ja nun Dank Euch diesen tollen kurzen Code:
PHP:
  $bilder = glob("img/galerie/rubrik_006/*.jpg");
shuffle($bilder);
for ($i = 0; $i<10; $i++){
  echo '<img src="'.$bilder[$i].'" />'."\n"; //vereinfacht
}

wo muss die Abfrage:

PHP:
$_GET["kategorie"]

denn Platziert werden um jeweils die richtigen Bilder aus dem entsprechenden Verzeichnis zu laden?

Da gehört doch bestimmt noch etwas mehr dazu als nur $_GET oder?

Hilfe ich bin so ein Anfänger, möchte das aber gern hinbekommen.
 

Doitsu

Aktives Mitglied

AW: Reihenfolge durcheinanderwürfeln

Na ja, du machst dir jetzt ein Array, welches als key die Rubriken erhaellt und als value den Ordner, wo die Bilder sind.
Sprich:
PHP:
$array = array(
  'sport' => 'rubrik_001',
  'theater' => 'rubrik_002'
);

Nun schaust du per IF-Bedingung ob es diese Rubrik gibt, also
PHP:
if(isset($array[$_GET['kategorie']])) {
  $bilder = glob("img/galerie/" . $array[$_GET['kategorie']] . "/*.jpg");
 // restlicher Code fuer die Galerie ..
}

Edit:
Und dann musst du im else-Zweig natuerlich auch eine Fehlermeldung ausgeben, also wenn es die Rubrik nicht gab ..
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Vielen Dank Doitsu, das funktioniert einwandfrei!

Nun habe ich noch ein anderes Problem, welches sich daraus ergibt, das ich immer nur 10 Bilder laden lasse. Dies ist zwar Ladezeitenfreundlich aber nicht praktikabel wenn man sich ein bestimmtes Bild ansehen möchte.

Was müsste ich ändern, damit jeweils alle Bilder aus dem Kategorieordner angezeigt werden? Egal ob da 5 Bilder drinnen sind oder 47?

Hier ist der bisherige
PHP:
$array = array(
'sport' => 'rubrik_001',
'buehne' => 'rubrik_002',
'reise' => 'rubrik_003',
'natur' => 'rubrik_004',
'industrie' => 'rubrik_005',
'misc' => 'rubrik_006'
);

if(isset($array[$_GET['kategorie']])) {
$bilder = glob("img/galerie/" . $array[$_GET['kategorie']] . "/*.jpg");
shuffle($bilder);
for ($i = 0; $i<10; $i++){
echo '<img src="'.$bilder[$i].'" />'."\n"; //vereinfacht
}
}
 

SineTempore

Nicht mehr ganz neu hier

AW: Reihenfolge durcheinanderwürfeln

Überleg doch mal was dein Code macht. Vielleicht kommst du ja dann selbst auf die Lösung

PHP:
//diese rubriken gibt es
$array = array(
'sport' => 'rubrik_001',
'buehne' => 'rubrik_002',
'reise' => 'rubrik_003',
'natur' => 'rubrik_004',
'industrie' => 'rubrik_005',
'misc' => 'rubrik_006'
);

//ist in der $_GET variable eine entsprechende kategorie gesetzt
if(isset($array[$_GET['kategorie']])) {

//hohlst du dir *alle* bilder aus dieser
$bilder = glob("img/galerie/" . $array[$_GET['kategorie']] . "/*.jpg");

//mischst alle Bilder in ihrer Reihenfolge
shuffle($bilder);

//führst für die Bilder 0 - 9 (ein array fängt bei 0 an zu zählen) den folgenden Code aus
for ($i = 0; $i<10; $i++){

// gibst das bild aus
echo '<img src="'.$bilder[$i].'" />'."\n"; //vereinfacht

}
}
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Überleg doch mal was dein Code macht. Vielleicht kommst du ja dann selbst auf die Lösung

Du wirst lachen, das habe ich sogar probiert und dachte mir ich lasse den Teil der offenbar für das auszählen der 10 Bilder zuständig ist weg, das sah dann so aus:

PHP:
//diese rubriken gibt es
$array = array(
'sport' => 'rubrik_001',
'buehne' => 'rubrik_002',
'reise' => 'rubrik_003',
'natur' => 'rubrik_004',
'industrie' => 'rubrik_005',
'misc' => 'rubrik_006'
);
 
//ist in der $_GET variable eine entsprechende kategorie gesetzt
if(isset($array[$_GET['kategorie']])) {
 
//hohlst du dir *alle* bilder aus dieser
$bilder = glob("img/galerie/" . $array[$_GET['kategorie']] . "/*.jpg");
 
//mischst alle Bilder in ihrer Reihenfolge
shuffle($bilder);
 
 
// gibst das bild aus
echo '<img src="'.$bilder[$i].'" />'."\n"; //vereinfacht
 
}
Da wurden dann aber keine Bilder angezeigt, daher ist an meiner Denkweise wohl irgendwas falsch.
 

Chriss1987

me.drinkCoffee();

AW: Reihenfolge durcheinanderwürfeln

Hi,

in deinem Versuch initialisierst du die Variable $i nicht. Was du also brauchst, ist eine Schleife, die alle Elemente im Array durchgeht (z.B. foreach, oder for mit entsprechendem Wert).

Du kannst das aber auch mit Parametern regeln (z.B. wenn du nur ein paar zufällige Bilder ausgeben willst, oder alle Bilder der Reihenfolge nach anzeigen möchtest)

Dafür ein bearbeitetes Script auf Grundlage von SineTempore:
PHP:
<?php
//diese rubriken gibt es
$array = array(
    'sport' => 'rubrik_001',
    'buehne' => 'rubrik_002',
    'reise' => 'rubrik_003',
    'natur' => 'rubrik_004',
    'industrie' => 'rubrik_005',
    'misc' => 'rubrik_006'
);

//ist in der $_GET variable eine entsprechende kategorie gesetzt
if(isset($array[$_GET['kategorie']]))
{
    //hohlst du dir *alle* bilder aus dieser
    $bilder = glob("img/galerie/" . $array[$_GET['kategorie']] . "/*.jpg");

    // --- zufällige Anordnung oder nicht => neuer Parameter
    if(isset($_GET['shuffle']))
    {
        //mischst alle Bilder in ihrer Reihenfolge
        shuffle($bilder);
    }
    
    // --- => neuer Parameter für die Anzahl an Bildern
    // --- wenn gesetzt, nur die gewünschte Anzahl an Bildern ausgeben
    if(isset($_GET['count'])
    {
        //führst für die Bilder 0 - 9 (ein array fängt bei 0 an zu zählen) den folgenden Code aus
        for ($i = 0; $i<$_GET['count']; $i++)
        {
            // gibst das bild aus
            echo '<img src="'.$bilder[$i].'" />'."\n"; //vereinfacht
        }
    }
    else
    {
        // --- alle Bilder ausgeben
        foreach($bilder AS $bild)
        {
            echo '<img src="'.$bild.'" />'."\n"; //vereinfacht
        }
    }
}
?>

Beispiel-URL's:
Code:
galerie.php?kategorie=sport&shuffle&count=10
    => Kategorie Sport (Ordner 'rubrik_001'), 10 zufällige Bilder anzeigen

galerie.php?kategorie=reise
    => Kategorie Reise (Ordner 'rubrik_003'), alle Bilder in normaler Reihenfolge anzeigen
Schöne Grüße aus dem Sauerland!
Chriss

P.S.: neue Kommentare sind mit // --- statt mit // gekennzeichnet
 

Doitsu

Aktives Mitglied

AW: Reihenfolge durcheinanderwürfeln

.. man sollte dann aber auch testen, ob die uebergebene Variable ($_GET['count']) auch wirklich eine Zahl ist .. (http://de.php.net/is_numeric)
Dazu ist es sicherlich sehr interessant, wenn im Ordner 10 Bilder sind, ich als count allerdings 50 angebe ..
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Hi,

in deinem Versuch initialisierst du die Variable $i nicht. Was du also brauchst, ist eine Schleife, die alle Elemente im Array durchgeht (z.B. foreach, oder for mit entsprechendem Wert).

Du kannst das aber auch mit Parametern regeln (z.B. wenn du nur ein paar zufällige Bilder ausgeben willst, oder alle Bilder der Reihenfolge nach anzeigen möchtest)

Dafür ein bearbeitetes Script auf Grundlage von SineTempore:
...

Hallo Chris, das funktioniert ja einwandfrei

Ich habe jetzt die Variante ohne Count dafür mit Shuffle das ist sehr praktikabel.

.. man sollte dann aber auch testen, ob die uebergebene Variable ($_GET['count']) auch wirklich eine Zahl ist .. (PHP: is_numeric - Manual)
Dazu ist es sicherlich sehr interessant, wenn im Ordner 10 Bilder sind, ich als count allerdings 50 angebe ..
Momentan kann ich das sicher vernachlässigen, da ich keinen Count benutze, aber ich muss gestehen, das die Seite welche Du referenzierst für mich nicht verständlich genug ist um eine solche Überprüfung selbst einzubauen...

DANKE!
 

Chriss1987

me.drinkCoffee();

AW: Reihenfolge durcheinanderwürfeln

@Doitsu: ja, da hst du natürlich recht, hatte ich ganz vergessen...^^
Hier nochmal eine angepasste Version (der Vollständigkeitshalber):
PHP:
<?php
//diese rubriken gibt es
$array = array(
    'sport' => 'rubrik_001',
    'buehne' => 'rubrik_002',
    'reise' => 'rubrik_003',
    'natur' => 'rubrik_004',
    'industrie' => 'rubrik_005',
    'misc' => 'rubrik_006'
);

//ist in der $_GET variable eine entsprechende kategorie gesetzt
if(isset($array[$_GET['kategorie']]))
{
    //hohlst du dir *alle* bilder aus dieser
    $bilder = glob("img/galerie/" . $array[$_GET['kategorie']] . "/*.jpg");

    // --- zufällige Anordnung oder nicht => neuer Parameter
    if(isset($_GET['shuffle']))
    {
        //mischst alle Bilder in ihrer Reihenfolge
        shuffle($bilder);
    }
    
    // --- => neuer Parameter für die Anzahl an Bildern
    // --- wenn gesetzt, nur die gewünschte Anzahl an Bildern ausgeben
    if(isset($_GET['count'] && is_numeric($_GET['count']) && $_GET['count'] <= count($bilder))
    {
        //führst für die Bilder 0 - 9 (ein array fängt bei 0 an zu zählen) den folgenden Code aus
        for ($i = 0; $i<$_GET['count']; $i++)
        {
            // gibst das bild aus
            echo '<img src="'.$bilder[$i].'" />'."\n"; //vereinfacht
        }
    }
    else
    {
        // --- alle Bilder ausgeben
        foreach($bilder AS $bild)
        {
            echo '<img src="'.$bild.'" />'."\n"; //vereinfacht
        }
    }
}
?>

Schöne Grüße aus dem Sauerland!
Chriss
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

PHP:
 <?php 
    $bilder = glob("img/galleries/event/*.jpg");
    $bild = array_rand($bilder, 10);
    shuffle($bild);
    foreach ($bild as $zufallsbild)
        {
            $bildinfo = getimagesize ($bilder[$zufallsbild]);
            echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n";
        }
?>

Ich habe hier das Problem, dass laut HTML-Code die Bild-URL wie folgt lautet:

HTML:
http://www.domain.de/dies/ist/die/url/zur/seite/bilder/test/zufaelligebilderausgabe/bild4.jpg

Das ist natürlich nicht korrekt. Es wird also einfach an die vollständige Seiten-URL die vom Root-Verzeichnis ausgehende Bild-URL angehängt.

Die korrekte Bild-URL wäre

HTML:
http://www.domain.de/bilder/test/zufaelligebilderausgabe/bild4.jpg

So werden die ausgelesenen Bilder nicht gefunden und nicht dargestellt. Wie könnte ich das ändern?
 
Zuletzt bearbeitet:

Chriss1987

me.drinkCoffee();

AW: Reihenfolge durcheinanderwürfeln

Hi,

dein Code sieht genau so aus wie der von cebito gepostete? Dann verwendest du eine alte Version, des hier vorgestellten Codes, da der noch nicht ganz optimal war (bzgl. array_rand...), das nur btw.

Verwendest du in deinem HTML-Code die meta-Angabe base?

Ansonsten einfach mal den Code posten! ;)

Schöne Grüße aus dem Sauerland!
Chriss
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Hey Chriss,

ich verwende diesen Code:
PHP:
<?php  
    $bilder = glob("bilder/test/zufaelligebilderausgabe/*.jpg"); 
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        { 
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
            echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n"; 
        } 
?>

Das Bilder-Verzeichnis ist also
HTML:
http://www.domain.de/bilder/test/zufaelligebilderausgabe/

Hier der Link: Testseite

Die Bildergröße wird mit 125 x 125 pixeln richtig ausgelesen, allerdings versucht er die Bilder in einem falschen Verzeichnis zu suchen?!
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Relative Pfade arbeiten relativ zur aufrufenden Funktion. Ein Script im Ordner foobar wird bilder/... relativ zu sich in foobar/bilder/... suchen.


Duddle
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Ja genau das ist mein Problem :)

Wie schaffe ich es nun, dass nur bilder aus einem bestimmten verzeichnis, unabhängig vom pfad in dem das skript ausgeführt wird, eingelesen werden? :uhm:
 
Zuletzt bearbeitet:

Myhar

Hat es drauf

AW: Reihenfolge durcheinanderwürfeln

Indem du absolute Pfade angibst.
Code:
http://www.meinServer.at/bilder/ichbinAbsolut.png
 
Zuletzt bearbeitet:

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Das heißt ich schreibe:

PHP:
<?php   
    $bilder = glob("http://www.meinServer.at/bilder/test/zufaelligebilderausgabe/*.jpg");  
    $bild = array_rand($bilder, 2);  
    shuffle($bild);  
    foreach ($bild as $zufallsbild)  
        {  
            $bildinfo = getimagesize ($bilder[$zufallsbild]);  
            echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n";  
        }  
?>


So einfach scheint es dann aber auch nicht zu sein :( bekomme folgende fehlermeldung?

Code:
Warning: array_rand() [function.array-rand]: First argument has to be an array in /www/ ... /includes/runtime.php(42) : eval()’d code on line 3
Warning: shuffle() expects parameter 1 to be array, null given in /www/ ... /includes/runtime.php(42) : eval()’d code on line 4
Warning: Invalid argument supplied for foreach() in /www/ ... /includes/runtime.php(42) : eval()’d code on line 5

Was müsste ich am code oben ändern?!

:(
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.636
Beiträge
1.538.485
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben