Zum Inhalt springen

linkhandler: Eine Extension mehrere Anzeigeseiten

Erstellt am 5. Februar 2010 · Noch keine Antworten

Tags: Links, Frage

GoSnA ·

Hallo an alle helfenden,

ich habe eine Extension die News bereitstellt und diese in drei Kategorien anbietet. Die Daten dafür sind in verschiedenen PIDs und werden ebenfalls in verschiedenen PIDs angezeigt.

Um nun das verlinken aus einer Seite auf diese News zu ermöglichen habe ich mir die Extension "linkhandler" zu hilfe gezogen.

Nun würde ich gerne diese drei Kategorien als Tab einzelnt angezeigt haben.

Dies klappt auch indem ich per Template Konfiguration folgendes eingebe:

plugin.tx_linkhandler {
	tx_meinplugin_1 {
		forceLink = 0
		parameter = 145
		additionalParams = &tx_meinplugin_pi1[nid]={field:uid}
   	  	additionalParams.insertData = 1 	
		useCacheHash = 1
	}
	tx_meinplugin_2 {
		forceLink = 0
		parameter = 49
		additionalParams = &tx_meinplugin_pi1[nid]={field:uid}
   	  	additionalParams.insertData = 1 	
		useCacheHash = 1
	}
}

und in dem TSConfig der Page

RTE.default.tx_linkhandler {
  tx_meinplugin_1 { 
    label=Pressemitteiltungen
    listTables=tx_meinplugin
    onlyPids= 145
  }
  tx_meinplugin_2 { 
    label=Kat 2
    listTables=tx_meinplugin
    onlyPids= 146
  }
}
RTE.default.tx_linkhandler.tt_news >
mod.tx_linkhandler {
  tx_meinplugin_1 {
    label=Kat 1
    listTables=tx_meinplugin
    onlyPids= 145
  }
  tx_meinplugin_2 { 
    label=Kat 2
    listTables=tx_meinplugin
    onlyPids= 146
  }
}
mod.tx_linkhandler.tt_news >

nun ist mir allerdings auch klar das linkhandler mit "record:tx_meinplugin:uid" arbeitet und dadurch nicht meine unterteilung in "tx_meinplug_1" arbeiten kann.

Gibt es nun eine mir unbekannte möglichkeit dieses zu ermöglichen?

Habe mir den aktuellen SVN Trunk geladen in der Hoffnung das sich dort einiges geändert hat, was in dem fall leider nichts geholfen hat...

Habe ebenfalls ein paar Modifikationen über "overwriteHandler" probiert, die sahen dann folgendermaßen aus:

RTE.default.tx_linkhandler {
  tx_meinplugin_1 { 
    label=Pressemitteiltungen
    listTables=tx_meinplugin
    overwriteHandler = record:tx_meinplugin_2
    onlyPids= 145
  }
}

allerdings musste ich dann in "class.tx_linkhandler_handler.php" ein paar Modifikationen einbauen damit er wieder die richtige Tabelle findet und die Links erstellt.

Habe die Zeilen:

list ($recordTableName, $recordUid) = t3lib_div::trimExplode(':', $linkHandlerValue);
$recordArray = $this->getCurrentRecord($recordTableName, $recordUid);

durch:

if (substr_count($linkHandlerValue,':') == 2)
	list ($recordItem, $recordTableName, $recordUid) = t3lib_div::trimExplode(':', $linkHandlerValue);
else
	list ($recordTableName, $recordUid) = t3lib_div::trimExplode(':', $linkHandlerValue);
$recordArray = $this->getCurrentRecord($recordTableName, $recordUid);
if ($recordItem) $recordTableName = $recordItem;

ersetzt.

Um nun sicher zu stellen das beim bearbeiten auch der Richtige Reiter ausgewählt wurde musste ich in "classes/class.txlinkhandler_recordTab.php" die funktion "getLinkBrowserInfoArray" wie folgt ersetzen:

Die Zeile:

list($currentHandler, $table, $uid) = explode(":", $href);

durch diese Zeilen ersetzen:

if (substr_count($href,':') == 3)
	list($currentHandler, $recordItem, $table, $uid) = explode(":", $href);
else
	list($currentHandler, $table, $uid) = explode(":", $href);

und die Zeile

$info['act'] = $key;

durch diese ersetzen:

if ($recordItem) {
	if ($currentHandler.':'.$recordItem == $tabConfig['overwriteHandler']) $info['act'] = $key;
} else {
	$info['act'] = $key;
}

Und nun zu meiner bescheidenen Frage: Geht das einfacher?

Oder kommt das noch in den kommenden Versionen?

Wenn nicht hoffe ich mit meinen Modifikationen anderen irgendwie weiterhelfen zu können 😉

LG
René