[Frage] USER_FUNC und cObjGetSingle [Gelöst] TYPO3-Version: 6.0.6

  • Chrissli Chrissli
    Jedi-General
    0 x
    1015 Beiträge
    28 Hilfreiche Beiträge
    16. 09. 2013, 13:36

    Hallo zusammen,

    ich versuche gerade Inhalte per USER_INT selbst zu rendern, i.d.R. klappt das auch sehr gut, allerdings habe ich nun ein Problem mit den übergebenen werten, vielleicht kann mir hier jemand weiterhelfen.

    So sieht mein USER_INT aus:

    1. lib.externalRender = USER_INT
    2. #lib.externalRender.if < lib.internalRender.if
    3. #lib.externalRender.if.negate = 1
    4. lib.externalRender {
    5. userFunc = user_imagedb->load_ext_image
    6. websrc = TEXT
    7. websrc.field = title
    8. }

    Und so mein php

    1. <?php
    2. class user_imagedb {
    3. public function load_ext_image($content,$conf) {
    4.  
    5.  
    6. $x = $GLOBALS['TSFE']->cObj->cObjGetSingle($conf['userFunc.']['websrc'],$conf['userFunc.']['websrc.']);
    7. var_Dump($x);
    8. }
    9. }
    10. ?>

    Lustigerweise sagt mit var_dump() immer das $x keinen Inhalt hätte.
    Weiß da jemand zufällig was ich falsch mache?

    God's in his heaven, all's right with the world

  • einpraegsam.net einpraegs...
    MacGyver
    1 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    17. 09. 2013, 09:02 - Lösung

    Nein das stimmt nicht, bzw. ist eine Extension auch nur eine UserFunc. Was auch dagegen spricht, ist die Tatsache, dass ich das auch schon hundertmal so verwendet habe.

    Hier mal ein funktionierendes Beispiel von einem unserer Projekte:

    1. lib.cObject = USER
    2. lib.cObject {
    3. userFunc = user_stristr->stristrTypoScript
    4. userFunc {
    5. titleField = TEXT
    6. titleField.field = image_link
    7. searchFor = fileadmin
    8. foundText = TEXT
    9. foundText.value = class="download"
    10. notFoundText = TEXT
    11. notFoundText.value = class="extern"
    12. }
    13. }

    1. class user_stristr {
    2.  
    3. /**
    4. * Extends the cObj possibilities with a stristr method
    5. *
    6. * @param string $content
    7. * @param array $conf
    8. * @return string
    9. */
    10. public function stristrTypoScript($content = '', $conf = array()) {
    11. // config
    12. global $TSFE;
    13. $local_cObj = $TSFE->cObj; // cObject
    14. $conf = $conf['userFunc.']; // ts config
    15. $searchFor = $conf['searchFor']; // get string
    16. $titleField = $local_cObj->cObjGetSingle($conf['titleField'], $conf['titleField.']); // stdWrap for title
    17. $foundText = $local_cObj->cObjGetSingle($conf['foundText'], $conf['foundText.']); // stdWrap for alternative Text
    18. $notFoundText = $local_cObj->cObjGetSingle($conf['notFoundText'], $conf['notFoundText.']); // stdWrap for alternative Text 2
    19.  
    20. // let's go
    21. if (stristr($titleField, $searchFor)) { // if keyword found
    22. return $foundText; // return alternative text
    23. } else { // keyword not found
    24. return $notFoundText;
    25. }
    26. }
    27. }

    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/

  • Hilfreichster Beitrag

  • einpraegsam.net einpraegs...
    MacGyver
    1 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    16. 09. 2013, 14:25 - Hilfreichster Beitrag

    Auf den ersten Blick sehe ich kein groben Fehler.

    Das könntest du ausprobieren:

    • Was ist wenn du USER statt USER_INT nutzt (gibt Probleme wenn man eine _INT innerhalb einer anderen _INT nutzt
    • Was ist wenn du testweise das cObj instanzierst (Bsp siehe unten)?

    1. ...
    2. $cObj = t3lib_div::makeInstance('tslib_cObj');
    3. $x = $cObj->cObjGetSingle($conf['userFunc.']['websrc'], $conf['userFunc.']['websrc.']);
    4. ...

    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/


  • 1
  • einpraegsam.net einpraegs...
    MacGyver
    1 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    16. 09. 2013, 14:25

    Auf den ersten Blick sehe ich kein groben Fehler.

    Das könntest du ausprobieren:

    • Was ist wenn du USER statt USER_INT nutzt (gibt Probleme wenn man eine _INT innerhalb einer anderen _INT nutzt
    • Was ist wenn du testweise das cObj instanzierst (Bsp siehe unten)?

    1. ...
    2. $cObj = t3lib_div::makeInstance('tslib_cObj');
    3. $x = $cObj->cObjGetSingle($conf['userFunc.']['websrc'], $conf['userFunc.']['websrc.']);
    4. ...

    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/

  • Chrissli Chrissli
    Jedi-General
    0 x
    1015 Beiträge
    28 Hilfreiche Beiträge
    16. 09. 2013, 17:28

    Hat leider nicht geholfen.
    Die Ausgabe var_dump($x,$conf) ergibt immer nur

    1. string(0) ""
    2. array(3) {
    3. ["userFunc"]=>
    4. string(28) "user_imagedb->load_ext_image"
    5. ["websrc"]=>
    6. string(4) "TEXT"
    7. ["websrc."]=>
    8. array(1) {
    9. ["field"]=>
    10. string(5) "title"
    11. }
    12. }

    Ich hab irgendwo gelesen, dass cObjGetSingle() nur innerhalb einer Extension/Plugin funktioniert.
    Das klingt für mich zwar etwas unlogisch aber könnte es evtl. doch daran liegen?

    God's in his heaven, all's right with the world

  • einpraegsam.net einpraegs...
    MacGyver
    1 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    17. 09. 2013, 09:02

    Nein das stimmt nicht, bzw. ist eine Extension auch nur eine UserFunc. Was auch dagegen spricht, ist die Tatsache, dass ich das auch schon hundertmal so verwendet habe.

    Hier mal ein funktionierendes Beispiel von einem unserer Projekte:

    1. lib.cObject = USER
    2. lib.cObject {
    3. userFunc = user_stristr->stristrTypoScript
    4. userFunc {
    5. titleField = TEXT
    6. titleField.field = image_link
    7. searchFor = fileadmin
    8. foundText = TEXT
    9. foundText.value = class="download"
    10. notFoundText = TEXT
    11. notFoundText.value = class="extern"
    12. }
    13. }

    1. class user_stristr {
    2.  
    3. /**
    4. * Extends the cObj possibilities with a stristr method
    5. *
    6. * @param string $content
    7. * @param array $conf
    8. * @return string
    9. */
    10. public function stristrTypoScript($content = '', $conf = array()) {
    11. // config
    12. global $TSFE;
    13. $local_cObj = $TSFE->cObj; // cObject
    14. $conf = $conf['userFunc.']; // ts config
    15. $searchFor = $conf['searchFor']; // get string
    16. $titleField = $local_cObj->cObjGetSingle($conf['titleField'], $conf['titleField.']); // stdWrap for title
    17. $foundText = $local_cObj->cObjGetSingle($conf['foundText'], $conf['foundText.']); // stdWrap for alternative Text
    18. $notFoundText = $local_cObj->cObjGetSingle($conf['notFoundText'], $conf['notFoundText.']); // stdWrap for alternative Text 2
    19.  
    20. // let's go
    21. if (stristr($titleField, $searchFor)) { // if keyword found
    22. return $foundText; // return alternative text
    23. } else { // keyword not found
    24. return $notFoundText;
    25. }
    26. }
    27. }

    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/

  • Chrissli Chrissli
    Jedi-General
    0 x
    1015 Beiträge
    28 Hilfreiche Beiträge
    17. 09. 2013, 09:21

    Danke, sowas hatte ich mir schon gedacht, aber man weiß ja nie.

    Ich habe soeben den Fehler gefunden.

    Ich hatte zuerst getestet, ob es einen Unterschied macht, ob ich die
    Parameter direkt dem USER-Objekt zuordne oder der userFunc und hatte dabei keinen Unterschied bemerkt.

    Natürlich besteht der Unterschied zumindest darin, dass der Parameterzugriff dann nicht
    über

    1. $conf['parameter'] bzw. $conf['parameter.']

    erfolgt sondern über
    1. $conf['userFunc.']['parameter'] bzw. $conf['userFunc.']['parameter.']

    bzw. andersherum je nach Verwendung, dann klappt's auch mit dem Nachbarn.
    Soll heissen ich habe auf Parameter zugegriffen die in diesem Kontext nicht gesetzt ( NULL ) waren.

    Vielen Dank für deine Hilfe.

    P.S.:
    cObjGetSingle liefert das selbe Ergebnis, sowohl mit Zugriff über

    1. $GLOBALS['TSFE']->cObjGetSingle();
    2. als auch mit
    3. $cObj = t3lib_div::makeInstance('tslib_cObj');
    4. $cObj->cObjGetSingle();

    falls es Jemanden interessiert ( Zumindest hat mein Test das so ergeben )

    God's in his heaven, all's right with the world

  • 1