├── .github └── workflows │ └── ci.yml ├── Classes └── Hooks │ └── DatahandlerHook.php ├── Configuration ├── PageTS │ └── main.tsconfig ├── Sets │ └── Doktypemapper │ │ ├── config.yaml │ │ └── page.tsconfig └── TCA │ └── Overrides │ └── pages.php ├── README.md ├── Resources ├── Private │ └── Language │ │ └── locallang_db.xlf └── Public │ └── Icons │ └── Extension.svg ├── composer.json ├── ext_emconf.php └── ext_localconf.php /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | pull_request: 6 | schedule: 7 | - cron: '56 5 * * *' 8 | 9 | jobs: 10 | 11 | testsuite: 12 | name: all tests 13 | runs-on: ubuntu-latest 14 | strategy: 15 | matrix: 16 | php: [ '7.4', '8.0', '8.1' ] 17 | TYPO3: [ '11' ] 18 | include: 19 | - TYPO3: '12' 20 | php: '8.1' 21 | - TYPO3: '13' 22 | php: '8.3' 23 | steps: 24 | - name: Checkout 25 | uses: actions/checkout@v2 26 | 27 | - name: Install testing system 28 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -t ${{ matrix.TYPO3 }} -s composerInstall 29 | 30 | - name: Composer validate 31 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -s composerValidate 32 | 33 | - name: Lint PHP 34 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -s lint 35 | 36 | - name: CGL 37 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -s cgl -n 38 | 39 | - name: phpstan 40 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -t ${{ matrix.TYPO3 }} -s phpstan 41 | 42 | - name: Functional Tests with mariadb 43 | if: matrix.TYPO3 != '10' 44 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -t ${{ matrix.TYPO3 }} -s functional 45 | -------------------------------------------------------------------------------- /Classes/Hooks/DatahandlerHook.php: -------------------------------------------------------------------------------- 1 | " 44 | // we can use the previous backend_layout 45 | if ($this->previousBackendLayout !== null) { 46 | $fieldArray['backend_layout'] = $this->previousBackendLayout; 47 | } 48 | // this can happen on a new root page 49 | return; 50 | } 51 | $backendLayouts = $pageTsConfig['mod.']['web_layout.']['BackendLayouts.'] ?? []; 52 | foreach ($backendLayouts as $identifier => $data) { 53 | if (!empty($data['config.']['backend_layout.']['doktype']) && (int)$data['config.']['backend_layout.']['doktype'] === (int)$fieldArray['doktype']) { 54 | $backendLayout = 'pagets__' . str_replace('.', '', $identifier); 55 | $fieldArray['backend_layout'] = $backendLayout; 56 | $this->previousBackendLayout = $backendLayout; 57 | break; 58 | } 59 | } 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /Configuration/PageTS/main.tsconfig: -------------------------------------------------------------------------------- 1 | @import 'EXT:doktypemapper/Configuration/Sets/Doktypemapper/page.tsconfig' 2 | -------------------------------------------------------------------------------- /Configuration/Sets/Doktypemapper/config.yaml: -------------------------------------------------------------------------------- 1 | name: b13/doktypemapper 2 | label: Doktypemapper 3 | -------------------------------------------------------------------------------- /Configuration/Sets/Doktypemapper/page.tsconfig: -------------------------------------------------------------------------------- 1 | mod.web_layout.BackendLayouts { 2 | DefaultLink { 3 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.3.title 4 | config.backend_layout { 5 | doktype = 3 6 | colCount = 0 7 | rowCount = 0 8 | } 9 | } 10 | DefaultShortcut { 11 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.4.title 12 | config.backend_layout { 13 | doktype = 4 14 | colCount = 0 15 | rowCount = 0 16 | } 17 | } 18 | DefaultBackendusersection { 19 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.6.title 20 | config.backend_layout { 21 | doktype = 6 22 | colCount = 0 23 | rowCount = 0 24 | } 25 | } 26 | DefaultMountpoint { 27 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.7.title 28 | config.backend_layout { 29 | doktype = 7 30 | colCount = 0 31 | rowCount = 0 32 | } 33 | } 34 | DefaultSpacer { 35 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.199.title 36 | config.backend_layout { 37 | doktype = 199 38 | colCount = 0 39 | rowCount = 0 40 | } 41 | } 42 | DefaultFolder { 43 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.254.title 44 | config.backend_layout { 45 | doktype = 254 46 | colCount = 0 47 | rowCount = 0 48 | } 49 | } 50 | DefaultRecycler { 51 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.255.title 52 | config.backend_layout { 53 | doktype = 255 54 | colCount = 0 55 | rowCount = 0 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Configuration/TCA/Overrides/pages.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | Language Labels for EXT:doktypemapper 6 | David Steeb 7 | typo3@b13.com 8 |
9 | 10 | 11 | Empty Page (External Link) 12 | 13 | 14 | Empty Page (Shortcut) 15 | 16 | 17 | Empty Page (Backend User Section) 18 | 19 | 20 | Empty Page (Mountpoint) 21 | 22 | 23 | Empty Page (Spacer) 24 | 25 | 26 | Empty Page (Folder) 27 | 28 | 29 | Empty Page (Recycler) 30 | 31 | 32 |
33 |
34 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Extension.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 12 | 14 | 16 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "b13/doktypemapper", 3 | "type": "typo3-cms-extension", 4 | "description": "Maps your page.doktype to page.backend_layout", 5 | "homepage": "https://b13.com", 6 | "license": ["GPL-2.0-or-later"], 7 | "extra": { 8 | "typo3/cms": { 9 | "extension-key": "doktypemapper", 10 | "cms-package-dir": "{$vendor-dir}/typo3/cms", 11 | "app-dir": ".Build", 12 | "web-dir": ".Build/Web" 13 | } 14 | }, 15 | "require": { 16 | "php": "^7.4 || ^8.0", 17 | "typo3/cms-backend": "^11.5 || ^12.4 || ^13.1" 18 | }, 19 | "autoload": { 20 | "psr-4": { 21 | "B13\\Doktypemapper\\": "Classes/" 22 | } 23 | }, 24 | "require-dev": { 25 | "saschaegerer/phpstan-typo3": "^1.8", 26 | "typo3/coding-standards": "^0.5.5", 27 | "typo3/tailor": "^1.1", 28 | "typo3/testing-framework": "^7.0 || ^8.0" 29 | }, 30 | "config": { 31 | "vendor-dir": ".Build/vendor", 32 | "bin-dir": ".Build/bin", 33 | "allow-plugins": { 34 | "typo3/class-alias-loader": true, 35 | "typo3/cms-composer-installers": true 36 | } 37 | }, 38 | "autoload-dev": { 39 | "psr-4": { 40 | "B13\\Doktypemapper\\Tests\\": "Tests/" 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /ext_emconf.php: -------------------------------------------------------------------------------- 1 | 'b13/doktypemapper', 5 | 'description' => 'Maps your page.doktype to page.backend_layout', 6 | 'category' => 'be', 7 | 'author' => 'b13 GmbH', 8 | 'author_email' => 'typo3@b13.com', 9 | 'author_company' => 'b13 GmbH', 10 | 'state' => 'stable', 11 | 'uploadfolder' => 0, 12 | 'clearCacheOnLoad' => 1, 13 | 'version' => '2.1.0', 14 | 'constraints' => [ 15 | 'depends' => [], 16 | ], 17 | ]; 18 | -------------------------------------------------------------------------------- /ext_localconf.php: -------------------------------------------------------------------------------- 1 |