[3.1] phpbb code Frage

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
MissSophie
Mitglied
Beiträge: 129
Registriert: 30.01.2016 19:44
Kontaktdaten:

[3.1] phpbb code Frage

Beitrag 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 
Zuletzt geändert von canonknipser am 29.06.2017 21:20, insgesamt 1-mal geändert.
Verschoben von Support-Forum nach Coding & Technik am 29.06.2017 21:18 durch canonknipser

Benutzeravatar
canonknipser
Ehemaliges Teammitglied
Beiträge: 2053
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag 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?
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;) - Bilder
Kein Support via PN, nur im Board und (manchmal) im IRC
MissSophie
Mitglied
Beiträge: 129
Registriert: 30.01.2016 19:44
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag von MissSophie »

ok danke für die Antwort.
Aber es werden nur 3 bilder angezeigt nicht die im FTP gespeichert sind
Benutzeravatar
canonknipser
Ehemaliges Teammitglied
Beiträge: 2053
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag 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?
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;) - Bilder
Kein Support via PN, nur im Board und (manchmal) im IRC
Benutzeravatar
Tastenplayer
Mitglied
Beiträge: 2054
Registriert: 02.07.2010 19:35
Wohnort: Zuchwil/SO - Schweiz
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag 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!
Meine phpBB Styles & More
Be the best version of yourself rather than a bad copy of someone else!
Benutzeravatar
canonknipser
Ehemaliges Teammitglied
Beiträge: 2053
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag 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.
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;) - Bilder
Kein Support via PN, nur im Board und (manchmal) im IRC
Benutzeravatar
Tastenplayer
Mitglied
Beiträge: 2054
Registriert: 02.07.2010 19:35
Wohnort: Zuchwil/SO - Schweiz
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag 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.
Meine phpBB Styles & More
Be the best version of yourself rather than a bad copy of someone else!
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag 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:
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag 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.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: [3.1] phpbb code Frage

Beitrag 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      
Antworten

Zurück zu „Coding & Technik“