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: http://redaxo.org/slack/
mmh
Beiträge: 118
Registriert: 17. Apr 2012, 13:20

REX_MEDIA in Array und zurück

10. Jun 2016, 13:44

Hallo Zusammen,
Ich baue gerade ein komplexes Modul mit ca. 15 REX_MEDIA Feldern. Um den Code kurz zu halten, habe ich versucht die REX_MEDIAs in ein Array zu legen und anschließend per Schleife wieder auszulesen.
Der Code, den ich aber normalerweise zum Auslesen der Bilder nehme macht mir Probleme.

Hier der Code für ein Bild:

Code: Alles auswählen

if ("REX_MEDIA[1]" != '') {
	//Rex_Media definieren
	$file = 'REX_MEDIA[1]';
	//Media Manager Typ definieren
	$media_type = 'c3';
	//Array
	$media = rex_media::get("$file");
	//Metainfo Titel
	$media_title = str_replace(array("\r\n", "\n", "\r"), ' ', $media->getValue('title'));
	//Metainfo Beschreibung
	$media_description = str_replace(array("\r\n", "\n", "\r"), ' ', $media->getValue('description'));
	$image_1 = '
	<a class="fancybox" rel="REX_SLICE_ID" href="index.php?rex_media_type=c12&rex_media_file='.$file.'" data-fancybox-title="'.$media_description.'">
		<img src="index.php?rex_media_type='.$media_type.'&rex_media_file='.$file.'" alt="'.$media_title.'">
	</a>';
}
Und hier der Code in der Schleife:

Code: Alles auswählen

$images = array("REX_MEDIA[1]","REX_MEDIA[2]","REX_MEDIA[3]","REX_MEDIA[4]");
	foreach ($images as $image) {
	//Media Manager Typ definieren
	$media_type = 'c3';
	//Array
	$media = rex_media::get($image);
	//Metainfo Titel
	$media_title = $media->getValue('title'));
	//Metainfo Beschreibung
	$media_description =  $media->getValue('description'));
	echo '
	<a class="fancybox" rel="REX_SLICE_ID" href="index.php?rex_media_type=c12&rex_media_file='.$image.'" data-fancybox-title="'.$media_description.'">
		<img src="index.php?rex_media_type='.$media_type.'&rex_media_file='.$image.'" alt="'.$media_title.'">
	</a>';
	
	}
Probleme macht diese Zeile:

Code: Alles auswählen

$media_title = $media->getValue('title'));
Wo ist mein Denkfehler ;-)

Danke
Marco

netmanix

Re: REX_MEDIA in Array und zurück

10. Jun 2016, 15:45

Huch! Warum so viele REX_MEDIA, wenn es doch REX_MEDIALIST gibt?
Na ja ok.

Nimm mal die Klammer, die zu viel ist raus. :wink:
Alternativ:

Code: Alles auswählen

$media_title = $media->getTitle();

mmh
Beiträge: 118
Registriert: 17. Apr 2012, 13:20

Re: REX_MEDIA in Array und zurück

13. Jun 2016, 09:53

Servus Netmanix,
danke schon mal für den gefundenen Fehler, der war's aber leider nicht.
Fehlermeldung ist: Fatal error: Call to a member function getValue() on a non-object.

PS: Das ganze ist ein Modul mit bis zu 12 Bildern und dazugehörigem Text. Wenn ich da REX_MEDIALIST nehme, besteht die Gefahr, dass die zuordnung Text/Bild nicht mehr passt, weil ein Bild vergessen wurde, oder die Reihenfolge von Text und Bild falsch ist. So stelle ich für jeden Bereich ein Textfeld und ein Bildfeld zur Verfügung.

Sonst noch jemand eine Idee?

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: REX_MEDIA in Array und zurück

13. Jun 2016, 14:53

Anscheinend ist eines der Felder leer, in diesem Fall gibt rex_media NULL zurück. Vor der Ausgabe solltest du daher prüfen, ob ein Medien-Objekt zurück kommt, das ist wahrscheinlich

Code: Alles auswählen

if ($media instanceof rex_media) 
Ich kenne die REX5-Klassen allerdings noch nicht genau.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

wolfgang
Beiträge: 126
Registriert: 20. Okt 2005, 20:52
Wohnort: 23966 Tressow
Kontaktdaten: Website

Re: REX_MEDIA in Array und zurück

13. Jun 2016, 16:23

Ist jetzt zwar nicht eine direkte Lösung Deines Problems, aber ich mach es tatsächlich immer so, dass ich den zugehörigen Text direkt in einem Metafeld des Mediums ablege. Dann kann ich auch eine Media List nehmen und bin nicht auf 15 oder 12 Medienfelder beschränkt.
Wenn das nicht geht, kann man immer noch pro Medium einen eigenen Block nehmen und den umschließenden Code auf andere Art und Weise hinzufügen.

mmh
Beiträge: 118
Registriert: 17. Apr 2012, 13:20

Re: REX_MEDIA in Array und zurück

13. Jun 2016, 16:26

Hallo Wolfgang,
danke für den Tip, genau dass ist sonst auch mein Vorgehen. Wenn ich das mit dem Array nicht klappt, werde ich es wohl auch so umsetzen. Das Modul ist für Ansprechpartner, da passt das dann auch. Ich dachte halt mit einem normalen Modul mit Textfeldern bin ich flexibler und kann es auch für andere Dinge nutzen, Produktvorschau zum Beispiel, etc.

Hat noch jemand eine Idee, warum das Auslesen einzeln funktioniert, aber nicht aus dem Array ?

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: REX_MEDIA in Array und zurück

13. Jun 2016, 16:32

Siehe mein Beitrag oben. Die Sicherheitsabfrage hast Du übrigens im Originalcode drin.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

mmh
Beiträge: 118
Registriert: 17. Apr 2012, 13:20

Re: REX_MEDIA in Array und zurück

13. Jun 2016, 16:41

Hallo Daniel,
sorry, deinen Beitrag hatte ich übersehen, war jedoch zum Teil die Lösung.
Es lag tatsächlich daran, das ein Bild nicht ausgewählt war.
Die Sicherheitsabfrage funktioniert aber leider nicht. die Fehlermeldung bleibt bestehen

Code: Alles auswählen

$images = array("REX_MEDIA[1]","REX_MEDIA[2]");
	foreach ($images as $image) {
    if ($media instanceof rex_media) {
		//Media Manager Typ definieren
		$media_type = 'c3';
		//Array
		$media = rex_media::get($image);
		//Metainfo Titel
		$media_title = $media->getValue('title');
		//Metainfo Beschreibung
		$media_description =  $media->getValue('description');
		echo '
		<a class="fancybox" rel="REX_SLICE_ID" href="index.php?rex_media_type=c12&rex_media_file='.$image.'" data-fancybox-title="'.$media_description.'">
			<img src="index.php?rex_media_type='.$media_type.'&rex_media_file='.$image.'" alt="'.$media_title.'">
		</a>';
		
		}
	}
Obwohl die Klasse scheinbar so richtig ist ;-(

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: REX_MEDIA in Array und zurück

13. Jun 2016, 16:45

Du musst die Abfrage natürlich an der richtigen Stelle einfügen, also dann wenn $media auch definiert wurde:

Code: Alles auswählen

$images = array("REX_MEDIA[1]","REX_MEDIA[2]");
   foreach ($images as $image) {
      //Media Manager Typ definieren
      $media_type = 'c3';
      //Array
      $media = rex_media::get($image);
      if ($media instanceof rex_media) {
      //Metainfo Titel
      $media_title = $media->getValue('title');
      //Metainfo Beschreibung
      $media_description =  $media->getValue('description');
      echo '
      <a class="fancybox" rel="REX_SLICE_ID" href="index.php?rex_media_type=c12&rex_media_file='.$image.'" data-fancybox-title="'.$media_description.'">
         <img src="index.php?rex_media_type='.$media_type.'&rex_media_file='.$image.'" alt="'.$media_title.'">
      </a>';      
      }
   } 
alternativ könntest Du auch prüfen, ob der Dateiname vorhanden gesetzt is (wie du es in der Ursprungsversion gemacht hast:

Code: Alles auswählen

$images = array("REX_MEDIA[1]","REX_MEDIA[2]");
   foreach ($images as $image) {
      if ($image !="") {
      //Media Manager Typ definieren
      $media_type = 'c3';
      //Array
      $media = rex_media::get($image);
      //Metainfo Titel
      $media_title = $media->getValue('title');
      //Metainfo Beschreibung
      $media_description =  $media->getValue('description');
      echo '
      <a class="fancybox" rel="REX_SLICE_ID" href="index.php?rex_media_type=c12&rex_media_file='.$image.'" data-fancybox-title="'.$media_description.'">
         <img src="index.php?rex_media_type='.$media_type.'&rex_media_file='.$image.'" alt="'.$media_title.'">
      </a>';      
      }
   } 
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

wolfgang
Beiträge: 126
Registriert: 20. Okt 2005, 20:52
Wohnort: 23966 Tressow
Kontaktdaten: Website

Re: REX_MEDIA in Array und zurück

14. Jun 2016, 09:40

Hallo,
Wenn es für Ansprechpartner ist, gibt es eine fast noch schlichtere Lösung. Du packst die Ansprechpartner in eine XForm ääääh Entschuldigung yform natürlich Tabelle mit allem drum und dran. Da kannst Du dann auch gleich noch Abteilungen oder Teams bilden. Dann musst du die Daten nur noch in einem Modul auslesen. Die Methode hat einen weiteren Vorteil: du kannst die Ansprechpartner auf der Website auch an verschiedenen Stellen einsetzen, musst sie aber nur an einer Stelle pflegen. Soll ja schonmal vorgekommen sein, dass sich im Team was ändert.
Lg Wolfgang

mmh
Beiträge: 118
Registriert: 17. Apr 2012, 13:20

Re: REX_MEDIA in Array und zurück

14. Jun 2016, 10:43

Hallo Wolfgang,
danke dir, auch das habe ich schon so umgesetzt, gerade wenn die Ansprechpartner mehrfach auf der Website platziert werden ist das super. In diesem Fall will ich das Modul aber auch für andere Angaben (wie z.B. Produkte) nutzen. Das Problem war ein leeres REX_MEDIA-Feld. Ich baue jetzt wie oben beschrieben die Abfrage ein und dann sollte es klappen. Den fertigen Code werde ich dann posten.

mmh
Beiträge: 118
Registriert: 17. Apr 2012, 13:20

Re: REX_MEDIA in Array und zurück

15. Jun 2016, 09:55

So, hier der fertige Code.
REX_MEDIA (Bilder) und dazugehöriger REX_VALUE (Text) werden in ein mehrdimensionales Array abelegt und anschließend ausgelesen. Danke noch mal an alle.

Code: Alles auswählen

<?php
//Bilder und Textfelder in Array ablegen
$entrys = array(
  array("Image" => 'REX_MEDIA[1]', "Text" => 'REX_VALUE[3]'),
  array("Image" => 'REX_MEDIA[2]', "Text" => 'REX_VALUE[4]'),
  array("Image" => 'REX_MEDIA[3]', "Text" => 'REX_VALUE[5]'),
  array("Image" => 'REX_MEDIA[4]', "Text" => 'REX_VALUE[6]'),
  array("Image" => 'REX_MEDIA[5]', "Text" => 'REX_VALUE[7]'),
  array("Image" => 'REX_MEDIA[6]', "Text" => 'REX_VALUE[8]'),
  array("Image" => 'REX_MEDIA[7]', "Text" => 'REX_VALUE[9]'),
  array("Image" => 'REX_MEDIA[8]', "Text" => 'REX_VALUE[10]'),
  array("Image" => 'REX_MEDIA[9]', "Text" => 'REX_VALUE[11]'),
  array("Image" => 'REX_MEDIA[10]', "Text" => 'REX_VALUE[12]'),
  array("Image" => 'REX_MEDIA[11]', "Text" => 'REX_VALUE[13]'),
  array("Image" => 'REX_MEDIA[12]', "Text" => 'REX_VALUE[14]'),
);
//Array auslesen
foreach ($entrys as $entry) {
	//Bild auslesen
	$image = $entry ['Image'];
	//Text auslesen
	$text = $entry ['Text'];
	//Media Manager Typ definieren
	$media_type = 'c3';
	//Dateiname auslesen
	$media = rex_media::get($image);
	//Prüfen ob Objekt vorhanden 
    if ($media instanceof rex_media) {
		//Metainfo Titel
		$media_title = $media->getValue('title');
		//Metainfo Beschreibung
		$media_description =  $media->getValue('description');		
	}
	else {
		//Falls kein Bild ausgewählt wurde		
		$image = '';
	}
	echo $image;
	echo $text;
}	
?>

Zurück zu „Module/Aktionen [R5]“