Kathara
Kathara

Reputation: 1290

TYPO3 8.7.8 restrict available content-elements in backend-layout column

I've been searching over and over but yet haven't found something that would work...

TYPO3 8.7.8

root           - backend-layout ("Main") for this and all subpages   (id=1)
|
 - home        - backend-layout ("Home") for this page only          (id=2)
|
 - subpage     - same backend-layout as root                         (id=3)

both backend-layouts look the same:

________________________________
|             Top              |
|______________________________|
| main-content | right-content |
|______________|_______________|

The top-section is named differently and to be used differently.

The top-section of the "Main"-backend-layout should have only allowed the images-content-element.

cType.allowed = image

The top-section of the "Home"-backend-layout should have only allowed the text-content-element

cType.allowed = text

The last two things I've tried is

first: restricting it using the GlobalVars in typoscript

[globalVar = TSFE:id != 2]&&[globalVar = TSFE:colPos=2]
  TCEFORM.tt_content.CType.removeItems := addToList(header,text,bullets,table,uploads,multimedia,mailform,search,login,splash,menu,shortcut,list,script,div,html,media)
  TCEFORM.tt_content.CType.keepItems := addToList(image)
[end]

second: changing the properties of the layout in the database

backend_layout {
    colCount = 2
    rowCount = 2
    rows {
        1 {
            columns {
                1 {
                    name = Parallax
                    colspan = 2
                    colPos = 2
                    # The following 3 lines have been added through me
                    cType {
                        allowed = text
                    }
                }
            }
        }
        2 {
            columns {
                1 {
                    name = Content-Main
                    colPos = 0
                }
                2 {
                    name = Content-Right
                    colPos = 1
                }
            }
        }
    }
}

I've tried quite a few other things and I'm not sure if I would find them again. I'm not even sure this can be done in TYPO3 8.x. The options from creating a backend-layout in typo are really restricted. You can only type a name for the column and define the colPos.

Did I do something wrong for TYPO3 8.x that my configurations didn't work? Do I need different properties? Or is it just not intended to work this way anymore in this version of TYPO3? Because it seems that it has worked before...

I'm still quite a novice to TYPO3 and I would really appreciate your help but be specific on where to change what because otherwise I'll be lost again.... ^^

Thanks!

Upvotes: 3

Views: 6317

Answers (3)

Kathara
Kathara

Reputation: 1290

Thanks to Joey I found the extension to work with: Content Defender

And I found out how to add my backend_layouts through ts; Add the following to the PageTS of the root page

mod.web_layout.BackendLayouts {
   Home {
      title = Home
      config {
        backend_layout {
          colCount = 2
          rowCount = 2
          rows {
            1 {
              columns {
                1 {
                  name = Parallax
                  colspan = 2
                  colPos = 2
                  # allowed and disallowed only work through the extension content_defender (or gridelements)
                  allowed {
                    CType = gi_customstyler_parallax_content
                  }
                }
              }
            }
            2 {
              columns {
                1 {
                  name = Main
                  colPos = 0
                  disallowed {
                    CType = gi_customstyler_bg_image,gi_customstyler_parallax_content
                  }
                }
                2 {
                  name = Right
                  colPos = 1
                  disallowed {
                    CType = gi_customstyler_bg_image,gi_customstyler_parallax_content
                  }
                }
              }
            }
          }
        }
     }
  }
  Main {
      title = Main
      config {
        backend_layout {
          colCount = 2
          rowCount = 2
          rows {
            1 {
              columns {
                1 {
                  name = Titel-Hintergrund
                  colspan = 2
                  colPos = 2
                  allowed {
                    CType = gi_customstyler_bg_image
                  }
                }
              }
            }
            2 {
              columns {
                1 {
                  name = Main
                  colPos = 0
                  disallowed {
                    CType = gi_customstyler_bg_image,gi_customstyler_parallax_content
                  }
                }
                2 {
                  name = Right
                  colPos = 1
                  disallowed {
                    CType = gi_customstyler_bg_image,gi_customstyler_parallax_content
                  }
                }
              }
            }
          }
        }
     }
  }
}

This way the two backend_layouts are available on the page-configurations with the additional conditions of restricted content-elements. As you can see, this can also be used with custom content-elements.

It took quite a while for me to figure this out (as novice) and I hope that this might help someone else...

Upvotes: 5

András Ottó
András Ottó

Reputation: 7695

You are on the good way, but the condition is not correct.

Prolbem one: There is no TSFE available for the BE.

In the "globalString" condition, key "TSFE:" will not work because the TSFE global object only exists in the FE context. The "LIT:" key will not work either as it is used to compare TypoScript constants, which are not available in the BE context.

Reference: https://docs.typo3.org/typo3cms/TSconfigReference/Conditions/Index.html

You need to use the "page" instead of the "TSFE:page|". These are equal, but "page" can be used for both frontend and backend but "TSFE" is only for frontend.

The second problem is, that for the colPos you need to access the GP (GetPost) helper instead of the TSFE.

So try to change the condition like this:

[page|uid != 2]&&[globalVar = GP:colPos==2]
  TCEFORM.tt_content.CType.removeItems := addToList(header,text,bullets,table,uploads,multimedia,mailform,search,login,splash,menu,shortcut,list,script,div,html,media)
  TCEFORM.tt_content.CType.keepItems := addToList(image)
[end]

Note: there is no CType restriction for the BE layouts, so both "cType" and "allowed" are wrong.

Upvotes: 2

StatiX
StatiX

Reputation: 874

Try something like this :

    backend_layout {
      colCount = 2
      rowCount = 2
      rows {
        1 {
          columns {
            1 {
              name = Parallax
              colspan = 2
              colPos = 2
              allowed = text
            }
          }
        }
        2 {
          columns {
            1 {
              name = Content-Main
              colPos = 0
            }
            2 {
              name = Content-Right
              colPos = 1
            }
          }
        }
      }
    }

Upvotes: 2

Related Questions