[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Bilder per Zufall anzeigen [R4] - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Tizian
Beiträge: 151
Registriert: 4. Apr 2008, 11:58
Wohnort: Bremen
Kontaktdaten: Website

Bilder per Zufall anzeigen [R4]

2. Apr 2009, 17:20

hallo zusammen,

hat jemand einen tipp / modul / codeschnippsel wie ich eine anzahl (x) bilder aus einer medienkategorie inkl. unterkategorien zufällig anzeigen lassen kann.

die module im downloadbereich sind nur für [R3] (und arbeiten anscheinend nicht mit image resize (?).

z.B. dieses modul von Katharina Hirsch [Web & Breakfast]:
eingabe

Code: Alles auswählen

<?php
///////////////////////////////////////////

function MediaCats( $cat = null) {
	$selectCats = null;
	if ( is_int( $cat)) {
		$selectCats = array( OOMediaCategory::getCategoryById( $cat));
	} else if ( OOMediaCategory::isValid( $cat)) {
		$selectCats = array( $cat);
	} else {
		$selectCats = OOMediaCategory::getRootCategories();
	}

	foreach ( $selectCats as $selectCat) {
		add_cat_option( $selectCat);
	}
}


function add_cat_option( &$cat, $groupName = '') {
	if( empty( $cat)) {
		return;
	}

	print_link($cat->getName(), $cat->getId(), $groupName);

	if ( $cat->hasChildren()) {
		$childs = $cat->getChildren();
		
		foreach ( $childs as $child) {
			if ($child->hasChildren()) {
				add_cat_option( $child, $cat->getName());
			} else {
				add_cat_option( $child, $cat->getName());
			}
		}
	}
}

function print_link($catName, $catId, $groupName) {
	global $selectedCat;
	if ( "REX_VALUE[1]" == $catId) {
		// selected
		echo "<option value=\"" . $catId . "\" selected>" . $catName . "</option>\n";
	} else {
		echo "<option value=\"" . $catId . "\">" . $catName . "</option>\n";
	}
}

///////////////////////////////////////////////////////

echo "<h2>Zufalls Bild</h2>";
echo "Bitte wählen Sie eine Kategorie:<br />\n";

// show the mediapool-categories
echo "\n<select  class=\"inp50\" name=\"VALUE[1]\">\n";
MediaCats();
echo "</select>\n";

echo "<br /><br />";
?>
ausgabe

Code: Alles auswählen

<?php

$bild[0] ="";
$bild = array();
$result[0] ="";
$result = array();

$mediacat = REX_VALUE[1];

 $cat = OOMediaCategory::getCategoryById($mediacat);

 if ($cat->hasChildren()) {
   
   $childs = $cat->getChildren();
   foreach($childs as $child) {
     $idCategory = $child->getId();
     $cat2 = OOMediaCategory::getCategoryById($idCategory);
     $bild = array_merge($result,$bild);
  }

 }

 shuffle($bild);
 $randIndex = mt_rand( 0, count( $bild) -1);
 $bild2 = $bild[ $randIndex];
  
 $fileName = $bild2->getFileName();
 $title = $bild2->getTitle();

 echo "<div class='portlet'><h3>Aus der Galerie</h3>";
 echo "<p id='shuffle'><img src='{$REX['HTDOCS_PATH']}index.php?rex_resize=110h__$fileName' alt='$title' /><br />$title</p></div>";

?>
dankbar für jeden hinweis.
schöne grüße
tizian
********************************
ansichtsache TM

snaft

2. Apr 2009, 17:45

Hi!

Dieses Modul ist genau, das was Du brauchst.

http://www.redaxo.de/165-0-moduldetails ... ule_id=274

Beste Grüße,
Marc

Tizian
Beiträge: 151
Registriert: 4. Apr 2008, 11:58
Wohnort: Bremen
Kontaktdaten: Website

3. Apr 2009, 09:47

hi marc,

danke für deinen hinweis. ein tolles modul.
fast etwas überdimensioniert für meinen bedarf.

und leider nicht ganz genau das was ich brauche.
ich will ja mehrere zufallsbilder anzeigen lassen.

ist das mit geringen änderungen im modul machbar?
oder hat jemand noch eine andere idee?

danke.
schöne grüße
tizian
********************************
ansichtsache TM

Benutzeravatar
alex2911
Beiträge: 567
Registriert: 20. Jul 2005, 04:13
Wohnort: Österreich
Kontaktdaten: Website

3. Apr 2009, 11:07

Hi

Das geht etwa so:

Code: Alles auswählen

<?php
$gesamtdateien = OOMediaCategory::getCategoryById(17);
$gesamtarray = $gesamtdateien->getFiles();
shuffle($gesamtarray);
for ($a=0;$a<sizeof($gesamtarray);$a++){
    echo $gesamtarray[$a]->_name . '<br />';
    if ($a== 5) break;
}
?>
17 ist die Kategorie_ID - das kannst auch per REX_VALUE einfügen.
5 ist das Limit.
Bei break könntest auch ein rand daraus machen - musst aber darauf achten, rand nicht höher zu legen als anzahl der bilder.
beispiel:

Code: Alles auswählen

$randmax = 10;
if (sizeof($gesamtarray)<$randmax) $randmax = (sizeof($gesamtarray)-1);
dann:
$max = rand(0, $randmax);
oder so ähnlich.

html und css musst du nur noch herum basteln.

//edith: offensichtlichen fehler korrigiert

Tizian
Beiträge: 151
Registriert: 4. Apr 2008, 11:58
Wohnort: Bremen
Kontaktdaten: Website

7. Apr 2009, 19:17

danke alex,

ich musste etwas fummeln und lernen und habe jetzt im ausgabemodul folgendes stehen:

Code: Alles auswählen

<?php
$mediacat = REX_VALUE[1];
$gesamtdateien = OOMediaCategory::getCategoryById($mediacat);
 $gesamtarray = $gesamtdateien->getFiles();
shuffle($gesamtarray);
for ($a=0;$a<sizeof($gesamtarray);$a++){
    echo '<img class="teaser" src="index.php?rex_resize=225w__'.$gesamtarray[$a]->_name. '"/>';
    if ($a== 2) break;
}
?> 
funktioniert prima, aber leider nur mit der jeweils angewählten medienkategorie. ich würde meine zufallsbilder aber gerne auch aus gesamten bildern in der angewählten kategorie UND ihren unterordnern zusammenwürfeln lassen.

ich habe es mit folgendem code vergeblich versucht:

Code: Alles auswählen

$mediacat = REX_VALUE[1];
$cat = OOMediaCategory::getCategoryById($mediacat);
if ($cat->hasChildren()) {
   $childs = $cat->getChildren();
   foreach($childs as $child) {
     $idCategory = $child->getId();
     $gesamtdateien = OOMediaCategory::getCategoryById($idCategory);
  }
 }
$gesamtarray = $gesamtdateien->getFiles();
shuffle($gesamtarray);
for ($a=0;$a<sizeof($gesamtarray);$a++){
    echo '<img class="teaser" src="index.php?rex_resize=225w__'.$gesamtarray[$a]->_name. '"/>';
    if ($a== 2) break;
}
?>
für hilfe wie immer dankbar.
schöne grüße
tizian
********************************
ansichtsache TM

Benutzeravatar
alex2911
Beiträge: 567
Registriert: 20. Jul 2005, 04:13
Wohnort: Österreich
Kontaktdaten: Website

8. Apr 2009, 09:43

hey

es gibt ne getrootcategories soweit ich weiß.
moment - OOMediaCategory::getRootCategories
damit könntest du dann durch die einzelnen roots gehen bis du die letzte child durch hast. aber ich würde eher die bilder die ich anzeigen möchte in eine kategorie verschieben bzw. kopieren. sonst sieht der user vielleicht etwas was ihm nix angeht :lol:

Zurück zu „Allgemeines [R4]“