Linkhandler + tt_news: Single PID pro Kategorie setzen [Gelöst]

  • einpraegsam.net einpraegs...
    MacGyver
    0 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    10. 08. 2009, 16:32

    [b]Problem:[/b]
    Ü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.

    [b]Idee:[/b]
    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.

    [b]Umsetzung:[/b]
    Beispiel TS:
    [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
    }
    }
    [/TS]

    Dann noch eine kleine userFunc direkt mit Namen "user_linkhandler_helper.php" in fileadmin ablegen:

    1. <?php
    2.  
    3. // This class could manipulate the target pid of the linkhandler
    4. class user_linkhandler_helper {
    5.  
    6. // Main function linkhandler pid change
    7. function main($content = '', $conf = array()) {
    8. $this->conf = $conf['userFunc.']; // ts configuration
    9. $uid = $this->cObj->cObjGetSingle($this->conf['uid'], $this->conf['uid.']); // get tt_news uid
    10. $pid = $this->cObj->cObjGetSingle($this->conf['pid'], $this->conf['pid.']); // get default pid
    11. $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
    12. 'tt_news_cat.single_pid',
    13. '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)',
    14. 'tt_news.uid = ' . intval($uid),
    15. '',
    16. 'tt_news_cat_mm.sorting',
    17. 1
    18. );
    19. if ($res) $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
    20. 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
    21. return intval($row['single_pid']); // give single pid from category back
    22. } else { // no cat given or no single pid given
    23. return intval($pid); // give default pid back
    24. }
    25.  
    26. }
    27. }
    28. ?>

    Danach kann man die Single PID einfach über die Newskategorie setzen:
    [img]http://www.design-and-style.de/temp/typo3/tt_news_cat_single_pid.jpg[/img]

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

    Cheers, Alex

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/


  • 0 x
    23 Beiträge
    0 Hilfreiche Beiträge
    17. 11. 2011, 09:46

    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.

  • ammannd ammannd
    Leonidas
    0 x
    150 Beiträge
    0 Hilfreiche Beiträge
    09. 01. 2012, 15:25

    [quote="just2b"]
    ts muss mans halt noch aktivieren, aber das feature gibts
    [/quote]

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


  • 0 x
    19. 01. 2012, 13:37

    [quote="einpraegsam.net"]
    [b]Problem:[/b]
    Ü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.

    [b]Idee:[/b]
    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.

    [b]Umsetzung:[/b]
    Beispiel TS:
    [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
    }
    }
    [/TS]

    Dann noch eine kleine userFunc direkt mit Namen "user_linkhandler_helper.php" in fileadmin ablegen:

    1. <?php
    2.  
    3. // This class could manipulate the target pid of the linkhandler
    4. class user_linkhandler_helper {
    5.  
    6. // Main function linkhandler pid change
    7. function main($content = '', $conf = array()) {
    8. $this->conf = $conf['userFunc.']; // ts configuration
    9. $uid = $this->cObj->cObjGetSingle($this->conf['uid'], $this->conf['uid.']); // get tt_news uid
    10. $pid = $this->cObj->cObjGetSingle($this->conf['pid'], $this->conf['pid.']); // get default pid
    11. $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
    12. 'tt_news_cat.single_pid',
    13. '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)',
    14. 'tt_news.uid = ' . intval($uid),
    15. '',
    16. 'tt_news_cat_mm.sorting',
    17. 1
    18. );
    19. if ($res) $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
    20. 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
    21. return intval($row['single_pid']); // give single pid from category back
    22. } else { // no cat given or no single pid given
    23. return intval($pid); // give default pid back
    24. }
    25.  
    26. }
    27. }
    28. ?>

    Danach kann man die Single PID einfach über die Newskategorie setzen:
    [img]http://www.design-and-style.de/temp/typo3/tt_news_cat_single_pid.jpg[/img]

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

    Cheers, Alex
    [/quote]

    Danke Alex,

    das hat toll funktioniert.

  • anderlk anderlk
    R2-D2
    0 x
    112 Beiträge
    1 Hilfreiche Beiträge
    27. 04. 2015, 22:25

    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:

    1. <?php
    2. // This class could manipulate the target pid of the linkhandler
    3. class user_linkhandler_helper {
    4.  
    5. // Main function linkhandler pid change
    6. function main($content = '', $conf = array()) {
    7. $this->conf = $conf['userFunc.']; // ts configuration
    8. $uid = $this->cObj->cObjGetSingle($this->conf['uid'], $this->conf['uid.']); // get news uid
    9. $pid = $this->cObj->cObjGetSingle($this->conf['pid'], $this->conf['pid.']); // get default pid
    10. $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
    11. 'sys_category.single_pid',
    12. '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)',
    13. 'tx_news_domain_model_news.uid = ' . intval($uid),
    14. '',
    15. 'sys_category_record_mm.sorting',
    16. 1
    17. );
    18. if ($res) $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
    19. 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
    20. return intval($row['single_pid']); // give single pid from category back
    21. } else { // no cat given or no single pid given
    22. return intval($pid); // give default pid back
    23. }
    24.  
    25. }
    26. }
    27. ?>

    Gruß Andreas