Hallo liebe Leute,
ich verwende die Extension mjseventpro 0.2.1 und würde dort gerne eine Erweiterung vornehmen. Ich habe drei Kategorien von Veranstaltungen (auf drei SysOrdner verteilt). Auf der Startseite habe ich drei Teaser, die jeweils die aktuelle Veranstaltung einer jeden Kategorie anzeigen.
Meine Frage: ich würde gern einen Link im TeaserView erzeugen, der mir in der ListView nur Veranstaltungen der jeweiligen Kategorie zeigt.
Mein Ansatz: In der Datei class.tx_mjseventpro_pi1.php habe ich die Funktion function teaserView($content,$conf) ab Zeile 330 editiert und folgendes ergänzt:
$target = '_self';
$urlParameters = array(
$this->prefixId.'[cat]' => '3',
);
$markerArray['###CAT_LINK###'] = $this->pi_linkToPage('Weitere...','4',$target,$urlParameters);
Wobei 4 die ID der ListView Seite ist und $this->prefixId.'[cat]' => '3' die ID einer Kategorie.
Was ich nicht hinbekomme, ist, die Variable $urlParamters dynamisch mit der jeweiligen ID zu "befüllen". Hat jemand einen Vorschlag?
Viele Grüße und danke für jeden Tipp!
dabjoern
Wenn ich dich richtig verstehe, dann willst du die Kategorie des Teasers (im Beispiel 3) zur Laufzeit ermitteln.
Die hast du ja vermutlich irgendwo per TS definiert. Dann laß dir doch einfach mal die aktuelle Config ausgeben:
t3lib_div::debug($lConf);
Ansonsten scheint $lConf['cat'] in der von dir erwähnten Methode die passende Kategorie zu enthalten...
Hi digedag,
danke für deine Antwort. Ich habe mir einmal mit t3lib_div::debug($lConf) die Config ausgeben lassen:
cat
showHeader 0
results_at_a_time 1
showListViewLink 1
teaser_stdWrap.
crop 60|...
Wie du siehst, ist ['cat'] leer. Ich möchte die cat auch nicht unbedingt via TS festlegen. Vielmehr soll sie, wie du sagtest zur Laufzeit ermittelt werden. Die Kategorien liegen in einem Sysordner mit der ID 11. Darunter befinden sich (eine Ebene tiefer) 3 Sysordner für die Veranstaltungen (Namen entsprechend der Kategorien). In den Sysordnern befinden sich Veranstaltungen. Einer jeden Veranstaltung habe ich in dem dafür vorgesehenen Feld (im Backend im Quelltext als [tx_mjseventpro][2][cat] bezeichnet) eine Kategorie zugeordnet. Diese Zuordnung möchte ich quasi zur Laufzeit ermitteln.
Viele Grüße
dabjoern
Hallo dabjörn,
dann mußt du dir Kategorie also aus der Veranstaltung holen. Leider kommst du an die nicht mehr so ohne weiteres heran. Der Zugriff auf den Datensatz wurde geschickt versteckt. #paralyzed#
Obwohl nicht sehr schön hast du den geringsten Aufwand, wenn du die Kategorie in eine Instanzvariable schreibst. Man könnte ja $this->conf dafür verwenden.
In der Methode makeListItem() im Abschnitt für den TeaserView müsste folgende Zeile eingefügt werden:
case "teaserView":
// Die UID der Kategorie speichern
$this->conf['CAT_UID'] = $this->internal["currentRow"]["cat"];
if( $this->getFieldContent("time") ) $spacer = ', ';
Damit hast du schon mal die UID der Kategorie "gerettet". Allerdings mußt du beachten, daß da am Ende natürlich nur die Kategorie der letzten Veranstaltung im Teaser steht. Der Wert ist nach der Zeile 305 verfügbar. Er wird über die Methode makelist() gefüllt.
Für deinen Link kannst du den Wert jetzt verwenden:
$urlParameters = array(
$this->prefixId.'[cat]' => $this->conf['CAT_UID'],
);
Wäre natürlich sinnvoll, vorher noch zu prüfen, ob wirklich eine UID gesetzt ist! 8-)
Grüße,
digedag
Hi auch,
danke digedag. Ich habe es jetzt so übernommen:
$linktxt = $this->pi_getLL("teaserCatLink");
$id = $this->conf['listView.']['uid'];
$target = '_self';
$urlParameters = array(
$this->prefixId.'[cat]' => $this->conf['CATUID'],
);
$markerArray['###CATLINK###'] = $this->pi_RTEcssText($this->pi_linkToPage( $linktxt, $id, $target, $urlParameters));
Funktioniert super! Danke.
Grüße
dabjoern