ich möchte gerne folgende condition im pageTSconfig verwenden:
[userFunc = user_pageHasThisBackendLayoutAssigned(5)]
dafür hab ich zu testzwecken in der localconf.php folgende userFunc definiert:
function user_pageHasThisBackendLayoutAssigned($cmd) {
if ($cmd == 5) {
return true;
} else {
return false;
}
}
...das funktioniert schon mal wie gewünscht/erwartet.
die userFunc soll im endeffekt folgendes machen:
wenn ich im backend eine seite im seitenbaum auswähle, soll die userFunc überprüfen, ob der seite das backend_layout zugewiesen wurde, das der userFunc übergeben wird. falls nicht, soll überprüft werden, ob in den übergeordneten Seiten ein backend_layout_next_level entsprechend zugewiesen wurde.
FRAGE: (wie) kann ich in der localconf.php auf die entsprechenden felder zugreifen?
habe u.a. versucht auf methoden der klasse t3lib_BEfunc zuzugreifen, aber das funktioniert irgendwie nicht. die t3lib_div kann ich in der localconf.php anscheinend verwenden, aber die bringt mir glaub ich in meinem fall nicht weiter, oder?
Hallo,
Infos zur Sete findest du in der globalen Variable $GLOBALS.
Schau einfach mittels print_r($GLOBALS); wo das alles genau steht und prüfe dann entsprechend darauf.
Viele Grüße
SomehowLost schrieb
Infos zur Sete findest du in der globalen Variable $GLOBALS.
Schau einfach mittels print_r($GLOBALS); wo das alles genau steht und prüfe dann entsprechend darauf.
danke für deine antwort.
ich schätz ich kann in der localconf.php kein print_r($GLOBALS) sinnvoll ausführen, oder?
oh ja, stimmt.
aber vielleicht hilft dir das weiter:
#106197
Gruß
das würd mir im frontend (typoscript) weiterhelfen. aber im backend (tsconfig) bringt das leider nichts.
SomehowLost schrieb
oh ja, stimmt.
aber vielleicht hilft dir das weiter:
#106197
Gruß
ich hab jetzt schon mal über $GLOBALS['TYPO3_DB'] datenbankabfragen in der localconf.php zustande gebracht.
jetzt bräucht ich nur noch die uid der seite, auf der ich mich im seitenbaum im backend (page module) befinde, dann sollt mein problem zu lösen sein!
wie komm ich zur uid der aktuellen seite im seitenbaum?
ich kann (bzw. weiss es nicht wie es geht) in der localconf.php wie gesagt leider die $GLOBALS nicht debuggen...
mit t3lib_div::_GET('id') kann man in der seitenübersicht (columns) die uid der aktuellen seite auslesen.
leider funktioniert das an folgenden stellen nicht:
- seiteneigenschaften
- neues content element auf der seite erstellen
- ein content element auf der seite bearbeiten
gibts vielleicht in der $GLOBALS einen eintrag, der mir helfen kann die uid (oder noch besser die rootline) der aktuellen seite zu erhalten? (leider weiss ich nicht, wie man die $GLOBALS in der localconf.php debuggen kann)
Hallo mostwanted,
hast du das problem lösen können?
Ich habe viel gegooglet und nur das gefunden (funktioniert nur im Frontend - nicht in der page TSconfig):
if($GLOBALS["TSFE"]->page["backend_layout"] > 0 && $GLOBALS["TSFE"]->page["backend_layout"] == $layout) {
return true;
}
Ich habe auch $GLOBALS mit print_r ausgegeben. Dort findet man diese Werte nicht. Außer nach einem POST, was nicht weiterhilft.
Ich hatte heute das gleiche Problem und wollte jetzt mal meine Lösung posten.
Über die LocalConfiguration.php binde ich meine userFunc ein (In Page TSConfig geht includeLibs nicht):
if(file_exists(dirname(__FILE__).'/../fileadmin/Template/php/user_backend_layout.php')) {
require_once(dirname(__FILE__).'/../fileadmin/Template/php/user_backend_layout.php');
}
Die UserFunc im Page TSConfig:
#True if backend_layout or backend_layout_next_level of the parent pages (traverses the tree to root page)
[userFunc = user_searchBackendLayout(14)]
#e.g add a content element layout
TCEFORM.tt_content.layout.addItems {
22 = New Layout
}
[global]
Und der Inhalt von user_backend_layout.php:
function user_searchBackendLayout( $searched_backend_layout ) {
//Check if current page backend_layout is set
$cur_backend_layout = user_getBackendLayout();
if ( ! empty( $cur_backend_layout ) ) {
if ( $searched_backend_layout == $cur_backend_layout ) {
return true;
} else {
return false;
}
} else {
$pid = user_getCurrentPID();
//Traverse the page tree till no pid is set or $pid = 0 (root)
while ( ! empty( $pid ) ) {
$cur_backend_layout = user_getBackendLayoutNextLevelByPID( $pid );
//backend_layout_next_level not set, traverse up
if ( empty( $cur_backend_layout ) ) {
$pid = user_getParentPIDByPID( $pid );
continue;
}
//Backend_Layout found
if ( $cur_backend_layout == $searched_backend_layout ) {
return true;
}
//backend_layout_next_level but does not match
break;
}
}
return false;
}
function user_getBackendLayoutByPID( $pid ) {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( "backend_layout", "pages", "UID = " . $pid );
return $res["backend_layout"];
}
function user_getBackendLayoutNextLevelByPID( $pid ) {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( "backend_layout_next_level", "pages", "UID = " . $pid );
return $res["backend_layout_next_level"];
}
function user_getParentPIDByPID( $pid ) {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( "pid", "pages", "UID = " . $pid );
return $res["pid"];
}
function user_getBackendLayout() {
$cur_backend_layout = null;
if ( is_numeric( $GLOBALS["SOBE"]->pageinfo["backend_layout"] ) ) {
return $GLOBALS["SOBE"]->pageinfo["backend_layout"];
}
$cur_backend_layout = user_getBackendLayoutByPID( user_getCurrentPID() );
if ( is_numeric( $cur_backend_layout ) ) {
return $cur_backend_layout;
}
return $cur_backend_layout;
}
function user_getCurrentPID() {
$pid = null;
if ( is_numeric( $GLOBALS["SOBE"]->viewId ) ) {
//$GLOBALS["SOBE"]->viewId - is set if the content element is opened from the page view
$pid = $GLOBALS["SOBE"]->viewId;
} else if ( is_numeric( $_REQUEST["popViewId"] ) ) {
//$_REQUEST["popViewId"] - is set if the content element is opened from e.g "Save Button"
$pid = $_REQUEST["popViewId"];
} else if ( is_numeric( $GLOBALS["SOBE"]->id ) ) {
//Is set on the page properties view
$pid = $GLOBALS["SOBE"]->id;
} else {
file_put_contents( "/usr/www/www.nova-wings.com/backend_layout.txt", print_r( $GLOBALS, true ) );
}
return $pid;
}
Das finden der PID war erstaunlich schwierig. SOBE->pageinfo["id"] ist nicht immer gesetzt und auch sonst hab ich keine "schöne" Option gefunden die PID zu bekommen. Bisher scheine ich mit meiner Lösung aber alle Fälle abzudecken.
Vg,
Chris