• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Zufallsbild in Div Hintergrund

Status
Für weitere Antworten geschlossen.

Doktor

Neues Mitglied
So ich will ein Zufallsbild in den Header einer Homepage. Soweit kein Problem: Da PHP nicht wirklick meine Stärke ist, hab ich mir ein fertiges Script gesucht:
Webmaster Resource: Tipps & Tricks: PHP: Zufallsbild aus einem Ordner anzeigen

Dieses Script funktioniert auch sowwit ganz gut, allerdings hab ich mir das ein wenig anderes vorgestellt. Und zwar, sollte das Zufallsbild in den Div Hintergrund, da in diesem Div noch andre Div positioniert sind.
Das Div wird mit CSS formatiert:
Code:
 background-image: url(bild.jpg);
Nun weis ich nicht ob dies überhaupt möglich ist, da man ja den php Code nicht einfach in die CSS Datei schreiben darf oder? Gibt es vielleicht trotzdem eine Möglichkeit, ein Zufallsbild im Div (von mir aus auch Tabellen)-Hintegrund einzufügen?

 
Möglichkeit 1.

Du speicherst die CSS als PHP und generierst den Inhalt mit php
dann bindest du halt als stylesheet eine php datei ein

Möglichkeit 2
du schreibst mit php ein style attribut in den div tag
 
Danke, Möglichkeit 1 hab ich jetzt mal ausgeschlossen, Möglichkeit 2 stell ich mir dann so vor:
Code:
<div style="background-image: url([FONT=monospace][COLOR=#000000][B]<?php[/B][/COLOR]

[COLOR=#0000ff]$Verzeichnis[/COLOR] = [COLOR=#ff0000]"images"[/COLOR];
 
[COLOR=#b1b100]if[/COLOR][COLOR=#66cc66]([/COLOR][COLOR=#0000ff]$Verzeichniszeiger[/COLOR] = [URL="http://www.php.net/opendir"][COLOR=#000066]opendir[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#0000ff]$Verzeichnis[/COLOR][COLOR=#66cc66])[/COLOR][COLOR=#66cc66])[/COLOR] 
[COLOR=#66cc66]{[/COLOR]
    [COLOR=#b1b100]while[/COLOR][COLOR=#66cc66]([/COLOR][COLOR=#0000ff]$Datei[/COLOR] = [URL="http://www.php.net/readdir"][COLOR=#000066]readdir[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#0000ff]$Verzeichniszeiger[/COLOR][COLOR=#66cc66])[/COLOR][COLOR=#66cc66])[/COLOR]
    [COLOR=#66cc66]{[/COLOR]
        [COLOR=#b1b100]if[/COLOR][COLOR=#66cc66]([/COLOR]![URL="http://www.php.net/is_dir"][COLOR=#000066]is_dir[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#0000ff]$Datei[/COLOR][COLOR=#66cc66])[/COLOR][COLOR=#66cc66])[/COLOR]
        [COLOR=#66cc66]{[/COLOR]
            [COLOR=#0000ff]$Dateien[/COLOR][COLOR=#66cc66][[/COLOR][COLOR=#66cc66]][/COLOR] = [COLOR=#0000ff]$Datei[/COLOR];
        [COLOR=#66cc66]}[/COLOR]
    [COLOR=#66cc66]}[/COLOR]

    [URL="http://www.php.net/closedir"][COLOR=#000066]closedir[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#0000ff]$Verzeichniszeiger[/COLOR][COLOR=#66cc66])[/COLOR];
[COLOR=#66cc66]}[/COLOR]

[URL="http://www.php.net/echo"][COLOR=#000066]echo[/COLOR][/URL][COLOR=#ff0000]"<img  src=[COLOR=#000099][B]\"[/B][/COLOR]"[/COLOR],
    [COLOR=#0000ff]$Verzeichnis[/COLOR],
    [COLOR=#ff0000]"/"[/COLOR],
    [COLOR=#0000ff]$Dateien[/COLOR][COLOR=#66cc66][[/COLOR][URL="http://www.php.net/rand"][COLOR=#000066]rand[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#cc66cc]0[/COLOR], [URL="http://www.php.net/count"][COLOR=#000066]count[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#0000ff]$Dateien[/COLOR][COLOR=#66cc66])[/COLOR][COLOR=#cc66cc]-1[/COLOR][COLOR=#66cc66])[/COLOR][COLOR=#66cc66]][/COLOR],
    [COLOR=#ff0000]"[COLOR=#000099][B]\"[/B][/COLOR] />"[/COLOR];

[COLOR=#000000][B]?>
);"></div>

Nur wie muss dann der echo Teil unten aussehen?
[/B][/COLOR][/FONT]
 
PHP:
<?php
interface iRandomImage {
  public function __construct($directory);
  public function BackgroundImage();
  public function __destruct();
}
class RandomImage implements iRandomImage {
  public function __construct($directory) {
    $this->verzeichnis = $directory;
    $this->zeiger = opendir($directory);
  }
  public function BackgroundImage() {
    $this->images = _getImages();
    $selected = $this->images[rand(0,count($this->images))];
    print "style=\"background-image : url(\"".$selection."\");\"";
  }
  protected function _getImages() {
    $array = array();
    while(($file = readdir($this->zeiger)) !== false) {
      if (filetype($this->verzeichnis.DIRECTORY_SEPARATOR.$file) == "file")
        $array[] = $this->verzeichnis.DIRECTORY_SEPARTORT.$file;
    }
    return $array;
  }
  public function __destruct() {
    closedir($this->zeiger);
  }
}

$zufallsbild = new RandomImage("images");
?>
<div <?php $zufallsbild->BackgroundImage(); ?>>
  <!-- HTML -->
</div>

So das wär die ausgabe als OOP (OOP = schön xD)
ne also ganz einfach wärs so
PHP:
<div style="background-image : url('<?php echo $image; ?>')">
 
eine oop variante verstößt gegen jegliche pattern, man mischt ungern html und php, du tust dies wohl sehr gerne :)

ein solches kontrukt wäre okay:

$builder = new builder;
$html = $builder->create('html');
$body = $builder->create('body');
$builder->appendChild($html,$body);
$div = $builder->create('div',array('id'=>'foo','value'=>mt_rand(1,5)));
$builder->appendChild($body,$div);

$tpl = new telmplate_engine();
$tpl->assign('full_html',$builder->desplay('return'));
system::deRegister($builder,$tpl);

ein solches system würde ich bevorzugen, die klassen dafür müsste man jedoch noch schreiben, aber html und php mischen ist nicht gut, und vorallem keine ganzen tags erstellen.
 
Ehm sorry aber jetzt bin ich verwirrt. Kann ich meinen Code, den ich gefunden habe nicht verwenden und da irgendwie noch eine Ausgabe machen?

Oder besser gesagt, wie müsste der Code jetzt aussehen. Oben wurde doch gesagt, dass man ein Style Attribut in den Div Tag schreiben kann. So was wie:
Code:
 [COLOR=#000000] <div style="background-image : url('[COLOR=#0000bb]<?php [/COLOR][COLOR=#007700]echo [/COLOR][COLOR=#0000bb]$verzeichnis/[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000bb]$datei[/COLOR][/COLOR][COLOR=#000000][COLOR=#007700]; [/COLOR][COLOR=#0000bb]?>[/COLOR]')">
Und dann noch meinen Code von oben verwenden. Aber so geht das wahrscheinlich auch nicht...

Oder brauch ich wirklich so ein riesen Code von Frank für ein einfaches zufllsbild aus einem Verzeichniss?
[/COLOR]
 
nö, aber ich nehm smarty xD

alles was smarty kann, kann auch dies:
class tpl
{
function assign($name,$value)
{
$this->template[$name] = $value;
return true;
}

function registerArray($name,$array)
{
$this->template[$name] = $array;
}

function get($file)
{
require('tpl/'.$file.'.tpl.php');
}

function clear()
{
unset($this->template);
return true;
}
}

um den thread steller nicht völlig zu verwirren:
benutz einfach bild_<?=mt_rand(1,9999);?>.jpg

die 1,9999 musst du natürlich anpassen, am besten du machst dies direkt als inline style="background:url(bild_<?=mt_rand(1,9999);?>.jpg);"

gruß, tim ...
 
@freak131
um den thread steller nicht völlig zu verwirren:
benutz einfach bild_<?=mt_rand(1,9999);?>.jpg

die 1,9999 musst du natürlich anpassen, am besten du machst dies direkt als inline style="background:url(bild_<?=mt_rand(1,9999);?>.j pg);"
Also wenn ich dann das verwende:
Code:
<div style="background-image:url(images/bild_<?=mt_rand(1,9999);?>.j pg);"></div>
und ich dann in den images Ordner Bilder packe mit Bild_1.jpg.. dann sollte es funktionieren?
@frank
Diese Methode wäre mir lieber, da ich dann nicht immer "mt_rand(1,10)" anpassen müsste und die Bilder nicht immer richtig bennen.
Er hat doch oben schon sein script stehen, er braucht nur die ausgabe, siehe post #4, #9
Ja das hab ich ja auch schon kapiert. Nur ist die Variable image von diesem Code von dir:
Code:
<div style="background-image : url('<?php echo $image; ?>')">
doch gar nicht in dem Script dabei, das ich gefunden habe. Was mus ich an meinen geposteten Script noch umändern?
Außerdem hat ja mein Script noch die echo Ausgabe, die ich ja dann auch nicht mehr bräuchte oder?
 
naja du machst dir einfach ne variable $image in der du den pfad speicherst ;ugl

PHP:
// [...]
$image = $Verzeichnis.DIRECTORY_SEPARATOR.$Dateien[rand(0, count($Dateien)-1)];
 
K wenn ich es richtig verstanden habe, dann mache ich es dann wie folgt:
Ich schreibe diesen PHP Code irgendwo auf die Seite:
PHP:
<?php

$Verzeichnis = "images";
 
if($Verzeichniszeiger = opendir($Verzeichnis)) 
{
    while($Datei = readdir($Verzeichniszeiger))
    {
        if(!is_dir($Datei))
        {
            $Dateien[] = $Datei;
        }
    }

    closedir($Verzeichniszeiger);
}

$image = $Verzeichnis.DIRECTORY_SEPARATOR.$Dateien[rand(0, count($Dateien)-1)];  

?>
Und dann bei dem Div:
Code:
 <div style="background-image : url('<?php echo $image; ?>')">
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben