Zum Inhalt springen

Kategoriebeschreibung ausgeben?

Erstellt am 24. Januar 2008 · 9 Antworten · letzte Antwort am 7. Juli 2009

Tags: Kategorien, tt_news, Frage

bbb ·

Hallo tt_news Freunde,

wisst Ihr, wie man das Feld "Beschreibung" eines tt_news Kategorie-Datensatzes im Frontend ausgibt?

Das Template birgt nicht den entsprechenden Marker, und die 3343 Zeilen Code der tx_ttnews.php wirken auf mich wie "mach es bloß nicht!".

Hat das jemand schonmal gemacht?

thx in advance,

bbb

just2b ·

Hallo,

eine eigene ext, mit nem hook zu tt_news, darin ein Query über die Kategorien und als Marker ausgeben

georg

bbb ·

Aaaaaaalso...

ich hab da jetzt mal meine Erfahrung mit den tt_news Hooks gemacht. Nachfolgend mal mein Code, damit andere es leichter haben 🙂

<?php
function extraItemMarkerProcessor($markerArray,$row,$lConf,$parentObject) {
		// will be read from conf[] :
			$config_linkDesc = 0;
			$config_emailPerson = 0;
			$config_cacheme = 1;
		
		// initialize stuff
			$txdescription = '';
			$txlink = '';
			$txperson = '';
			$txemail = '';
			$txdescpart = '';
			$txpersonpart = '';
			
		//db access
			$fields='*';
			//$where='uid='.$row[uid];
			$where='uid='.$this->getCat($row);
			$table='tt_news_cat';
			$result = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields,$table,$where);
			$this->echolot($where);
			if(!empty($result)) {
			while ($line = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)) {
				$txdescription=$line['tx_bbbcatlinks_description'];
				$txlink=$line['tx_bbbcatlinks_link'];
				$txperson=$line['tx_bbbcatlinks_person'];
				$txemail=$line['tx_bbbcatlinks_email'];
				$this->echolot('parsed');
			}
			}
			
		// design stuff
		if ($config_linkDesc) 		
				$txdescpart = $this->linkIt($txdescription, $txlink);
			else
				$txdescpart = $txdescription;
			
		if ($config_emailPerson)
				$txpersonpart = $this->linkIt($txperson, $txemail);
			else		
				$txpersonpart = $txperson;
		
		// final approach		
		$markerArray['###BBB_DESC###']= $txdescpart;
		$markerArray['###BBB_PERSON###']= $txpersonpart;
		return $markerArray;
	
	} ?>

Die Marker ###BBB_DESC### und ###BBB_PERSON### müssen im News-Template eingetragen werden, damit es Output gibt - ist klar.

Ich stelle mal zur Diskussion, dass bei ner Abfrage nach UID´s eine While-Schleife unnötig ist. Bin jedenfalls froh, dass ich den Hasen gefunden habe, der mir zwei Tage im Feld gelegen hat.

Um die Abfrage auf tt_news_cat machen zu können, braucht man die UID der Category. Und die tt_news liefert unter dem Feld nur die Tatsache, DASS eine Category verwendet wird -- nicht jedoch die UID dieser.

Das Ganze wird in tt_news_cat_mm verwaltet, und zwar im Feld uid_foreign.

Daher die Funktion getCat($row):

<?php
	function getCat ($row) {
			//db access
			$fields='uid_foreign';
			$where='uid_local='.$row[uid];
			$table='tt_news_cat_mm';
			$cat = 0;
			$this->echolot($where.' from tt_news_cat_mm');
			$result = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields,$table,$where);
			if(!empty($result)) {
			while ($line = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)) {
				$cat=$line['uid_foreign'];
			}
			}
			$this->echolot($cat);
			return intval($cat);
	}
?>

Man sieht dem Code eventuell an, dass das meine erste Extension ist und ich habe noch viele Fragen aber die stelle ich ein anderes Mal in diesem Forum 🙂

Zwei Stück stelle ich Euch, die sich den PHP Code anschauen aber dann doch:

  • -- Lässt sich die Query noch optimieren? Die DB rödelt halt echt, und der Output verzögert sich ein paar Sekunden, weil ich 70 Kategorien habe, und viele kategorisierte News auf einer Seite anzeige. PHP & SQL improving comments welcome.

  • -- Wie läuft das mit der $conf[]? So eine schnieke Einstellungsmöglichkeit im Ext Manager auf der Seite "Information" schwebt mir da vor.

best wishes & thx in advance,
bbb

just2b ·

das ganze geht schon etwas kürzer, hab das aber nur als TS-Skript, einfach halt anpassen

20 = CONTENT	
20 {
	table = tt_news_cat
	select {
		selectFields = tt_news_cat.title, tt_news_cat.description, tt_news_cat.tx_chttnewscatfields_short 
		pidInList = 90
		join =  tt_news_cat_mm ON (tt_news_cat.uid = tt_news_cat_mm.uid_foreign) INNER JOIN tt_news ON (tt_news.uid = tt_news_cat_mm.uid_local)
		andWhere = tt_news.uid = {GPvar:tx_ttnews|tt_news}
		andWhere.insertData = 1
		max = 1
	}
	
	renderObj = COA
	renderObj {
		10 = TEXT
		10 {
			field= title
			wrap = <strong>|</strong>
			htmlSpecialChars = 1
		}
		
		20 = TEXT
		20 {
			field= tx_chttnewscatfields_short
			wrap = <h2>|</h2>
			htmlSpecialChars = 1
		}
							
	}
}

georg

bbb ·

Danke Georg.

Sieht nach einem sehr nützlichen Snippet aus 😉
Der Vorteil in Deinem Skript ist ganz klar der inner join... Werd ich übernehmen (in meine Extension).

best wishes,
bbb

just2b ·

hab grad einiges mit tt_news am hut und werde da wohl später bisschen was veröffentlichen sobalds fertig ist

georg

bbb ·

cool.

bis dahin, kannst Du mir vielleicht Grundsatzproblem aus der Welt schaffen:

Kann ich innerhalb der function extraItemMarkerProcessor($markerArray,$row,$lConf,$parentObject)vielleicht an die $conf kommen, die an meine function main ($content, $conf) übergeben wird?

Komme sonst ja nicht in den Genuss der TS Anpassbarkeit.

thx in advance für php comments,
bbb

swissweb ·

Ich komme mit den obigen Codes nicht zugange... Wie kann ich die Kategoriebeschreibung im Frontend ausgeben lassen? Ich habe eine Extension erstellt und obigen PHP-Code in die Klasse eingefügt und die Extension installiert. Doch wenn ich die Marker dann ins tt_news-Template einfüge, passiert nix...