---
title: "Linkhandler + tt_news: Single PID pro Kategorie setzen"
url: "https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen"
source: "typo3.net"
tags: ["Extensions","Links","Tipp","tt_news"]
created: "2009-08-10"
last_reply: "2015-04-27"
replies: 14
solved: false
page: 1
pages: 1
lang: "de"
---

# Linkhandler + tt_news: Single PID pro Kategorie setzen

Extensions · 14 Antworten · gestartet 2009-08-10

## Eröffnungsbeitrag

**einpraegsam.​net** · 2009-08-10 · [Beitrag #1](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/1)

**Problem:**
Ü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:

```typoscript
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
<?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.jpg](http://www.design-and-style.de/temp/typo3/tt_news_cat_single_pid.jpg)

**Abschließend:**
Über TS kann man eine alternative PID eintragen, falls eine Kategorie keinen Single PID Eintrag beinhaltet.

Cheers, Alex

## Antworten

### [#2](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/2) · just2b · 2009-08-10

das geht doch schon seit ewigkeiten per default. pro news kategorie kann man die single seite angeben, oder versteh ich da was falsch?

georg

### [#3](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/3) · einpraegsam.​net · 2009-08-10

> **just2b schrieb:**
>
> das geht doch schon seit ewigkeiten per default. pro news kategorie kann man die single seite angeben, oder versteh ich da was falsch?

Na ich kann mich natürlich auch geirrt haben, jedoch ging das bei mir nicht per Default...

### [#4](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/4) · just2b · 2009-08-10

ts muss mans halt noch aktivieren, aber das feature gibts

### [#5](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/5) · einpraegsam.​net · 2009-08-10

Blamage hin oder her - ich lass den Post mal stehen, falls es anderen Leuten ähnlich geht  :D

### [#6](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/6) · kimpixel · 2009-08-12

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

### [#7](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/7) · einpraegsam.​net · 2009-08-12

> **kimpixel schrieb:**
>
> 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

Na dann war es doch nicht ganz umsonst  :)

### [#8](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/8) · tobiasschaefer · 2009-08-31

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

### [#9](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/9) · j-spot · 2011-10-10

Schon ein Weilchen her, aber ich habs wie folgt gelöst:

```typoscript
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
	}
}
```

### [#10](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/10) · tobiasschaefer · 2011-10-26

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?

### [#11](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/11) · j-spot · 2011-11-16

T3 4.5.6
tt_news 3.0.1

### [#12](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/12) · tobiasschaefer · 2011-11-17

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.

### [#13](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/13) · ammannd · 2012-01-09

> **just2b schrieb:**
>
> ts muss mans halt noch aktivieren, aber das feature gibts

danke, das mit dem Aktivieren war bei mir soeben der springende punkt! ;)

### [#14](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/14) · Unbekannter Benutzer · 2012-01-19

> **einpraegsam.net schrieb:**
>
> **Problem:**
> Ü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:
>
> ```typoscript
> 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
> <?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.jpg](http://www.design-and-style.de/temp/typo3/tt_news_cat_single_pid.jpg)
>
> **Abschließ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.

### [#15](https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen/15) · anderlk · 2015-04-27

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
<?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

---

Quelle: „Linkhandler + tt_news: Single PID pro Kategorie setzen“, typo3.net, https://www.typo3.net/d/91985-linkhandler-tt-news-single-pid-pro-kategorie-setzen
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
