{"id":17000900,"url":"https://github.com/ichhabrecht/content_defender","last_synced_at":"2025-04-04T21:11:13.573Z","repository":{"id":37493222,"uuid":"90545143","full_name":"IchHabRecht/content_defender","owner":"IchHabRecht","description":"Define allowed or denied content element types in your backend layouts","archived":false,"fork":false,"pushed_at":"2024-04-29T20:34:54.000Z","size":390,"stargazers_count":80,"open_issues_count":33,"forks_count":34,"subscribers_count":9,"default_branch":"main","last_synced_at":"2024-05-16T22:46:12.175Z","etag":null,"topics":["backend","content","layout","restriction","typo3","typo3-cms","typo3-extension"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IchHabRecht.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-07T16:10:47.000Z","updated_at":"2024-06-18T12:31:17.390Z","dependencies_parsed_at":"2024-04-24T22:27:45.436Z","dependency_job_id":"c058764f-b3ba-4a5f-923f-99a34e112758","html_url":"https://github.com/IchHabRecht/content_defender","commit_stats":{"total_commits":232,"total_committers":12,"mean_commits":"19.333333333333332","dds":"0.11637931034482762","last_synced_commit":"12f52ba88942af5a3d097175ae3305a79b9c37b8"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IchHabRecht%2Fcontent_defender","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IchHabRecht%2Fcontent_defender/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IchHabRecht%2Fcontent_defender/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IchHabRecht%2Fcontent_defender/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IchHabRecht","download_url":"https://codeload.github.com/IchHabRecht/content_defender/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247249532,"owners_count":20908212,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","content","layout","restriction","typo3","typo3-cms","typo3-extension"],"created_at":"2024-10-14T04:13:18.860Z","updated_at":"2025-04-04T21:11:13.555Z","avatar_url":"https://github.com/IchHabRecht.png","language":"PHP","funding_links":["https://github.com/sponsors/IchHabRecht"],"categories":[],"sub_categories":[],"readme":"# TYPO3 Extension content_defender\n\n[![Latest Stable Version](https://img.shields.io/packagist/v/ichhabrecht/content-defender.svg)](https://packagist.org/packages/ichhabrecht/content-defender)\n[![StyleCI](https://styleci.io/repos/90545143/shield?branch=main)](https://styleci.io/repos/90545143)\n![GitHub Actions](https://github.com/IchHabRecht/content_defender/actions/workflows/test.yml/badge.svg?event=push)\n\nContent Defender adds more options to define allowed or denied content element types in your backend layouts\n\n## Installation\n\nThis extension can be installed using Composer or the Extension Manager.\n\n### Composer\n\n```\ncomposer require ichhabrecht/content-defender\n```\n\n### Extension Manager\n\nSee [TYPO3 Documentation - Managing Extensions - Legacy Guide](https://docs.typo3.org/m/typo3/tutorial-getting-started/main/en-us/Extensions/LegacyManagement.html)\n\n## Usage\n\n1. You only need to adjust the column configuration of your backend_layout\n\n**Restrict certain content element fields**\n\n- To allow a limited set of values for content element fields use `allowed.field = [list of comma separated values]`\n\n*Examples:*\n```\ncolumns {\n    1 {\n        name = Column with header and textmedia elements\n        colPos = 3\n        colspan = 6\n        allowed {\n            CType = header, textmedia\n        }\n    }\n}\n```\n\n```\ncolumns {\n    1 {\n        name = Column with News plugin only\n        colPos = 3\n        colspan = 6\n        allowed {\n            CType = list\n            list_type = news_pi1\n        }\n    }\n}\n```\n\n**Combine multiple content element fields**\n\n- The example allows multiple content element types (text and list) while restricting plugin types to `news` only.\n\n*Example:*\n```\ncolumns {\n    1 {\n        name = A column with restricted list_type and \"normal\" CType\n        colPos = 3\n        colspan = 6\n        allowed {\n            CType = textmedia, list\n            list_type = news_pi1\n        }\n    }\n}\n```\n\n**Deny certain content element types**\n\n- To remove a set of values from content element fields use `disallowed.field = [list of comma separated values]`\n\n*Examples:*\n```\ncolumns {\n    1 {\n        name = Column without divider, plain html and table elements\n        colPos = 3\n        colspan = 6\n        disallowed {\n            CType = div, html, table\n        }\n    }\n}\n```\n\n```\ncolumns {\n    1 {\n        name = Column with header and list, without News plugin\n        colPos = 3\n        colspan = 6\n        allowed {\n            CType = header, list\n        }\n        disallowed {\n            list_type = news_pi1\n        }\n    }\n}\n```\n\n**Limit the number of content elements**\n\n- To restrict the number of content elements use `maxitems = [number of elements]`\n\n*Example:*\n```\ncolumns {\n    1 {\n        name = Column with one textmedia \n        colPos = 3\n        colspan = 6\n        allowed {\n            CType = textmedia\n        }\n        maxitems = 1\n    }\n}\n```\n\n## Known issues\n\n### TypeError\n*count(): Argument #1 ($value) must be of type Countable|array, null given*\n\nContent Defender needs the runtime cache to be available. Please ensure that this cache **doesn't use** a\n\\TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend backend.\n\n## Community\n\n- Thanks to [b13](https://b13.com) that sponsored the maintenance of this extension with a sponsorship\n- Thanks to [Wolfgang Wagner](https://wwagner.net) who sponsored the maintenance of this extension with a sponsorship\n- Thanks to [WACON Internet GmbH](https://www.wacon.de) that sponsored the maintenance of this extension with a [GitHub sponsorship](https://github.com/sponsors/IchHabRecht)\n- Thanks to [Daniel Goerz](https://twitter.com/ervaude) who wrote about content_defender in his blog [useTYPO3](https://usetypo3.com/backend-layouts.html)\n- Thanks to [Marcus Schwemer](https://twitter.com/MarcusSchwemer) who wrote about content_defender in his blog [TYPO3worx](https://typo3worx.eu/2017/07/typo3-extension-roundup-q1-q2-2017/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fichhabrecht%2Fcontent_defender","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fichhabrecht%2Fcontent_defender","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fichhabrecht%2Fcontent_defender/lists"}