Zum Inhalt springen

News-Files mit eigenem Label

Erstellt am 18. August 2008 · Noch keine Antworten

Tags: Frage

UncleBenz ·

Bonjour zusammen,

mal eine Frage von mir als absolutem Einsteiger als Extension-Schreiberling:

Zu Übungszwecken möchte ich mir eine kleine Extension schreiben, die tt_news dahin gehend erweitert, dass ich zu den Dateien, welche Newsmeldungen hinzugefügt werden können (news_files), optional Beschreibungstexte angeben kann. Es geht mir wie gesagt eher um eine Fingerübung als darum, ob man dies auch per TS oder ähnlich lösen könnte.

Hierzu habe ich per Kickstarter die DB um ein Feld erweitert ("tx_ttnewsfilelabel_file_label"), welches im BE gesetzt werden kann - pro File eine Beschreibung in jeweils eine neue Zeile.

Zur Auswertung habe ich nun den Code meiner Extension so aufgebaut, dass dieser per Hook als ExtraItemMarkerProcessor eingebunden wird und das MarkerArray['###FILE_LINK###'] neu setzt.

Um hierbei aber die übrigen Attribute wie Größenangabe oder Typ-Icon beizubehalten, verwende ich auch hier die API-Methode 'filelink()'. Diese allerdings nimmt wiederum den Wrapper, welcher in der Konfiguration gesetzt ist. Da ich aber - wenn mein neues DB-Feld 'tx_ttnewsfilelabel_file_label' keinen Wert enthält - nach wie vor den Filenamen verwenden möchte, habe ich hier geschummelt und die Konfiguration umgebogen. In Summe sieht dies so aus:

[...]
// read db field and split it into several entries (newline)
$files['text'] = t3lib_div::trimExplode(chr(10), $row['tx_ttnewsfilelabel_file_label']);

// get all attached files
$fileArr = explode(',',$row['news_files']);

// empty/flush marker array for file links
$markerArray['###FILE_LINK###'] = "";

// set configuration to use customized text as link label wrap
$this->pObj->conf['newsFiles.']['labelStdWrap.']['cObject']="TEXT";
      
$cnt=0;

// iterate through all attached files
while(list(,$val)=each($fileArr)) {
    // set configuration to use the cnt-th line of description
    $this->pObj->conf['newsFiles.']['labelStdWrap.']['cObject.']
    ['value']=$files['text'][$cnt++];

    // let the api create the link
    $markerArray['###FILE_LINK###'] .= $this->pObj->local_cObj->filelink($val,$this->pObj->conf['newsFiles.']
);

Da mir das dann doch zu krude aussah, habe ich erstmal aufgehört (daher wird auch noch nicht geprüft, ob überhaupt ein Eintrag im entsprechenden Tabellenfeld steht) nun meine Fragen an Euch:

a) Es gibt sicherlich einen eleganteren Weg, das API-filelink() (Z. 23) zu überzeugen, meinen Text aus der Tabelle anstellen des Dateinamens für das Link Label zu verwenden, oder? Das 'Verbiegen' der Konfiguration, wie ich es hier tue, scheint mir doch arg gefrickelt zu sein...

b) Der Hook ist sicherlich auch nicht sonderlich sinnvoll gewählt, da so ja durch tt_news erst mühevoll das $markerArray['###FILE_LINK###'] aufgebaut wird, welches ich dann aber unbesehen wegschmeiße (Z. 9). Wie löse ich sowas sinnvoller/besser?

Besten Dank für Eure Antworten!

Holger