TYPO3 8.7.8如何限制后台布局列中可用的内容元素?

3
我已经搜索了很多次,但仍然没有找到可行的解决方案...
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)

两个后端布局看起来相同:

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

顶部区域的名称和使用方式不同。
“主要”后端布局的顶部区域只允许使用图像内容元素。
cType.allowed = image

"Home" 后台布局的顶部区域应该只允许使用文本内容元素。
cType.allowed = text

我尝试的最后两个方法是:
首先:使用typoscript中的GlobalVars限制它。
[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]

第二步:更改数据库中布局的属性

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

我尝试过其他的一些方法,但我不确定能否再次找到它们。我甚至不确定在TYPO3 8.x中是否可以实现这个功能。在TYPO中创建后端布局的选项非常有限。你只能为列输入名称并定义colPos。

我在TYPO3 8.x上做错了什么,以至于我的配置没有起作用吗?我需要不同的属性吗?还是在这个版本的TYPO3中,这种方式不再适用?因为它似乎以前曾经工作过......

我对TYPO3仍然是一个新手,非常感谢你的帮助,但请具体说明在哪里更改什么,否则我会再次迷失.... ^^

谢谢!


4
关于 EXT:content_defender 插件 https://extensions.typo3.org/extension/content_defender/该插件可帮助 TYPO3 站点管理员增强网站内容的安全性和保护用户隐私。它可以防止机器人攻击和滥用表单、隐藏敏感信息并限制未经授权的访问等。如果您需要提高 TYPO3 站点的安全性,此插件可能是个不错的选择。 - jokumer
我可以尝试这样做,但是难道没有任何扩展程序实现这个功能吗? - Kathara
@jokumer 哈哈!!! 它起作用了!!! content_defender 似乎完美地运行。令人遗憾的是,我必须调整数据库中的记录。也许可以通过 mod.web_layout.BackendLayouts 来实现这一点,但我不知道需要做什么和如何做,以便在特定页面上使用定义为此类的后端布局。目前只有根页面有一个模板……如果有人能给我指点如何做这件事(尤其是第二部分),甚至是一份说明书,我将非常高兴和宽慰…… - Kathara
3个回答

4

多亏了Joey,我找到了可以使用的扩展程序:Content Defender

而且我发现如何通过ts添加我的backend_layouts;在根页面的PageTS中添加以下内容:

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

通过这种方式,两个后端布局将在带有受限制内容元素附加条件的页面配置中可用。正如你所看到的,这也可以与自定义内容元素一起使用。

对于我这样的初学者来说,花费了相当长的时间才弄清楚这一点,希望这能帮助其他人...


2
尝试像这样做:

试试以下方法:

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

2
你考虑过使用 mod.web_layout.BackendLayouts 注册你的后端布局而不是使用数据库记录吗? - StatiX
2
我猜想只有在安装了“gridelements”扩展时,“allowed”设置才能生效。 - Paul Beck
2
还有Content Defender扩展,但是是的,这还不是TYPO3核心功能。顺便说一句:即将推出的Gridelements版本将与Content Defender共享相同的语法,以允许和禁止特定的CType、list_type和tx_gridelements_backend_layout值 - 即内容元素、插件和网格元素。 - Jo Hasenau
@StatiX,我其实不知道把它放在哪里才能让它起作用。我是否需要删除已有的后端布局,以便稍后通过typoscript访问它们? - Kathara
@PaulBeck和Joey,我遇到了gridelements,但没有意识到我需要使用“allowed”(在我找到的问题中从未提到...)。感谢你们的指引。我将尝试András Ottó的解决方案。如果那行不通,我会尝试使用一个扩展程序。 感谢你们的帮助 :) - Kathara
1
@PaulBeck允许的功能与content_defender一起使用:)我已经使用这个扩展名使其正常工作了 :) - Kathara

2

你走在正确的路上,但条件不正确。

问题一:BE没有可用的TSFE。

在“globalString”条件中,“TSFE:”关键字不起作用,因为TSFE全局对象只存在于FE上下文中。 “LIT:”关键字也不能使用,因为它用于比较TypoScript常量,而这些常量在BE上下文中不可用。

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

你需要使用“page”代替“TSFE:page|”。它们是相等的,但是“page”可以用于前端和后端,而“TSFE”仅适用于前端。

第二个问题是,对于colPos,你需要访问GP(GetPost)助手而不是TSFE。

所以尝试像这样更改条件:

[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]

注意:BE布局没有CType限制,因此"cType"和"allowed"都是错误的。

有趣。以下条件似乎有效:[globalVar = TSFE:id = 2] && [page | backend_layout = 2],因为它给出了正确的输出...我会查看文档并尝试您的解决方案。谢谢 :) - Kathara
我的解决方案中有一个错别字,我已经更正了,应该是GP:colPos==2。顺便说一下,我在TYPO3 8.7.8中使用类似的逻辑,这是我的条件: [globalVar = GP:colPos==0] && [page|is_siteroot = 0] -> 所以它是针对主列而不是主页的,因为根据我的解决方案,主页是站点根目录。 - András Ottó
感谢您的评论。由于我的另一个条件似乎运行良好,我开始相信您可以使用“=”或“==”,两者都可以工作。由于我已经找到了一种限制内容元素的方法,所以我认为我会让其他条件保持原样。从文档中看到的并没有真正给出任何指针,哪个条件是正确的(也许您知道在哪里查找?)。如果我需要更多的条件,我会记住它的。谢谢。 - Kathara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接