Zufallsbild mit Unterverzeichnis, Link und TimeOut

wosch

Beitrag von wosch » Mi 26. Mär 2008, 14:20

Milly hat geschrieben:Aber was bedeuten die letzten vier Parameter?
contenido/includes/function.api.image.php
So um Zeile 593 ff

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Do 27. Mär 2008, 07:17

moin,
das wäre super, wenn du die funktionen noch einbauen würdest ;)

Gruß

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Do 27. Mär 2008, 11:54

Ja, baue ich noch rein.

Grüße
Milly

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Fr 28. Mär 2008, 14:59

Wie versprochen hier nun die neue Version mit "echten" Thumbnails
:lol:

Code: Alles auswählen

<?php

$dateien = array();
$start=time();
get_dir("CMS_VALUE[1]",$start,"CMS_VAR[3]");
$breite = (int) "CMS_VALUE[2]";

#Was gefunden?
if (count($dateien) < 1)
  { echo "nix gefunden"; }
else
  { # Array sortieren
    sort($dateien);

    # Zufall
    srand ((double) microtime() * 10000000);
    $rand_keys = array_rand ($dateien, 2);
    $Zufallsbild = $dateien[$rand_keys[0]];
    $dimensions = GetImageSize($Zufallsbild);
    echo "<div id=\"zbild\"><a href=\"$Zufallsbild\" target=\"_blank\">";

    if ($dimensions[0] > $breite)
      { $divisor = $dimensions[0] / $breite;
        $hoehe = (int) ($dimensions[1] / $divisor);
        $thumb = capiImgScale ($Zufallsbild, $breite, $hoehe, false, false);
        echo "<img src=\"$thumb\" width=\"$breite\" height=\"$hoehe\""; }
    else
      { echo "<img src=\"$Zufallsbild\" width=\"$dimensions[0]\" height=\"$dimensions[1]\""; }

    echo " style=\"border-width:1px; border-color:#000000;\" alt=\"Klick mich f&uuml;r eine Gro&szlig;ansicht (neues Fenster)\"></a></div>\n";
  }


function get_dir ($dir,$startzeit,$zeitlimit)
  { global $dateien;
    $fp=opendir($dir);
    while($datei=readdir($fp))
      { if (is_dir("$dir/$datei") && $datei!="." && $datei!="..")
          { if (time()-$starttime > $zeitlimit) get_dir("$dir/$datei",$startzeit,$zeitlimit); }
        else
          { if (strlen($datei) > 4)
              { $ext = strtolower(substr($datei,-4));
                if ($ext==".jpg" || $ext==".gif" || $ext=="jpeg" || $ext==".png")
                  { $dateien[] = $dir . "/" . $datei; }
              }
          }
      }
    closedir($fp);
  }

?>
Schönes Wochenende
Milly

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Fr 28. Mär 2008, 16:08

alles klar... das funzt super.

ne funktion die jetzt noch geil wäre, wäre die Betrachtung der Höhe. Wenn ein Bild im Hochformat gemacht wurde sieht es noch ganz komisch aus. Wäre es möglich noch eine max. Höhe mit ein zu bauen? sodass das bild skalliert wird, wenn es die max höhe überschreitet....?

ich hoffe das bild verdeutlicht das problem...
Bild


außerdem wäre es super, wenn sich das Bild dann in einem Popup in der größe des Originalbildes öffnen könnte.. nur so als anregung :P

sonst super tool.. danke ;)

Gruß

Nebel
Beiträge: 117
Registriert: Do 14. Jun 2007, 10:08
Kontaktdaten:

Beitrag von Nebel » So 30. Mär 2008, 17:39

Milly hat geschrieben:
Damit solltest du jetzt die Max-Tiefe der Verzeichnisse bestimmen können.
Viel Spaß damit.
Hi Milly,

hatte endlich Gelegenheit das Modul mit den Änderungen zu testen. Leider funktioniert es mit der max. Verzeichnisstiefe noch nicht so ganz. Es kommt zeilenlang immer wieder diese Fehlermeldung:

Code: Alles auswählen

Warning: Wrong parameter count for substr_count() in .../htdocs/contenido/includes/include.con_editcontent.php(618) : eval()'d code on line 1132
Und am Ende ein Zufallsbild jedoch aus einem beliebig tiefen Verzeichnis.

Könntest du eventuell noch einmal schauen, woran das liegen könnte?

Schöne Grüße

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Mo 31. Mär 2008, 09:14

@Nebel:

Ooops, was habe ich denn da zusammengebraut? Das kann ja nicht klappen :oops:

Bitte die Funktion get_dir ersetzen gegen:

Code: Alles auswählen

function get_dir ($dir,$startzeit,$zeitlimit,$max_tiefe) 
  { global $dateien; 
    global $aktuelle_tiefe;
    
    $fp=opendir($dir); 
    while($datei=readdir($fp)) 
      { if (is_dir("$dir/$datei") && $datei!="." && $datei!="..") 
          { $aktuelle_tiefe++; 
            if (time()-$starttime > $zeitlimit || $max_tiefe >= $aktuelle_tiefe) 
              { get_dir("$dir/$datei",$startzeit,$zeitlimit,$max_tiefe); } 
          } 
        else 
          { if (strlen($datei) > 4) 
              { $ext = strtolower(substr($datei,-4)); 
                if ($ext==".jpg" || $ext==".gif" || $ext=="jpeg" || $ext==".png") 
                  {   $dateien[] = $dir . "/" . $datei; } 
              } 
          } 
      } 
    closedir($fp); 
   } 
[/code]

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Mo 31. Mär 2008, 09:16

@slecram

Ja, über ein Popup und Höhenbeschränkung habe ich auch schon nachgedacht. Gehe das Problem mal an...

Grüße
Milly

Nebel
Beiträge: 117
Registriert: Do 14. Jun 2007, 10:08
Kontaktdaten:

Beitrag von Nebel » Mo 31. Mär 2008, 10:17

@Milly

Leider funktioniert es immer noch nicht mit der Begrenzung auf die Verzeichnisstiefe. Es wird zwar keine Fehlermeldung mehr angezeigt, jedoch bewirkt die Angabe einer Verzeichnisstiefe im Input keinerlei Veränderung. Es werden alle Ordner durchsucht. Woran könnte das liegen? Ich finde es leider nicht heraus.


@ slecram

Ich habe es mal mit einer einbindung von Thickbox versucht, falls das für dich interessant ist. Zuerst Thickbox runterladen und installieren. Dann

Code: Alles auswählen

echo "<div id=\"zbild\"><a href=\"$Zufallsbild\" target=\"_blank\">"; 
Schöne Grüße
Nebel
ersetzten mit:

Code: Alles auswählen

echo "<div id=\"zbild\"><script type=\"text/javascript\" src=\"js/jquery.js\"></script><script type=\"text/javascript\" src=\"js/thickbox.js\"></script><a href=\"$Zufallsbild\" target=\"_blank\" class=\"thickbox\">";
wobei hier die Thickboxdateien im normalen JS-Ordner liegen.

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Mo 31. Mär 2008, 14:30

@slecram

Hier nun die neue Version mit Höhenbeschränkung und mit Pop-Up. Diesmal sind die Änderungen weitreichender.

Hier erstmal der INPUT-Teil:

Code: Alles auswählen

?>

<table cellspacing="0" cellpadding="5" border="0">
  <tr>
    <td>Image-Directory:</td>
    <td><input size=20 type="text" name="CMS_VAR[1]" value="CMS_VALUE[1]"></td>
  </tr><tr>
    <td>Max Breite:</td>
    <td><input size=20 type="text" name="CMS_VAR[2]" value="CMS_VALUE[2]"></td>
  </tr><tr>
    <td>Max Höhe:</td>
    <td><input size=20 type="text" name="CMS_VAR[4]" value="CMS_VALUE[4]"></td>
  </tr><tr>
    <td>Zeitlimit in Sek.:</td>
    <td><input size=20 type="text" name="CMS_VAR[3]" value="CMS_VALUE[3]"></td>
  </tr>
</table>

<?php
Das ging ja noch.....
Der neue Output ist nun eine Mischung aus PHP und Javascript (geht nicht anders mit dem PopUp :idea: )
Hier nun der OUTPUT-Teil:

Code: Alles auswählen

<?php

echo "<script>\n";
echo "function OpenNewWindow(Picture,Breit,Hoch)\n";
echo "  { xsize = Breit+35;\n";
echo "    ysize = Hoch+75;\n";

echo "    ScreenWidth = screen.width;\n";
echo "    ScreenHeight = screen.height;\n";
echo "    xpos = (ScreenWidth/2)-(xsize/2);\n";
echo "    ypos = (ScreenHeight/2)-(ysize/2);\n";

echo '    NewWindow=window.open("","Picture","height="+ysize+",width="+xsize+",scrollbars=no,resizable=no,top="+ypos+",left="+xpos+"");'."\n";
echo '    NewWindow.document.write ("<html><head><title>BILDANZEIGE");'."\n";
echo '    NewWindow.document.write ("</title></head>");'."\n";
echo '    NewWindow.document.write ("<body bgcolor=\'#cccccc\'>");'."\n";
echo '    NewWindow.document.write ("<table align=\'center\'><tr>");'."\n";
echo '    NewWindow.document.write ("<td align=\'center\' valign=\'top\'>");'."\n";
echo '    NewWindow.document.write ("<table border=\'1\' bgcolor=\'#000000\' cellpadding=\'0\' cellspacing=\'1\'><tr><td align=\'center\'>");'."\n";
echo '    NewWindow.document.write ("<img src=");'."\n";
echo '    NewWindow.document.write (Picture);'."\n";
echo '    NewWindow.document.write (">");'."\n";
echo '    NewWindow.document.write ("</tr></table>");'."\n";
echo '    NewWindow.document.write ("</td></tr><tr>");'."\n";
echo '    NewWindow.document.write ("<td align=\'center\' valign=\'bottom\'>");'."\n";
echo '    NewWindow.document.write ("<form><input type=\'button\' value=\'Fenster schliessen\' style=\'font-family: Verdana; font-size: 10px\' onClick=\'self.close()\'>");'."\n";
echo '    NewWindow.document.write ("</td></tr></table>");'."\n";
echo '    NewWindow.document.write ("</form></body></html>");'."\n";
echo '    NewWindow.document.close();'."\n";
echo "  }\n";
echo "</script>\n";


$dateien = array();
$start=time();
get_dir("CMS_VALUE[1]",$start,"CMS_VAR[3]");
$maxbreite = (int) "CMS_VALUE[2]";
$maxhoehe = (int) "CMS_VALUE[4]";

#Was gefunden?
if (count($dateien) < 1)
  { echo "nix gefunden"; }
else
  { # Array sortieren
    sort($dateien);

    # Zufall
    srand ((double) microtime() * 10000000);
    $rand_keys = array_rand ($dateien, 2);
    $Zufallsbild = $dateien[$rand_keys[0]];
    $Internetpfad = "http://www.meinedomain.de/cms/" . substr($Zufallsbild,2);
    $dimensions = GetImageSize($Zufallsbild);
    echo "<div id=\"zbild\">";

    if ($dimensions[0] > $maxbreite)
      { $divisor = $dimensions[0] / $maxbreite;
        $hoehe = (int) ($dimensions[1] / $divisor);
        if ($hoehe > $maxhoehe)
          { $divisor = $dimensions[1] / $maxhoehe;
            $breite = (int) ($dimensions[0] / $divisor);
            $hoehe = $maxhoehe; }
        else
          { $breite = $maxbreite; }
        $thumb = capiImgScale ($Zufallsbild, $breite, $hoehe, false, false);
        echo '<a href="javascript:OpenNewWindow(\''.$Internetpfad.'\','.$dimensions[0].",".$dimensions[1].")\">\n";
        echo "<img src=\"$thumb\" width=\"$breite\" height=\"$hoehe\"";
      }
    else
      { echo '<a href="javascript:OpenNewWindow(\''.$Internetpfad.'\','.$dimensions[0].",".$dimensions[1].")\">\n";
        echo "<img src=\"$Zufallsbild\" width=\"$dimensions[0]\" height=\"$dimensions[1]\""; }

    echo " style=\"border-width:1px; border-color:#000000;\" alt=\"Klick mich f&uuml;r eine Gro&szlig;ansicht (neues Fenster)\"></a></div>\n";
  }


function get_dir ($dir,$startzeit,$zeitlimit)
  { global $dateien;
    $fp=opendir($dir);
    while($datei=readdir($fp))
      { if (is_dir("$dir/$datei") && $datei!="." && $datei!="..")
          { if (time()-$starttime > $zeitlimit) get_dir("$dir/$datei",$startzeit,$zeitlimit); }
        else
          { if (strlen($datei) > 4)
              { $ext = strtolower(substr($datei,-4));
                if ($ext==".jpg" || $ext==".gif" || $ext=="jpeg" || $ext==".png")
                  { $dateien[] = $dir . "/" . $datei; }
              }
          }
      }
    closedir($fp);
  }

?>
Allerdings müssen zwei Anpassungen gemacht werden:
Zeile 5 + 6: Der Bildrand innerhalb des PopUps. (Hier 35 und 75 pixel)
Zeile 51: Im Internetpfad muß die Domain und der Pfad zu Contenido angegeben werden. (Hier http://www.meinedomain.de/cms/)

Bei mir klappt es allerbestens! :D

Grüße
Milly

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Mo 31. Mär 2008, 14:31

@Nebel:
Sehr strange.
Ich gehe das Problem nochmal komplett neu an.

Stay tuned!

Grüße
Milly

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Mo 31. Mär 2008, 14:47

tach!
kann es leider erst am WE testen! aber jetzt schon einmal besten dank!
gruß

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » So 6. Apr 2008, 14:57

hi,
hier mal ne erste rückmeldung von mir. also das mit der skallierung klappt super. jedoch hab ich ne kleinigkeit vergessen :oops:
das bild wird dann ja in der breite auch skalliert, damit es nicht verzerrt wird. jetzt passt es natürlich von der breite nicht mehr zum menü.

Bild

man müsste jetzt die bilder, welche im hochformat sind (hoehe > breite) entweder zentrieren, oder was optisch am besten wäre, komplett ausschließen, sodass nur bilder angezeit werden wo die breite > hoehe ist...

achja, und das popup öffnet sich auch net. muss aber nochmal durchgucken, ob ich den fehler finde.. ;)

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Mo 7. Apr 2008, 10:23

slecram hat geschrieben:
...man müsste jetzt die bilder, welche im hochformat sind (hoehe > breite) entweder zentrieren, oder was optisch am besten wäre, komplett ausschließen, sodass nur bilder angezeit werden wo die breite > hoehe ist...
Ja, was denn nun: Zentrieren oder überspringen??? :roll:

Das Popup geht aber bei mir. Entweder du hast dich irgendwo verhaspelt oder vielleicht Java ausgeschaltet?

Grüße
Milly

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Mo 7. Apr 2008, 10:33

moin,
bilder wo die hoehe > breite ist zu überspringen wäre top. dann würde es optisch immer gleich aussehen...

weiss auch noch nicht wieso sich pad popup nicht öffnen lässt. weder aus dem firefox noch ausm ie. die url zum bild wird richtig generiert, also kann es am pfad nicht liegen. werd mir das nachher aber nochmal angucken...

gruß und schon einmal besten dank ;)

Gesperrt