Seite 1 von 1

[3.1] phpbb code Frage

Verfasst: 29.06.2017 21:04
von MissSophie
Hallo , vielleicht kann mir einer Helfen und zwar :
Ich habe einen phpBB Code gebastelt dieser Code zeigt nur 3 Bilder an aber die anderen die im FTP sind werden nicht angezeigt.
Was ist Falsch ?

Code: Alles auswählen

//Slideshow_anfang
$bilder=array( );
$dir=opendir("images/slide");
while($bild=readdir($dir)) if ($bild != "." &&$bild !="..") $bilder[]="<img src=\"images/slide/$bild \" width=\"100px\" height=\"100px\" border=\"1\">";
closedir($dir);
$max=count($bilder)-1;
for($i=0;$i<$max;$i++) {
$bild.=$bilder[$i];
}
//Slideshow_ende 

Re: [3.1] phpbb code Frage

Verfasst: 29.06.2017 21:38
von canonknipser
Fangen wir mal an:

Das ist kene phpBB-Code-Frage, sondern eine php-Code-Frage ;)


Spaghetticode :evil: -> immer nur ein Befehl pro Zeile; Blöcke bilden, wenn möglich, Einrückungen zur Lesbarkeit, Leerzeichen verwenden
Also

Code: Alles auswählen

//Slideshow_anfang
$bilder = array( );
$dir = opendir("images/slide");
while ($bild = readdir($dir))
{
  if ($bild != "." && $bild != "..")
  {
     $bilder[] = "<img src=\"images/slide/$bild \" width=\"100px\" height=\"100px\" border=\"1\">";
  }
}
  
closedir ($dir);
$max = count ($bilder) -1 ;
for( $i = 0; $i < $max; $i++) 
{
  $bild .= $bilder[$i];
}
//Slideshow_ende      
Du verwendest die Variable $bild zwei mal - zuerst, um die Dateinamen aus dem Verzeichnis zu lesen, dann ein zweites mal (ohne sie zwischendrin zu initialisieren) für den String mit den Bildern.
Also, noch ein unset($bild); hinter closedir($dir); oder eine andere Variable, z.B. $bilderliste verwenden (das ist sauberer, weil dann jede Variable nur einen use-Case abbildet).

Sind denn alle Bilder lesbar, sprich chmod 444, 644, 664 oder 666

Was macht du mit dem String $bild. Der enthält ja erst mal nur eine Aneinanderreihung von html-Image-Tags, noch keine "Slideshow"? Wie sieht der Inhalt denn in der Browser-Quellcodeansicht aus?

Re: [3.1] phpbb code Frage

Verfasst: 29.06.2017 21:58
von MissSophie
ok danke für die Antwort.
Aber es werden nur 3 bilder angezeigt nicht die im FTP gespeichert sind

Re: [3.1] phpbb code Frage

Verfasst: 29.06.2017 22:08
von canonknipser
MissSophie hat geschrieben:Aber es werden nur 3 bilder angezeigt nicht die im FTP gespeichert sind
Dann prüfe doch mal hiernach
canonknipser hat geschrieben:Sind denn alle Bilder lesbar,
und hiernach:
canonknipser hat geschrieben:Was macht du mit dem String $bild. Der enthält ja erst mal nur eine Aneinanderreihung von html-Image-Tags, noch keine "Slideshow"? Wie sieht der Inhalt denn in der Browser-Quellcodeansicht aus?

Re: [3.1] phpbb code Frage

Verfasst: 01.07.2017 10:39
von Tastenplayer
Vielleicht würde es mit diesem Script gehen?
Das Script

Code: Alles auswählen

<script type="text/javascript">

var photos=new Array()
var photoslink=new Array()
var which=0

//define images. You can have as many as you want:
[b][color=#FF0000]photos[0]="photo1.jpg"
photos[1]="photo2.jpg"
photos[2]="photo3.jpg"[/color][/b]

//Specify whether images should be linked or not (1=linked)
var linkornot=0

//Set corresponding URLs for above images. Define ONLY if variable linkornot equals "1"
photoslink[0]=""
photoslink[1]=""
photoslink[2]=""

//do NOT edit pass this line

var preloadedimages=new Array()
for (i=0;i<photos.length;i++){
preloadedimages[i]=new Image()
preloadedimages[i].src=photos[i]
}

function applyeffect(){
if (document.all && photoslider.filters){
photoslider.filters.revealTrans.Transition=Math.floor(Math.random()*23)
photoslider.filters.revealTrans.stop()
photoslider.filters.revealTrans.apply()
}
}

function playeffect(){
if (document.all && photoslider.filters)
photoslider.filters.revealTrans.play()
}

function keeptrack(){
window.status="Image "+(which+1)+" of "+photos.length
}

function backward(){
if (which>0){
which--
applyeffect()
document.images.photoslider.src=photos[which]
playeffect()
keeptrack()
}
}

function forward(){
if (which<photos.length-1){
which++
applyeffect()
document.images.photoslider.src=photos[which]
playeffect()
keeptrack()
}
}

function transport(){
window.location=photoslink[which]
}

</script>

Body

Code: Alles auswählen

<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="100%" colspan="2" height="22"><center>
<script>
if (linkornot==1)
document.write('<a href="javascripttransport()">')
document.write('<img src="'+photos[0]+'" name="photoslider" style="filter:revealTrans(duration=2,transition=23)" border=0>')
if (linkornot==1)
document.write('</a>')
</script>
</center></td>
  </tr>
  <tr>
    <td width="50%" height="21"><p align="left"><a href="#" onClick="backward();return false">Previous Slide</a></td>
    <td width="50%" height="21"><p align="right"><a href="#" onClick="forward();return false">Next Slide</a></td>
  </tr>
</table>

<p align="center"><font face="Arial" size="-2">Free DHTML scripts provided by<br>
<a href="http:"></a></font></p>
Oder diesen http://bxslider.com/(The Responsive jQuery Content Slider. Slides can contain images, video, or any other HTML content!)
Hier eine Demo in einem vBulletin Board, müsste doch wohl auch in einem phpbb Forum funktionieren - oder? http://forum.toribash.com/showthread.php?t=389165 Leider verstehe ich zu wenig davon, sonst würd ich sofort versuchen den bei mir im 3.2.0 Board einzubauen!

Re: [3.1] phpbb code Frage

Verfasst: 01.07.2017 14:00
von canonknipser
Hallo Tastenplayer,
dein Script setzt voraus, dass man die Dateinamen fest in den Sourcecode codiert. Das im Startbeitrag gepostete Script soll alle Bilder aus einem Verzeichnis lesen und dynamisch verarbeiten.

Re: [3.1] phpbb code Frage

Verfasst: 05.07.2017 15:37
von Tastenplayer
canonknipser hat geschrieben:Hallo Tastenplayer,
dein Script setzt voraus, dass man die Dateinamen fest in den Sourcecode codiert. Das im Startbeitrag gepostete Script soll alle Bilder aus einem Verzeichnis lesen und dynamisch verarbeiten.
Hatte ich nicht geschnallt :oops: Dann war das leider nichts.

Re: [3.1] phpbb code Frage

Verfasst: 14.08.2017 00:32
von BNa
Abgesehen davon, das ich glob() eleganter finde....

http://php.net/manual/de/function.glob.php

Code: Alles auswählen

<?php
foreach (glob("*.txt") as $filename) {
    echo "$filename - Größe: " . filesize($filename) . "\n";
}
?>
.....sollten die entsprechenden Bedingungen stimmen (jpg,png,gif),
dann werden auch alle entsprechenden Bilder angezeigt...

Gutes Beispiel:
https://stackoverflow.com/questions/173 ... -directory

Wichtig:
Wie in dem Beispiel unter dem Post in dem letzten Link
besser GLOB_BRACE wählen:

Also statt
glob("img/thumb/*.jpg")

lieber so
glob("img/thumb/*.{jpg,png,gif}", GLOB_BRACE)

..so werden auch alle Bildformate abgedeckt :wink:

Re: [3.1] phpbb code Frage

Verfasst: 16.08.2017 12:56
von gn#36
Noch mal zurück zum ursprünglichen Skript: Dein erstes Problem ist die nicht initialisierte Variable. Die hat canonknipser schon angesprochen.

Dann passt der Wert der Variablen $max nicht zur Verwendung in der for Schleife, hierdurch lässt du in der Schleife ein Bild aus. Hast du vermutlich nicht gemerkt, weil es durch die nicht initialisierte Variable sowieso schon in der Variablen drin steht. Eleganter wäre die Verwendung von foreach, da brauchst du dich um so einen Schnickschnack dann gar nicht zu kümmern, du nimmst garantiert alle Elemente im Array her.

Falls in dem Ordner noch andere Dateien liegen können musst du außerdem noch mehr wegfiltern als nur das aktuelle und übergeordnete Verzeichnis. Außerdem durchsucht dein Skript keine Unterordner, falls dort die Bilder liegen sollten.

Allerdings: Die Fehler sollten nur dafür sorgen, dass eine feste Zahl Bilder fehlt, nicht dass es immer genau drei gibt. Also brauchen wir mehr Randbedingungen von dir die das verursachen könnten.

Re: [3.1] phpbb code Frage

Verfasst: 17.08.2017 19:26
von BNa
Also, um es mal konkret (und xhtml 1.0 strict) zu machen.
Dieser Codefetzen sollte (als Test) dafür langen:

Code: Alles auswählen

//Slideshow_Anfang
$bilder = array(); //evtl. garnicht nötig?
foreach (glob("images/slide/*.{jpg,png,gif}", GLOB_BRACE) as $filename){
     $bilder .= "<img src='$filename' style='width: 100px; height: auto; border: 1px solid black;' /><br />";
}
echo $bilder;
//Slideshow_Ende      
oder (für Klammer-Fanaten)

Code: Alles auswählen

//Slideshow_Anfang
$bilder = array(); //evtl. garnicht nötig?
foreach ((glob("images/slide/*.{jpg,png,gif}", GLOB_BRACE)) as $filename){
     $bilder .= "<img src='$filename' style='width: 100px; height: auto; border: 1px solid black;' /><br />";
}
echo $bilder;
//Slideshow_Ende