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:
lib.externalRender = USER_INT
#lib.externalRender.if < lib.internalRender.if
#lib.externalRender.if.negate = 1
lib.externalRender {
userFunc = user_imagedb->load_ext_image
websrc = TEXT
websrc.field = title
}
Und so mein php
<?php
class user_imagedb {
public function load_ext_image($content,$conf) {
$x = $GLOBALS['TSFE']->cObj->cObjGetSingle($conf['userFunc.']['websrc'],$conf['userFunc.']['websrc.']);
var_Dump($x);
}
}
?>
Lustigerweise sagt mit var_dump() immer das $x keinen Inhalt hätte.
Weiß da jemand zufällig was ich falsch mache?
Auf den ersten Blick sehe ich kein groben Fehler.
Das könntest du ausprobieren:
...
$cObj = t3lib_div::makeInstance('tslib_cObj');
$x = $cObj->cObjGetSingle($conf['userFunc.']['websrc'], $conf['userFunc.']['websrc.']);
...
Hat leider nicht geholfen.
Die Ausgabe var_dump($x,$conf) ergibt immer nur
string(0) ""
array(3) {
["userFunc"]=>
string(28) "user_imagedb->load_ext_image"
["websrc"]=>
string(4) "TEXT"
["websrc."]=>
array(1) {
["field"]=>
string(5) "title"
}
}
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?
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:
lib.cObject = USER
lib.cObject {
userFunc = user_stristr->stristrTypoScript
userFunc {
titleField = TEXT
titleField.field = image_link
searchFor = fileadmin
foundText = TEXT
foundText.value = class="download"
notFoundText = TEXT
notFoundText.value = class="extern"
}
}
class user_stristr {
/**
* Extends the cObj possibilities with a stristr method
*
* @param string $content
* @param array $conf
* @return string
*/
public function stristrTypoScript($content = '', $conf = array()) {
// config
global $TSFE;
$local_cObj = $TSFE->cObj; // cObject
$conf = $conf['userFunc.']; // ts config
$searchFor = $conf['searchFor']; // get string
$titleField = $local_cObj->cObjGetSingle($conf['titleField'], $conf['titleField.']); // stdWrap for title
$foundText = $local_cObj->cObjGetSingle($conf['foundText'], $conf['foundText.']); // stdWrap for alternative Text
$notFoundText = $local_cObj->cObjGetSingle($conf['notFoundText'], $conf['notFoundText.']); // stdWrap for alternative Text 2
// let's go
if (stristr($titleField, $searchFor)) { // if keyword found
return $foundText; // return alternative text
} else { // keyword not found
return $notFoundText;
}
}
}
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
$conf['parameter'] bzw. $conf['parameter.']
erfolgt sondern über
$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
$GLOBALS['TSFE']->cObjGetSingle();
als auch mit
$cObj = t3lib_div::makeInstance('tslib_cObj');
$cObj->cObjGetSingle();
falls es Jemanden interessiert ( Zumindest hat mein Test das so ergeben )