Bei Varianten Mediadateien von Vater anzeigen

Hallo Allerseits,

vielleicht kann mir jemand helfen, denn ich stehe ein bischen auf dem Schlauch.
Auf der Produktdetailseite können ja Downloads und Mediendateien in den Info-Tabs angezeigt werden. Ich habe nun den Fall, dass der Shopbetreiber diese Downloads (im Falle von Vater <-> Varianten) nur für den Vaterartikel pflegt. Diese sollen jedoch auch bei den entsprechenden Varianten angezeigt werden.

Wie komme ich innerhalb einer Variante an die Mediafiles des Vaterartikels ran?

Mit dem Standardfile media.tpl wird nur der einzelne Download in der Variante angezeigt jedoch keine Mediafiles.

Vielen Dank schon mal.

Gruß Micha.

Hallo Micha :slight_smile:

am besten löst du dies über ein OXID Modul.

Ich gehe dort immer so vor (für OXID CE 4.9.2)

1.) Im Frontend was eindeutiges wie eine CSS ID suchen, in deinem Fall habe ich mir die ID [B]media[/B] rausgesucht, also suche ich im Azure Theme (/application/views/azure/tpl/) nach [B]id=“media”[/B]

Jetzt weiß ich, dass der Medien-Tab aus dem Template [B]media.tpl /B kommt und über das Template [B]tabs.tpl/B eingebunden wird.

Nun achte ich auf die Entscheidung, welche dafür sorgt ob die Mediadateien angezeigt werden ja oder nein

[{if $oView->getMediaFiles() || $oDetailsProduct->oxarticles__oxfile->value}]

2.) Suche nach der Funktion [B]getMediaFiles()[/B] im OXID Projekt also [B]function getMediaFiles[/B]. Diese finde ich in der Klasse [B]oxwarticledetails.php[/B] (/application/components/widgets/oxwarticledetails.php).

Innerhalb der Funktion sehe ich, dass diese in der Weiterverarbeitung wieder auf eine Funktion namens [B]getMediaUrls()[/B] zugreift.

3.) Suche nach der Funktion [B]getMediaUrls()[/B], diese finde ich in der Klasse [B]oxarticle.php[/B] (/application/models/oxarticle.php).

Wenn ich die Funktion lese, sehe ich das dort eine MySQL Abfrage auf die Tabelle [B]oxmediaurls[/B] stattfindet und dies bisher nur mit der Artikel-ID (OXID).

Da ich weiß, dass Vater und Variante über die Spalte [B]OXPARENTID[/B] miteinander verknüpft sind muss ich die MySQL Abfrage um eine ODER-Bedingung erweitern, welche auch den Vaterartikel bei einer Variante mit berücksichtigt.

Dies würde ich wie oben erwähnt über ein OXID Modul lösen, indem ich die Klasse [B]oxarticle[/B] extende und die Methode [B]getMediaUrls()[/B] wie folgt überlade bzw. ersetze:


public function getMediaUrls()
{
  if ($this->_aMediaUrls === null) {
      $this->_aMediaUrls = oxNew("oxlist");
      $this->_aMediaUrls->init("oxmediaurl");
      $this->_aMediaUrls->getBaseObject()->setLanguage($this->getLanguage());

      $sViewName = getViewName("oxmediaurls", $this->getLanguage());
      $sQ = "select * from {$sViewName} where oxobjectid = '" . $this->getId() . "'";
      if($sParentId = $this->oxarticles__oxparentid->value) {
	    $sQ .= " or oxobjectid = '" . $sParentId ."'";
      }
      $this->_aMediaUrls->selectString($sQ);
  }

  return $this->_aMediaUrls;
}

Neu hinzugekommen ist der Codeabschnitt für die Datenbankabfrage:


if($sParentId = $this->oxarticles__oxparentid->value) {
  $sQ .= " or oxobjectid = '" . $sParentId ."'";
}

Viele Grüße
indianer3c

Hallo Indianer3c,

vielen Dank für die ausführliche Erklärung!
Das werd ich gleich mal probieren.

Beste Grüße
Micha.