ts muss mans halt noch aktivieren, aber das feature gibts
Linkhandler + tt_news: Single PID pro Kategorie setzen
Blamage hin oder her - ich lass den Post mal stehen, falls es anderen Leuten ähnlich geht 😃
ob das bei der News Extension geht weis ich nicht aber ich habe mich sehr über den post gefreut da das ich das für meine eigene Extension dringend gebraucht habe.
Danke
kimpixel schriebob das bei der News Extension geht weis ich nicht aber ich habe mich sehr über den post gefreut da das ich das für meine eigene Extension dringend gebraucht habe.
Danke
Na dann war es doch nicht ganz umsonst 🙂
Hallo Alex,
die Userfunction von Dir funktioniert bei mir schon mal ganz gut, allerdings habe ich bei manchen News das Problem, dass der Redakteur vergisst eine Kategorie auszuwählen, da die News auch ohne eine Kategorie angezeigt wird.
Im TSConfig des Sysfolders in dem sich die News befindet, ist per tx_ttnews.singlePid die PID der Einzelseite gesetzt.
Wie könnte man diese PID in der Userfunction auslesen und zurückgeben, wenn keine Kategorie ausgewählt wurde?
Vielen Dank schon mal im Voraus.
Tobias
Schon ein Weilchen her, aber ich habs wie folgt gelöst:
plugin.tx_linkhandler {
tt_news {
forceLink = 1
parameter.stdWrap.cObject = CONTENT
parameter.stdWrap.cObject {
table = tt_news_cat
select {
fields = tt_news_cat.single_pid
join = tt_news_cat_mm ON tt_news_cat_mm.uid_foreign = tt_news_cat.uid INNER JOIN tt_news ON tt_news.uid = tt_news_cat_mm.uid_local
where = 1
andWhere = tt_news.uid = '{field:uid}'
andWhere.insertData = 1
# PID der Kategorien (bzw. des Seitenbaum)
pidInList = 1
# ggf. notwendig, wenn Kategorien über den Seitenbaum verteilt sind
#recursive = 5
max = 1
orderBy = tt_news_cat_mm.sorting
}
renderObj = COA
renderObj {
10 = TEXT
10.field = single_pid
}
}
additionalParams = &tx_ttnews[tt_news]={field:uid}
additionalParams.insertData = 1
useCacheHash = 1
}
}
Ich habe das TS von j-spot getestet, woraufhin die Links im Frontend nicht mehr angezeigt wurden.
@j-spot: Welche TYPO3 und tt_news-Version setzt Du ein?
T3 4.5.6
tt_news 3.0.1
Dann könnte es an beiden liegen, da im Moment noch T3 4.2.17 und tt_news 2.5.2 im Einsatz ist. Ein Update auf 4.4 bzw. 3 ist aber schon länger geplant.
just2b schriebts muss mans halt noch aktivieren, aber das feature gibts
danke, das mit dem Aktivieren war bei mir soeben der springende punkt! 😉
einpraegsam.net schriebProblem:
Über die Extension linkhandler können auch Redakteure ganz einfach interne Links auf tt_news Detailansichten setzen - und natürlich auch auf andere Detailansichten (tt_address, wt_directory, etc...).
Jedoch kann es sein, dass verschiedene News auf verschiedenen Seiten angezeigt werden sollen - eben je nach News Kategorie.Idee:
Linkhandler macht es einem wirklich nicht schwer über Typoscript dementsprechend einzugreifen und den Ablauf zu ändern: Also muss eine kleine userFunc her. Interessant ist auch, dass die tt_news Kategorien bereits ein Feld "Single PID" (Single-Anzeige (Newsdetails) für Nachrichten dieser Kategorie) beinhalten (war mir bis vor kurzem unbekannt) - das kann gleich hierfür benutzt werden.Umsetzung:
Beispiel TS:includeLibs.linkhandler_helper = fileadmin/user_linkhandler_helper.php # TS for linkhandler plugin.tx_linkhandler { tt_news { forceLink = 1 #parameter = 15 parameter.stdWrap.cObject = USER parameter.stdWrap.cObject { userFunc = user_linkhandler_helper->main userFunc { # tt_news uid uid = TEXT uid.field = uid # Default pid if no pid given pid = TEXT pid.value = 13 } } additionalParams = &tx_ttnews[tt_news]={field:uid} additionalParams.insertData = 1 useCacheHash = 1 } }Dann noch eine kleine userFunc direkt mit Namen "user_linkhandler_helper.php" in fileadmin ablegen:
<?php // This class could manipulate the target pid of the linkhandler class user_linkhandler_helper { // Main function linkhandler pid change function main($content = '', $conf = array()) { $this->conf = $conf['userFunc.']; // ts configuration $uid = $this->cObj->cObjGetSingle($this->conf['uid'], $this->conf['uid.']); // get tt_news uid $pid = $this->cObj->cObjGetSingle($this->conf['pid'], $this->conf['pid.']); // get default pid $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery ( 'tt_news_cat.single_pid', 'tt_news LEFT JOIN tt_news_cat_mm ON (tt_news.uid = tt_news_cat_mm.uid_local) LEFT JOIN tt_news_cat ON (tt_news_cat_mm.uid_foreign = tt_news_cat.uid)', 'tt_news.uid = ' . intval($uid), '', 'tt_news_cat_mm.sorting', 1 ); if ($res) $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); if (is_array($row) && intval($row['single_pid']) > 0) { // if there is a category to the current news and if there is the single_pid field filled return intval($row['single_pid']); // give single pid from category back } else { // no cat given or no single pid given return intval($pid); // give default pid back } } } ?>Danach kann man die Single PID einfach über die Newskategorie setzen:
Bild: design-and-style.de/…/tt_news_cat_single_pid.jpgAbschließend:
Über TS kann man eine alternative PID eintragen, falls eine Kategorie keinen Single PID Eintrag beinhaltet.Cheers, Alex
Danke Alex,
das hat toll funktioniert.
Hallo,
hat von Euch schon jemand das Script auf Ext:News ummünzen können? Ich scheitere nämlich gerade daran. wahrscheinlich liegt an der Datenbank Abfrage.
Mein Script sieht so aus und er nimmt immer die default pid her:
<?php
// This class could manipulate the target pid of the linkhandler
class user_linkhandler_helper {
// Main function linkhandler pid change
function main($content = '', $conf = array()) {
$this->conf = $conf['userFunc.']; // ts configuration
$uid = $this->cObj->cObjGetSingle($this->conf['uid'], $this->conf['uid.']); // get news uid
$pid = $this->cObj->cObjGetSingle($this->conf['pid'], $this->conf['pid.']); // get default pid
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
'sys_category.single_pid',
'tx_news_domain_model_news LEFT JOIN sys_category_record_mm ON (tx_news_domain_model_news.uid = sys_category_record_mm.uid_local) LEFT JOIN sys_category ON (sys_category_record_mm.uid_foreign = sys_category.uid)',
'tx_news_domain_model_news.uid = ' . intval($uid),
'',
'sys_category_record_mm.sorting',
1
);
if ($res) $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
if (is_array($row) && intval($row['single_pid']) > 0) { // if there is a category to the current news and if there is the single_pid field filled
return intval($row['single_pid']); // give single pid from category back
} else { // no cat given or no single pid given
return intval($pid); // give default pid back
}
}
}
?>
Gruß Andreas