Seite 1 von 1

Bilder aus Ordner laden

Verfasst: 04.03.2010, 19:06
von dropsi
Hallo,

ich habe ein Script gefunden, mit dem ich Bilder aus einem Order anzeigen lassen kann. Nun werden die Bilder nacheinander angezeigt und beim Klick öffnet sich das Bild in der Greybox (ähnlich lightbox), wo ich gleich zum nächsten Bild schalten kann.
Jetzt möchte ich aber nicht alle Bilder aufgelistet haben, sondern nur das 1. Bild und die anderen z.B. mit display:none ausblenden. Hintergrund ist, dass der Benutzer in der Greybox weiterschalten soll und auf der eigentlichen Seite nicht 100 Bilder angezeigt werden.

Hier der Code:

Code: Alles auswählen

[{php}]
$fh = opendir("./out/basic/1/img/wysiwigpro/diagrams/".$this->_tpl_vars['product']->oxarticles__oxartnum->value."/"); //Verzeichnis
$verzeichnisinhalt = array();
while (true == ($file = readdir($fh)))
{
        if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif")) //Abfrage nach gültigen Datenformat        
        {        
            $verzeichnisinhalt[] = $file;
        }    
}

echo "<div id='galerie';>";
for&#40;$i=0;$i<count&#40;$verzeichnisinhalt&#41;;$i++&#41;    
&#123;

    echo "<a rel='gb_imageset&#91;nice_pics&#93;' href=./out/basic/1/img/wysiwigpro/diagrams/".$this->_tpl_vars&#91;'product'&#93;->oxarticles__oxartnum->value."/".$verzeichnisinhalt&#91;$i&#93;."'>Bilder anzeigen</a>"; 

&#125;
echo "</div>";
&#91;&#123;/php&#125;&#93;
Wie müsste jetzt die Ausgabe aussehen, dass zwar alle Bilder geladen werden, aber nur das erste angezeigt wird?

Danke im Voraus.

PS: Bin kein Programmierer.

Verfasst:
von

Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Verfasst: 04.03.2010, 21:48
von 800XE
alt

Code: Alles auswählen


echo "<div id='galerie';>";
for&#40;$i=0;$i<count&#40;$verzeichnisinhalt&#41;;$i++&#41;   
&#123;
    echo 
&#125;
echo "</div>"; 
neu

Code: Alles auswählen


echo Bild1
echo "<div id='galerie';>";
for&#40;$i=1;$i<count&#40;$verzeichnisinhalt&#41;;$i++&#41;   
&#123;
    echo 
&#125;
echo "</div>"; 
also
Bild 1 (=Bild 0 im Array) vor der "for" ausgeben
"for" startet mit 1 und nicht mit 0

Verfasst: 04.03.2010, 23:27
von dropsi
Bei der Methode müsste ich nun aber wissen wie das erste Bild heißt, oder? Das weiss ich nur leider nicht immer.

Verfasst:
von

Re: Bilder aus Ordner laden

Verfasst: 04.03.2010, 23:45
von Mork vom Ork
dropsi hat geschrieben:Jetzt möchte ich aber nicht alle Bilder aufgelistet haben, sondern nur das 1. Bild und die anderen z.B. mit display:none ausblenden.
[…]
PS: Bin kein Programmierer.
Wäre aber im Grunde ein schöner Einstieg ins Programmieren, weil eine leichte Aufgabe, die du oben in einem kurzen und verständlichen Satz beschreiben konntest.

Leider hat die Sache einen Haken. Nachfolgender Code-Teil ist deine Galerie bzw. damit wird die HTML-Galerie aufgebaut:

Code: Alles auswählen

echo "<div id='galerie';>";
for&#40;$i=0;$i<count&#40;$verzeichnisinhalt&#41;;$i++&#41;    
&#123;

    echo "<a rel='gb_imageset&#91;nice_pics&#93;' href=./out/basic/1/img/wysiwigpro/diagrams/".$this->_tpl_vars&#91;'product'&#93;->oxarticles__oxartnum->value."/".$verzeichnisinhalt&#91;$i&#93;."'>Bilder anzeigen</a>"; 

&#125;
echo "</div>";
Das Problem ist, dass du in diesem Teil (und auch im restlichen Code) nirgends ein <img>-Element hast, mit dem die besagten 100 Bilder angezeigt werden, die du nicht angezeigt haben möchtest.
Wäre hier ein <img>, hättest du einfach den Zähler i der for-Schleife, mit dem die Einträge des Verzeichnisinhaltes durchlaufen werden, in einen Vergleich setzen müssen. Der Zähler beginnt mit 0 (for ($i=0;) und erhöht sich bei jeder Runde um 1 ($i++). Ist der Zähler i > 0, d.h. ab dem zweiten Bild, dann gebe beim <img>-Element zusätzlich style="display:none" aus.
Ich denke, das Prinzip ist auch für dich als Nichtprogrammierer leicht nachvollziehbar. Leider ist es in diesem Fall nicht direkt umsetzbar, da du den falschen Code zitiert hast.

Deine Galerie müsste noch eine zweite Hälfte haben, welche in Javascript verfasst ist (das da oben ist PHP). In dieser Hälfte müsste die Änderung durchgeführt werden.
Höchstwahrscheinlich wird auch dort wieder, wie oben auch, eine for-Schleife durchlaufen, diesmal über alle Kindelemente des Galerie-Blocks. Auch dort wäre besagter Vergleich des Schleifenzählers einzusetzen, die Vorgehensweise ist identisch.
Vielleicht bekommst du es mit diesem Hinweis ja schon ansatzweise selbst raus, ansonsten frage nochmal (mit dem Javascript-Code).

Verfasst: 04.03.2010, 23:55
von dropsi
Das ist der einzige Code, den ich habe. Die Bilder werden in der jetzigen Form ja nicht direkt als Bild angezeigt, sondern als Link zum Bild. Jeder Link hat den Zusatz "rel='gb_imageset[nice_pics]'" - was die "Greybox" startet. Nun soll also nur der Link vom ersten Bild angezeigt werden und die anderen nicht.

Verfasst: 05.03.2010, 01:02
von Mork vom Ork
dropsi hat geschrieben:Die Bilder werden in der jetzigen Form ja nicht direkt als Bild angezeigt, sondern als Link zum Bild. Jeder Link hat den Zusatz "rel='gb_imageset[nice_pics]'" - was die "Greybox" startet. Nun soll also nur der Link vom ersten Bild angezeigt werden und die anderen nicht.
Ach so, ich hatte aus deiner Aussage, dass „auf der eigentlichen Seite nicht 100 Bilder angezeigt werden“ sollen, geschlossen, da würden auch wortwörtlich Bilder angezeigt.

Du möchtest also die <a>-Teile weg haben – dann haben wir alles, was notwendig ist. Die verantwortliche Schleife hatte ich ja schon gezeigt:

Code: Alles auswählen

echo "<div id='galerie';>"; 
for&#40;$i=0;$i<count&#40;$verzeichnisinhalt&#41;;$i++&#41;    
&#123; 
    echo "<a rel='gb_imageset&#91;nice_pics&#93;' href=./out/basic/1/img/wysiwigpro/diagrams/".$this->_tpl_vars&#91;'product'&#93;->oxarticles__oxartnum->value."/".$verzeichnisinhalt&#91;$i&#93;."'>Bilder anzeigen</a>"; 
&#125; 
echo "</div>";
Im Feld $verzeichnisinhalt stehen sämtliche Bilder, $i ist der Zähler, mit dem auf die einzelnen Einträge zugegriffen wird.

Du möchtest, dass ab dem zweiten Bild display:none ausgegeben wird. Der Zähler startet bei 0, ab dem zweiten Bild ist der Zähler logischerweise größer 0. Ergo:

Code: Alles auswählen

echo "<div id='galerie';>"; 
for&#40;$i=0;$i<count&#40;$verzeichnisinhalt&#41;;$i++&#41;    
&#123; 
    echo "<a rel='gb_imageset&#91;nice_pics&#93;' href=./out/basic/1/img/wysiwigpro/diagrams/".$this->_tpl_vars&#91;'product'&#93;->oxarticles__oxartnum->value."/".$verzeichnisinhalt&#91;$i&#93;."'";
    if &#40;$i > 0&#41; &#123;
        echo " style='display&#58;none'";
    &#125;
    echo ">Bilder anzeigen</a>"; 
&#125; 
echo "</div>";
Die ursprüngliche echo-Ausgabe habe ich in zwei Teile getrennt, um dazwischen in das <a>-Element das style-Attribut ausgeben zu können, und zwar nur (if), falls i > 0.

Verfasst: 05.03.2010, 01:58
von dropsi
Super, genau das war es!
Danke!

Verfasst: 05.03.2010, 11:38
von 800XE
@Mork

ich hatte garnicht drauf geachtet das die Bilder garnicht angezeigt werden ...
... nur die ForNext gesehen
= ersten Durchlauf der Fornext vor die ForNext verlagern und eben was Anderes ausgeben


wie funktioniert diese "GrayBox" (JavaScript)
Scannt die den HTML und ermittelt daraus die Bilder ....
.... oder hat GrayBox diese Infos in einem Anderen Ort
wenn GrayBox die Infos an einem Anderen Ort hat ist es blödsinn das man die Bilder 2-letztes überhaupt irgendwie(display:none) ausgibt

also @dropsi
Die ForNext einfach mal rauswerfen

Code: Alles auswählen

echo "<div id='galerie';>";
for&#40;$i=0;$i<count&#40;$verzeichnisinhalt&#41;;$i++&#41;   
&#123;
    echo "<a rel='gb_imageset&#91;nice_pics&#93;' href=./out/basic/1/img/wysiwigpro/diagrams/".$this->_tpl_vars&#91;'product'&#93;->oxarticles__oxartnum->value."/".$verzeichnisinhalt&#91;$i&#93;."'";
    if &#40;$i > 0&#41; &#123;
        echo " style='display&#58;none'";
    &#125;
    echo ">Bilder anzeigen</a>";
&#125;
echo "</div>";
wir zu

Code: Alles auswählen

echo "<div id='galerie';>";

$i=0;
    echo "<a rel='gb_imageset&#91;nice_pics&#93;' href=./out/basic/1/img/wysiwigpro/diagrams/".$this->_tpl_vars&#91;'product'&#93;->oxarticles__oxartnum->value."/".$verzeichnisinhalt&#91;$i&#93;."'";
    echo ">Bilder anzeigen</a>";

echo "</div>";
sollte eigentlich ausreichen

Verfasst: 05.03.2010, 11:42
von 800XE
ähm

Code: Alles auswählen

    echo "<a rel='gb_imageset&#91;nice_pics&#93;'
gibt das ein follow oder nofollow?
oder? steht dort vielleicht was für GrayBox drin, worüber die Bilder angesprochen werden können ....
... normal funktioniert das "Ansprechen" ja über "id='objectname'"

Verfasst: 05.03.2010, 17:24
von dropsi
@800XE

Habe deine Variante jetzt noch nich getestet aber somit würden doch wieder alle Links angezeigt werden oder? Bzw. wenn nicht, dann würden diese ja auch nicht im Quelltext auftauchen oder habe ich hier einen Denkfehler?

Die Greybox sucht nach Inhalten mit rel='gb_imageset' (warum gerade "rel" weiss ich nicht, aber es funktioniert) und macht daraus eine eigene Galerie. Daher müssen die Links im Quelltext stehen .. aber halt nicht sicherbar für die Benutzer, da diese ja in der Greybox(lightbox klone) weiterblättern sollen.

Verfasst: 05.03.2010, 19:54
von Mork vom Ork
dropsi hat geschrieben:@800XE

Habe deine Variante jetzt noch nich getestet aber somit würden doch wieder alle Links angezeigt werden oder?
Nein, dann hast du nur noch ein einzelnes Bild in der kompletten Galerie, die anderen werden ja nicht mehr ausgegeben. Den Test kannst du dir sparen.

Es ist zwar nicht meine Art, mit Schiet nach anderen zu werfen, aber was der gute Mann von sich zu geben versucht, ist in aller Regel entweder wirres Kauderwelsch ohne Sinn und Verstand, oder falsch. Oder beides.

Verfasst: 05.03.2010, 22:50
von 800XE
dropsi hat geschrieben:Die Greybox sucht nach Inhalten mit rel='gb_imageset' (warum gerade "rel" weiss ich nicht, aber es funktioniert)
Was sagen html oder css Validatoren wenn du

<img src="" meineInfo="" ...

Beschweren die sich "ungültiger Parameternamen meineInfo"?

Den Parameternamen "rel" den gibt es, also kann sich der Validator deswegen nicht beschweren
Mork vom Ork hat geschrieben:Es ist zwar nicht meine Art, mit Schiet nach anderen zu werfen, aber was der gute Mann von sich zu geben versucht, ist in aller Regel entweder wirres Kauderwelsch ohne Sinn und Verstand, oder falsch. Oder beides.
Es gibt mehrere Galerien
davon soll jetzt nur das erste Bild erscheinen(als Link)

wenn jetzt das GrayBox die "unsichtbaren" Links auf die Anderen Bilder nicht bräuchte, dann bräuchte man die Anderen Links nicht ausgeben

das war doch jetzt kein Kauderwelch ...
... und richtig ist diese Aussage auch
richtig ist diese Aussage unter der Annahme das GrayBox die Infos zu den Bildern an einem Anderen Ort hat
richtig wäre diese Aussage (jetzt wird es Kauderwelchig) wenn GrayBox nicht den rel="bildinfo" scannen würde, aber mir wurde ja jetzt mitgeteilt das es doch so ist
und das es so ist, das "rel" gescannt wird ist unlogisch
(1) die Infos in den Link reinwursteln
(2) die Infos dann mit einem Parser wieder extrahieren
warum einfach wenn es auch kompliziert geht (Sprichwort)
warum nicht einfach?
(1) html erzeugen + die Infos als JavaScript Variablen in einem JavaScript Bereich ausgeben
(2) mit JavaScript einfach auf die Informationen zugreifen, ohne sie erst noch kompliziert ermitteln zu müßen

Verfasst: 06.03.2010, 00:31
von dropsi
Also ich bin froh, dass es so wie es jetzt ist auch funktioniert.
Wenn es natürlich noch eine einfachere Lösung dafür gibt, dann immer her damit.