Zum Inhalt springen

tt_news - LATEST/LIST : Wie kann ich über Genericmarker den Link zum Artikel um die Category-ID erweitern?

Erstellt am 30. Oktober 2012 · 8 Antworten · letzte Antwort am 13. November 2012

Tags: Links, tt_news, Frage

Sebastian78Do ·

Hi,

Google und Forumssuche haben mich bisher nicht weitergebracht mit dieser Fragestellung.

Ich möchte über einen eigenen Genericmarker den Link jeweils um die Category-ID erweitern,
da tt_news diese ID leider nicht weitergibt.

Ziel ist es im Zusammenspiel mit Cooluri sauber aufgebaute URLs zu erhalten.

Ein weiteres Problem stellen die in den Templates bereits vorhandenen Marker wie z.B.
###NEWS_TITLE###, ###NEWS_IMAGE### und ###NEWS_SUBHEADER###.
Diese Elemente möchte ich natürlich ebenso mit dem neuen Link versehen.
Ergo müsste für jeder Marker durch einen Genericmarker ersetzt werden,
der den neuen Link enthält.

Wie kann ich einen Genericmarker erstellen, der den Artikellink um die Category-ID
des entsprechenden Artikels erweitert?

Vielen Dank im Voraus für Eure Hilfe 😮)

Julian.​Hofmann ·

Hallo Sebastian.

Sebastian78Do schrieb

da tt_news diese ID leider nicht weitergibt.

Na, da bist Du etwas voreilig, und solltest Dich mit tt_news nochmal unterhalten ;-)

tt_news stellt in einem Register die ID bereit: newsCategoryUid
Somit brauchst Du nur noch einen Genericmarker definieren (z.B. als TEXT-cObject) und den Wert aus dem Register auslesen.

Viele Grüße
Julian

Sebastian78Do ·

Hi Julian,

danke Dir.
Als Anfänger musste ich jetzt zwar etwas basteln...aber es funktioniert einwandfrei:

  genericmarkers{
   
    LIST{
     
      titlelink = TEXT
      titlelink{
        field = title
        wrap = |
        
        typolink = 1
        typolink {
          parameter = 62 #id der detailseite
          additionalParams = &tx_ttnews[tt_news]={field:uid}&tx_ttnews[cat]={register:newsCategoryUid}
          additionalParams.insertData = 1
        }
      }
      
    }

Viele Grüße,

Sebastian

Julian.​Hofmann ·
Sebastian78Do schrieb

Als Anfänger musste ich jetzt zwar etwas basteln...

Dafür hast Du aber vermutlich auch mehr dabei gelernt, als mit einer fertigen Lösung als Antwort :-)
...und wenn's gehakt hätte, hätte es von mir natürlich auch mehr Hinweise zur Lösung gegeben.

Sebastian78Do ·

Da hast Du recht 😃
Aber einen kleinen Tipp bräuchte ich noch.

Wie kann ich das Artikelbild der jeweiligen Liste 1:1 übernehmen
und dabei nur den Artikellink wie im obigen Codeschnipsel überschreiben.

Ich weiss nicht wie ich die Vererbung (< plugin.tt_news.displayList.image)
in diesem Zusammenhang verwenden kann.

Kleiner Nachtrag:
newsCategoryUid ist anscheinend doch nicht der richtige Ansatz in meinem Fall.
Ich binde z.B. die Latest-Liste (Screenshot rechts) via Columna auf anderen Seiten ein.
Dort greift natürlich newsCategoryUid nicht mehr. Kurz: Die Kategorie ID bleibt leer.

Gibt es andere Wege um an die CategoryUid zu kommen?

screenshot.jpg

Julian.​Hofmann ·
Sebastian78Do schrieb

Wie kann ich das Artikelbild der jeweiligen Liste 1:1 übernehmen und dabei nur den Artikellink wie im obigen Codeschnipsel überschreiben.

Beim Titel dürftest Du bereits auf den Subpart ###LINK_ITEM### gestoßen sein, der auch rund um das Bild für den Link sorgt.
Dieser wird erzeugt durch

				$this->local_cObj->setCurrentVal($row['type'] == 1 ? $row['page'] : $row['ext_url']);
$wrappedSubpartArray['###LINK_ITEM###'] = $this->local_cObj->typolinkWrap($this->conf['pageTypoLink.']);

D.h. es sollte über pageTypoLink der volle Umfang der typolink-Funktion zu Verfügung stehen. In Deinem Fall wäre v.a. interessant auf die additionalParams zuzugreifen:

plugin.tt_news.pageTypoLink.additionalParams.data = register:newsCategoryUid
plugin.tt_news.pageTypoLink.additionalParams.wrap = &tx_ttnews[cat]=|

...was aber wohl dieses Problem noch nicht löst:

Sebastian78Do schrieb

newsCategoryUid ist anscheinend doch nicht der richtige Ansatz in meinem Fall.

Ein Weg wäre, generell statt LATEST LIST einzusetzen. Wenn Du Dir des Mehraufwand beim Rendern bewusst bist und das im konkreten Projekt ok ist, könnte das eine Lösung sein.
Ansonsten müsstest Du Dir eine eigene Lösung basteln, die die mm-Relation zu den Kategorien auflöst und Dir als Marker bereitstellt... o.O

Sebastian78Do ·

Leider greift plugin.tt_news.pageTypoLink.additionalParams nicht.
Der entsprechende Link wird nicht um den benötigten Parameter erweitert.
Cache habe ich natürlich gelöscht.

Anscheinend kommt man nicht um genericmarkers rum.

Ich nutze rgnewsce. Demnach muss das TS für den Marker
auf der erste Bild des ersten Content-Elements zugreifen.

Wie muss ich den Marker aufbauen um das Bild darstellen zu können?

Ich denke es macht durchaus Sinn auf LIST anstatt LATEST zu setzen.
LIST verhält sich ohne tx_ttnews[cat] in der URL ja wie LATEST.
Wie kann ich es erreichen, dass die LIST in der Box rechts (siehe Screenshot in meinem vorherigen Post)
die aktuelle Kategorie ignoriert, die man z.B. im CATMENU links anklickt?
Die LIST im Content lädt ja immer die Artikel der Kategorie, die im
CATMENU links angeklickt wird...

Zu Deiner Marker-Alternative:
Wie sieht es mit einem SELECT innerhalb des genericmarkers aus,
das die CategoryID des aktuellen Artikels ausgibt?
Wie kann ich die ErgebnisID dem Link übergeben?
So könnte man register:newsCategoryUid komplett umgehen...
Irgendwie kann ich Werte via SELECT nicht aus der Tabelle tt_news_cat_mm abgreifen.

Sebastian78Do ·

Ich habe jetzt einen anderen Ansatz verfolgt die CategoryID des aktuellen Artikels in den Artikellink zu bringen.

Die ID frage ich über eine userFunc ab:

	class user_linkhandler_helper {
 
		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
                    
                    //$GLOBALS['TYPO3_DB']->store_lastBuiltQuery = 1;
                    
                    $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                                'uid_foreign', //select fields
                                'tt_news JOIN tt_news_cat_mm ON (tt_news.uid=tt_news_cat_mm.uid_local)', //from table
                                'tt_news.uid = ' . intval($uid), //where clause
                                '', //group by
                                '', //order by
                                '' //limit
                            );
                    
                    //echo $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery."<br><br>";
                    
                    if ($res) $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
                    if (is_array($row) && intval($row['uid_foreign']) > 0) { // if there is a category to the current news
                        return intval($row['uid_foreign']); // give uid from category back
                    } else { // no cat given or no single pid given
                        return 'no id';
                    }
 
		}
                
                
	}

Ich hänge nun fest....wie bekomme ich den Rückgabewert der Funktion in den Link?
Die Links ersetze ich durch genericmarkers. Hier das TS:

  genericmarkers{
    data = title, short, uid, image
    
    LIST{
      
      titlelink = COA
      titlelink{

        10 = TEXT  
        10{
          wrap=|
          field=title
          
          typolink = 1
          typolink {
            parameter = 62
            additionalParams = &tx_ttnews[tt_news]={field:uid}&tx_ttnews[cat]={register:newsCategoryUid}
            additionalParams.insertData = 1
          }

          
        }
        
        /*
        Wie bekomme ich den Rückgabewert in die additionalParams? 

        10 = USER
        10.userFunc = user_linkhandler_helper->main
        10.userFunc{
          uid = TEXT
          uid.field = uid
        }
        */     
        
      }

}

Die ideale Lösung wäre nach wie vor das <!--###LINK_ITEM###-->-Tag durch die CategoryID zu erweitern.
Leider habe ich in diesem Zusammenhang noch keine Lösung gefunden.

Sebastian78Do ·

Hallo zusammen,

nach langer Recherche hab ich nun die Lösung:

genericmarkers{
    data = title, short, uid, image
    
    LIST{
      
      titlelink = CONTENT
      titlelink{
        
        table = tt_news
        select {
          selectFields = tt_news.uid AS uid, uid_foreign, title
          join =  tt_news_cat_mm ON (tt_news.uid=tt_news_cat_mm.uid_local)
          andWhere.dataWrap = tt_news.uid = {field:uid}
          andWhere.insertData = 1
          
          pidInList = 61 #id des systemordners, der die news enthält
          recursive = 3  #rekursions-tiefe      
        }
        

        renderObj = COA
        renderObj {
          10 = TEXT      
          10.wrap = |    
          10.field = title          
         
          10.typolink = 1
          10.typolink {
            parameter = 62 #id der seite, die die artikeldetailseite enthält
            additionalParams = &tx_ttnews[tt_news]={field:uid}&tx_ttnews[cat]={field:uid_foreign}
            additionalParams.insertData = 1
          }
        }
       
      }

   }

}