Kann eine userFunc in der localconf.php im Backend Seiteneigenschaften verarbeiten?

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    19. 10. 2011, 10:09

    ich möchte gerne folgende condition im [b]pageTSconfig[/b] verwenden:

    [b][userFunc = user_pageHasThisBackendLayoutAssigned(5)][/b]

    dafür hab ich [b]zu testzwecken[/b] in der localconf.php folgende userFunc definiert:

    1. function user_pageHasThisBackendLayoutAssigned($cmd) {
    2. if ($cmd == 5) {
    3. return true;
    4. } else {
    5. return false;
    6. }
    7. }

    ...das funktioniert schon mal wie gewünscht/erwartet.

    [b]die userFunc soll im endeffekt folgendes machen:[/b]

    [i]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.[/i]

    [b]FRAGE:[/b] (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?


  • 1
  • SomehowLost SomehowLo...
    Jedi-Meister
    0 x
    278 Beiträge
    0 Hilfreiche Beiträge
    19. 10. 2011, 10:36

    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

    [url=http://www.andreas-hoffmeyer.de/]Andreas Hoffmeyer - Websites & mehr...[/url]
    [url=http://typo3-4-newbies.blogspot.de/]TYPO3 für Einsteiger: typo3-4-newbies.blogspot.de[/url]

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    19. 10. 2011, 10:52

    [quote="SomehowLost"]
    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.
    [/quote]

    danke für deine antwort.

    ich schätz ich kann in der localconf.php kein print_r($GLOBALS) sinnvoll ausführen, oder?

  • SomehowLost SomehowLo...
    Jedi-Meister
    0 x
    278 Beiträge
    0 Hilfreiche Beiträge
    19. 10. 2011, 10:56

    oh ja, stimmt.
    aber vielleicht hilft dir das weiter:
    [url=]http://www.typo3.net/forum/beitraege/sonstiges-2/106197/[/url]

    Gruß

    [url=http://www.andreas-hoffmeyer.de/]Andreas Hoffmeyer - Websites & mehr...[/url]
    [url=http://typo3-4-newbies.blogspot.de/]TYPO3 für Einsteiger: typo3-4-newbies.blogspot.de[/url]

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    19. 10. 2011, 11:22

    das würd mir im frontend (typoscript) weiterhelfen. aber im backend (tsconfig) bringt das leider nichts.

    [quote="SomehowLost"]
    oh ja, stimmt.
    aber vielleicht hilft dir das weiter:
    [url=]http://www.typo3.net/forum/beitraege/sonstiges-2/106197/[/url]

    Gruß
    [/quote]

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    19. 10. 2011, 11:35

    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...

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    20. 10. 2011, 08:57

    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)

  • Gernott Gernott
    Jedi-Meister
    0 x
    271 Beiträge
    3 Hilfreiche Beiträge
    01. 11. 2013, 08:53

    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):

    1. if($GLOBALS["TSFE"]->page["backend_layout"] > 0 && $GLOBALS["TSFE"]->page["backend_layout"] == $layout) {
    2. return true;
    3. }

    Ich habe auch $GLOBALS mit print_r ausgegeben. Dort findet man diese Werte nicht. Außer nach einem POST, was nicht weiterhilft.

  • Typo3_Chris Typo3_Chr...
    Jar Jar Binks
    0 x
    1 Beiträge
    0 Hilfreiche Beiträge
    15. 02. 2015, 17:49

    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):

    1. if(file_exists(dirname(__FILE__).'/../fileadmin/Template/php/user_backend_layout.php')) {
    2. require_once(dirname(__FILE__).'/../fileadmin/Template/php/user_backend_layout.php');
    3. }

    Die UserFunc im Page TSConfig:

    1. #True if backend_layout or backend_layout_next_level of the parent pages (traverses the tree to root page)
    2. [userFunc = user_searchBackendLayout(14)]
    3. #e.g add a content element layout
    4. TCEFORM.tt_content.layout.addItems {
    5. 22 = New Layout
    6. }
    7. [global]

    Und der Inhalt von user_backend_layout.php:

    1. function user_searchBackendLayout( $searched_backend_layout ) {
    2. //Check if current page backend_layout is set
    3. $cur_backend_layout = user_getBackendLayout();
    4. if ( ! empty( $cur_backend_layout ) ) {
    5. if ( $searched_backend_layout == $cur_backend_layout ) {
    6. return true;
    7. } else {
    8. return false;
    9. }
    10. } else {
    11. $pid = user_getCurrentPID();
    12. //Traverse the page tree till no pid is set or $pid = 0 (root)
    13. while ( ! empty( $pid ) ) {
    14. $cur_backend_layout = user_getBackendLayoutNextLevelByPID( $pid );
    15. //backend_layout_next_level not set, traverse up
    16. if ( empty( $cur_backend_layout ) ) {
    17. $pid = user_getParentPIDByPID( $pid );
    18. continue;
    19. }
    20.  
    21. //Backend_Layout found
    22. if ( $cur_backend_layout == $searched_backend_layout ) {
    23. return true;
    24. }
    25.  
    26. //backend_layout_next_level but does not match
    27. break;
    28. }
    29. }
    30.  
    31. return false;
    32. }
    33.  
    34. function user_getBackendLayoutByPID( $pid ) {
    35. $res = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( "backend_layout", "pages", "UID = " . $pid );
    36.  
    37. return $res["backend_layout"];
    38. }
    39.  
    40. function user_getBackendLayoutNextLevelByPID( $pid ) {
    41. $res = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( "backend_layout_next_level", "pages", "UID = " . $pid );
    42.  
    43. return $res["backend_layout_next_level"];
    44. }
    45.  
    46. function user_getParentPIDByPID( $pid ) {
    47. $res = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( "pid", "pages", "UID = " . $pid );
    48.  
    49. return $res["pid"];
    50. }
    51.  
    52.  
    53. function user_getBackendLayout() {
    54. $cur_backend_layout = null;
    55. if ( is_numeric( $GLOBALS["SOBE"]->pageinfo["backend_layout"] ) ) {
    56. return $GLOBALS["SOBE"]->pageinfo["backend_layout"];
    57. }
    58.  
    59. $cur_backend_layout = user_getBackendLayoutByPID( user_getCurrentPID() );
    60. if ( is_numeric( $cur_backend_layout ) ) {
    61. return $cur_backend_layout;
    62. }
    63.  
    64. return $cur_backend_layout;
    65. }
    66.  
    67. function user_getCurrentPID() {
    68. $pid = null;
    69.  
    70. if ( is_numeric( $GLOBALS["SOBE"]->viewId ) ) {
    71. //$GLOBALS["SOBE"]->viewId - is set if the content element is opened from the page view
    72. $pid = $GLOBALS["SOBE"]->viewId;
    73. } else if ( is_numeric( $_REQUEST["popViewId"] ) ) {
    74. //$_REQUEST["popViewId"] - is set if the content element is opened from e.g "Save Button"
    75. $pid = $_REQUEST["popViewId"];
    76. } else if ( is_numeric( $GLOBALS["SOBE"]->id ) ) {
    77. //Is set on the page properties view
    78. $pid = $GLOBALS["SOBE"]->id;
    79. } else {
    80. file_put_contents( "/usr/www/www.nova-wings.com/backend_layout.txt", print_r( $GLOBALS, true ) );
    81. }
    82.  
    83. return $pid;
    84. }

    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

  • 1