Seite 1 von 1

Zufallsbilder aus verschiedenen Verzeichnissen

Verfasst: Do 7. Jun 2007, 17:20
von gepo
Hallo, ich nutze die Module Zufallsbild1 + Zufallsbild2 das mir Zufallsbilder aus ein und demselben Verzeichnis liefert. Siehe Beispiel, rechter Rand unter www.abenteuer-bergbau.de Beim Klick auf HOME erscheinen rechts immer neue Zufallsbilder und das ist auch gut so...

Zufallsbild1
EINGABE

Code: Alles auswählen

echo "<table cellspacing=\"0\" cellpadding=\"5\" border=\"0\">";
echo "
        <tr>
        <td>
        Image-Directory:
       </td>
            <td>
          <input size=20 type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\">
</td>
</tr>
 </tr>
               
        <tr>
        <td>
        Image-Dateieendung (z.B. .jpg;.gif):
       </td>
            <td>
          <input size=20 type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\">
</td>
  </tr>
          <tr>
        <td>
        ALT-Text:
       </td>
            <td>
          <input size=20 type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\">
</td>
  </tr>
</table>"; 
AUSGABE

Code: Alles auswählen

<?
$imagedir="CMS_VALUE[1]";
$imagetypes=explode(";","CMS_VALUE[2]");
$alttext="CMS_VALUE[3]";
$alttext=(($alttext) ? $alttext : "Zufallsbild");


function is_image($filename,$typearray) {
  reset($typearray);
  while($val=each($typearray)) {
     if (strstr($filename,$val[value])) {
       return true;
     }
  }
}

$handle=opendir($imagedir);
$n=0;
$random_filearray=Array();
while (($file = readdir($handle))) {
        if ($file != "." && $file != ".." && is_image($file,$imagetypes)) {
             $random_filearray[]=$file;
        }
}
shuffle ($random_filearray);

$random_image = array_pop ($random_filearray);

echo "<img src=\"$imagedir/$random_image\" border=\"0\" alt=\"$alttext\">\n";
?>
Zufallsbild2
EINGABE

Code: Alles auswählen

echo "<table cellspacing=\"0\" cellpadding=\"5\" border=\"0\">

          <tr>
        <td>
        ALT-Text:
       </td>
            <td>
          <input size=20 type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\">
</td>
  </tr>
</table>";
AUSGABE

Code: Alles auswählen

<?
$alttext="CMS_VALUE[3]";
$alttext=(($alttext) ? $alttext : "Zufallsbild");

$random_image = array_pop ($random_filearray);

echo "<img src=\"$imagedir/$random_image\" border=\"0\" alt=\"$alttext\">\n";
?>
Ich benötige jetzt ein drittes Modul, im selben Template, was mir zusätzlich ein Zufallsbild aus einem anderen Verzeichnis liefert. Meine Versuche sind kläglich gescheitert.
Ich hatte ein neues Modul (Zufallsbild_top) angelegt, (Zufall1 kopiert) und die Variable des Verzeichnisses geändert. Klappt aber nicht. Kann mir jemand helfen..? Hier der Code:

Zufallsbild_top
EINGABE

Code: Alles auswählen

echo "<table cellspacing=\"0\" cellpadding=\"5\" border=\"0\">";
echo "
        <tr>
        <td>
        Image-Directory:
       </td>
            <td>
          <input size=20 type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\">
</td>
</tr>
 </tr>
               
        <tr>
        <td>
        Image-Dateieendung (z.B. .jpg;.gif):
       </td>
            <td>
          <input size=20 type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\">
</td>
  </tr>
          <tr>
        <td>
        ALT-Text:
       </td>
            <td>
          <input size=20 type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\">
</td>
  </tr>
</table>"; 
AUSGABE (Hier habe ich die Variable $imagedir in $imagedirtop geändert, klappt aber nicht)

Code: Alles auswählen

<?
$imagedirtop="CMS_VALUE[1]";
$imagetypes=explode(";","CMS_VALUE[2]");
$alttext="CMS_VALUE[3]";
$alttext=(($alttext) ? $alttext : "Zufallsbild");


function is_image($filename,$typearray) {
  reset($typearray);
  while($val=each($typearray)) {
     if (strstr($filename,$val[value])) {
       return true;
     }
  }
}

$handle=opendir($imagedirtop);
$n=0;
$random_filearray=Array();
while (($file = readdir($handle))) {
        if ($file != "." && $file != ".." && is_image($file,$imagetypes)) {
             $random_filearray[]=$file;
        }
}
shuffle ($random_filearray);

$random_image = array_pop ($random_filearray);

echo "<img src=\"$imagedirtop/$random_image\" border=\"0\" alt=\"$alttext\">\n";
?>
Was mache ich verkehrt?
georg

Verfasst: Do 7. Jun 2007, 19:57
von tinof
Was genau geht eigentlich nicht ? Nimmt der nicht das andere Verzeichnis ?

ich würde vielleicht mit unset() experimentieren oder statt CMS_VAR[1..3] usw. andere Werte [4..6] .. verwenden (in jedem Modul).

--- ungetestet und von einem Contenido greenhorn ---

Verfasst: Fr 8. Jun 2007, 07:39
von gepo
tinof hat geschrieben:Was genau geht eigentlich nicht ? Nimmt der nicht das andere Verzeichnis ?

ich würde vielleicht mit unset() experimentieren oder statt CMS_VAR[1..3] usw. andere Werte [4..6] .. verwenden (in jedem Modul).

--- ungetestet und von einem Contenido greenhorn ---
Das Modul Zufallsbild_top soll im selben Template laufen wie Zufallsbild1+2, aber die Bilder aus einem anderen Verzeichnis holen. Zufallsbild 1+2 greifen auf dasselbe Verzeichnis, Zufallsbild_top soll die Bilder aus einem anderen Verzeichnis holen.
Ich habe schon andere Werte eingesetzt, was aber nicht klappte. Ich bekomme die Fehlermeldung:

Code: Alles auswählen

Fatal error: Cannot redeclare is_image() (previously declared in /www/htdocs/w0059825/cms/front_content.php(884) : eval()'d code:42) in /www/htdocs/w0059825/cms/front_content.php(884) : eval()'d code on line 669
Ich muß gestehen, ich kann kein PHP, habe versucht das Problem logisch zu lösen... :oops:

Verfasst: Fr 8. Jun 2007, 07:44
von emergence
verwende anstelle von

Code: Alles auswählen

function is_image($filename,$typearray) { 
  reset($typearray); 
  while($val=each($typearray)) { 
     if (strstr($filename,$val[value])) { 
       return true; 
     } 
  } 
} 
folgendes

Code: Alles auswählen

if (!function_exists('is_image')) {

  function is_image($filename,$typearray) { 
    reset($typearray); 
    while($val=each($typearray)) { 
       if (strstr($filename,$val[value])) { 
         return true; 
       } 
    } 
  } 

}
die fehlermeldung sagt aus das diese function bereits existiert und nicht nochmals definiert werden kann...

obriger code unterbindet das -> die funktion wird nur dann definiert wenn sie noch nicht existiert... (die andern modul sollten ebenfalls so angepasst werden)

Verfasst: Fr 8. Jun 2007, 08:27
von gepo
Danke emergence,
es klappt jetzt...
:D
Georg