16 KiB
TYPO3 Extension Architecture Reference
Official TYPO3 extension file structure for documentation extraction weighting and categorization.
File Structure Hierarchy
🔴 Required Files (High Priority)
composer.json - Composer configuration
- Documentation Priority: HIGH
- Extract: Package name, description, dependencies, autoload configuration
- Map to RST: Introduction/Index.rst (overview), Installation requirements
- Weight: Critical for dependency documentation
ext_emconf.php - Extension metadata
- Documentation Priority: HIGH
- Extract: Title, description, version, author, constraints
- Map to RST: Introduction/Index.rst, Settings.cfg
- Weight: Essential metadata, version constraints
Index.rst (in Documentation/)
- Documentation Priority: CRITICAL
- Required: Main documentation entry point
- Must Exist: For TYPO3 Intercept deployment
Settings.cfg (in Documentation/)
- Documentation Priority: CRITICAL
- Required: Documentation build configuration
- Must Exist: For TYPO3 Intercept deployment
🟡 Core Structure Files (Medium-High Priority)
ext_localconf.php - Runtime configuration
- Documentation Priority: MEDIUM-HIGH
- Extract: Plugin registrations, hooks, service configurations
- Map to RST: Integration guides, Developer/Configuration.rst
- Weight: Important for integration documentation
ext_tables.php - Backend configuration
- Documentation Priority: MEDIUM
- Extract: Backend module registrations, permissions
- Map to RST: Developer/Backend.rst
- Weight: Backend-specific documentation
ext_tables.sql - Database schema
- Documentation Priority: MEDIUM
- Extract: Table structures, field definitions
- Map to RST: Developer/Database.rst, API/DataModel.rst
- Weight: Important for database documentation
ext_conf_template.txt - Extension configuration template
- Documentation Priority: HIGH
- Extract: All configuration options, types, defaults, security warnings
- Map to RST: Integration/Configuration.rst (confval directives)
- Weight: Critical - direct user-facing configuration
Directory Structure Weights
Classes/ (Weight: HIGH)
Purpose: PHP source code following PSR-4 autoloading
Priority Hierarchy:
-
Classes/Controller/ (Weight: HIGH)
- Documentation Priority: HIGH
- Extract: Action methods, parameters, return types
- Map to RST: API/Controllers/, Developer/Plugins.rst
- Pattern: MVC controllers extending
ActionController
-
Classes/Domain/Model/ (Weight: HIGH)
- Documentation Priority: HIGH
- Extract: Entity properties, getters/setters, relationships
- Map to RST: API/Models/, Developer/DataModel.rst
- Pattern: Extbase domain models
-
Classes/Domain/Repository/ (Weight: MEDIUM-HIGH)
- Documentation Priority: MEDIUM-HIGH
- Extract: Query methods, custom finders
- Map to RST: API/Repositories/, Developer/DataAccess.rst
- Pattern: Extends
\TYPO3\CMS\Extbase\Persistence\Repository
-
Classes/ViewHelpers/ (Weight: MEDIUM)
- Documentation Priority: MEDIUM
- Extract: ViewHelper arguments, usage examples
- Map to RST: Developer/ViewHelpers.rst
- Pattern: Custom Fluid ViewHelpers
-
Classes/Utility/ (Weight: MEDIUM)
- Documentation Priority: MEDIUM
- Extract: Utility methods, static helpers
- Map to RST: API/Utilities/
- Pattern: Static helper classes
-
Classes/Service/ (Weight: MEDIUM-HIGH)
- Documentation Priority: MEDIUM-HIGH
- Extract: Service methods, dependencies
- Map to RST: API/Services/
- Pattern: Business logic services
Configuration/ (Weight: VERY HIGH)
Purpose: All TYPO3 configuration files
Priority Hierarchy:
-
Configuration/TCA/ (Weight: VERY HIGH)
- Documentation Priority: VERY HIGH
- Extract: Table definitions, field configurations, relationships
- Map to RST: Developer/DataModel.rst, Editor/Fields.rst
- Files:
<tablename>.php - Pattern: Database table configuration arrays
-
Configuration/TCA/Overrides/ (Weight: HIGH)
- Documentation Priority: HIGH
- Extract: Field additions, modifications to core tables
- Map to RST: Integration/CoreExtensions.rst
- Files:
<tablename>.php - Pattern: TCA modifications
-
Configuration/TypoScript/ (Weight: HIGH)
- Documentation Priority: HIGH
- Extract: Constants, setup, plugin configurations
- Map to RST: Configuration/TypoScript.rst
- Files:
constants.typoscript,setup.typoscript - Pattern: TypoScript configuration
-
Configuration/Sets/ (Weight: HIGH)
- Documentation Priority: HIGH
- Extract: Site set configurations, settings definitions
- Map to RST: Configuration/SiteSets.rst
- Files:
config.yaml,settings.definitions.yaml,setup.typoscript - Pattern: Modern configuration approach (TYPO3 v13+)
-
Configuration/TsConfig/ (Weight: MEDIUM-HIGH)
- Documentation Priority: MEDIUM-HIGH
- Extract: Page TSconfig, User TSconfig
- Map to RST: Editor/PageTSconfig.rst, Editor/UserTSconfig.rst
- Subdirs:
Page/,User/ - Files:
*.tsconfig
-
Configuration/Backend/ (Weight: MEDIUM)
- Documentation Priority: MEDIUM
- Extract: Backend routes, modules, AJAX routes
- Map to RST: Developer/Backend.rst
- Files:
Routes.php,Modules.php,AjaxRoutes.php
-
Configuration/Services.yaml (Weight: HIGH)
- Documentation Priority: HIGH
- Extract: DI configuration, event listeners, console commands
- Map to RST: Developer/DependencyInjection.rst, Developer/Events.rst
- Pattern: Symfony-style service configuration
-
Configuration/Extbase/Persistence/Classes.php (Weight: MEDIUM)
- Documentation Priority: MEDIUM
- Extract: Model-to-table mappings
- Map to RST: Developer/Persistence.rst
-
Configuration/Icons.php (Weight: LOW)
- Documentation Priority: LOW
- Extract: Icon identifiers
- Map to RST: Developer/Icons.rst (if comprehensive)
Resources/ (Weight: MEDIUM)
Purpose: Asset files and templates
Priority Hierarchy:
-
Resources/Private/Language/ (Weight: MEDIUM-HIGH)
- Documentation Priority: MEDIUM
- Extract: Translation keys (for reference)
- Map to RST: Developer/Localization.rst
- Files:
*.xlf(XLIFF format) - Note: Extract labels for API documentation context
-
Resources/Private/Templates/ (Weight: MEDIUM)
- Documentation Priority: MEDIUM
- Extract: Template structure (for developer reference)
- Map to RST: Developer/Templating.rst
- Files:
[ControllerName]/[ActionName].html - Note: Document template variables and ViewHelpers used
-
Resources/Private/Layouts/ (Weight: LOW-MEDIUM)
- Documentation Priority: LOW
- Extract: Layout structure
- Files:
*.html
-
Resources/Private/Partials/ (Weight: LOW-MEDIUM)
- Documentation Priority: LOW
- Extract: Reusable template fragments
- Files:
*.html
-
Resources/Public/ (Weight: LOW)
- Documentation Priority: LOW
- Extract: Public asset information (if relevant)
- Subdirs:
CSS/,JavaScript/,Icons/,Images/ - Note: Usually not documented in detail
Documentation/ (Weight: CRITICAL)
Purpose: Official RST documentation
Required Files:
Index.rst- Main entry pointSettings.cfg- Build configuration
Common Structure:
Introduction/- Overview, features, screenshotsInstallation/- Installation and upgradeConfiguration/- TypoScript, extension settingsIntegration/- Integration with other extensionsEditor/- User guide for editorsDeveloper/- Developer documentationAPI/- PHP API referenceTroubleshooting/- Common issues
Priority: CRITICAL - This is the primary output target for extraction
Tests/ (Weight: LOW)
Purpose: Unit, functional, and acceptance tests
Documentation Priority: LOW
- Extract test class names for coverage documentation
- Generally not documented in user-facing docs
- May reference in Developer/Testing.rst if test examples provided
Structure:
Tests/Unit/- Unit testsTests/Functional/- Functional testsTests/Acceptance/- Acceptance tests (Codeception)
Extraction Weight Matrix
Primary Sources (Extract First)
Priority 1 - CRITICAL (Must Document):
├─ ext_emconf.php → Extension metadata
├─ ext_conf_template.txt → User configuration
├─ composer.json → Dependencies
└─ Configuration/TCA/*.php → Data model
Priority 2 - HIGH (Should Document):
├─ Classes/Controller/ → Controllers/Actions
├─ Classes/Domain/Model/ → Domain entities
├─ Classes/Service/ → Business logic
├─ Configuration/TypoScript/ → TypoScript config
├─ Configuration/Sets/ → Site sets (v13+)
└─ ext_localconf.php → Runtime registration
Priority 3 - MEDIUM (Consider Documenting):
├─ Classes/Domain/Repository/ → Data access
├─ Classes/ViewHelpers/ → Custom ViewHelpers
├─ Configuration/Backend/ → Backend modules
├─ Configuration/TsConfig/ → TSconfig
├─ Configuration/Services.yaml → DI/Events
└─ Resources/Private/Language/ → Translation context
Secondary Sources (Extract If Needed)
Priority 4 - MEDIUM-LOW:
├─ Classes/Utility/ → Utility functions
├─ ext_tables.php → Backend config
├─ ext_tables.sql → Database schema
└─ Configuration/TCA/Overrides/ → Core extensions
Priority 5 - LOW:
├─ Resources/Private/Templates/ → Template structure
├─ Resources/Public/ → Public assets
├─ Tests/ → Test coverage
└─ Configuration/Icons.php → Icon registry
Documentation Mapping Strategy
Extension Metadata → Introduction
Source: ext_emconf.php, composer.json, README.md
Target: Documentation/Introduction/Index.rst
Extract:
- Extension title → Main heading
- Description → First paragraph
- Version → Version marker
- Author → Credits section
- Constraints → Requirements section
Example Mapping:
ext_emconf.php:
'title' => 'CKEditor Image Support'
'version' => '13.1.0'
'constraints' => ['typo3' => '12.4-13.5']
→ Introduction/Index.rst:
========================
CKEditor Image Support
========================
:Version: 13.1.0
:Language: en
Requirements
------------
- TYPO3: 12.4 - 13.5
Configuration Options → Integration/Configuration
Source: ext_conf_template.txt
Target: Documentation/Integration/Configuration.rst
Extract Pattern:
# cat=category; type=boolean; label=Label: Description
settingName = defaultValue
→ .. confval:: settingName
:type: boolean
:Default: defaultValue
:Path: $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['ext_key']['settingName']
Description text here
Security Warnings: Extract and map to .. warning:: directive
PHP Classes → API Documentation
Source: Classes/**/*.php
Target: Documentation/API/[ClassName].rst
Mapping by Type:
Controllers:
Classes/Controller/UserController.php
→ API/UserController.rst
.. php:class:: UserController
User management controller
.. php:method:: listAction(): ResponseInterface
Models:
Classes/Domain/Model/User.php
→ API/User.rst
.. php:class:: User
User domain model
.. php:attr:: username
:type: string
Repositories:
Classes/Domain/Repository/UserRepository.php
→ API/UserRepository.rst
.. php:class:: UserRepository
User data repository
.. php:method:: findByEmail(string $email): ?User
TCA Configuration → Developer/DataModel
Source: Configuration/TCA/*.php
Target: Documentation/Developer/DataModel.rst
Extract:
- Table name → Section heading
- ctrl['title'] → Table title
- columns → Field documentation
Example:
Configuration/TCA/tx_myext_domain_model_user.php:
'ctrl' => ['title' => 'User']
'columns' => [
'username' => [...],
'email' => [...]
]
→ Developer/DataModel.rst:
Users Table
===========
Database table: tx_myext_domain_model_user
Fields
------
username
User login name
email
User email address
TypoScript → Configuration/TypoScript
Source: Configuration/TypoScript/*.typoscript
Target: Documentation/Configuration/TypoScript.rst
Extract:
- Constants → Configuration reference
- Setup → Implementation examples
Quality Weighting Algorithm
Documentation Coverage Score
Score = (P1_documented / P1_total) * 0.5 +
(P2_documented / P2_total) * 0.3 +
(P3_documented / P3_total) * 0.15 +
(P4_documented / P4_total) * 0.05
Where:
P1 = Priority 1 (CRITICAL) items
P2 = Priority 2 (HIGH) items
P3 = Priority 3 (MEDIUM) items
P4 = Priority 4+ (LOW) items
Gap Analysis Priority
Priority = BaseWeight * Severity * UserImpact
BaseWeight (from file structure):
ext_conf_template.txt config = 10
Controllers = 9
Models = 9
TCA = 8
ext_emconf.php = 8
Services = 7
Repositories = 6
ViewHelpers = 5
Utilities = 4
Severity:
Missing completely = 3
Outdated (wrong defaults) = 2
Incomplete (missing examples) = 1
UserImpact:
User-facing (config, editor features) = 3
Integrator-facing (TypoScript, TSconfig) = 2
Developer-facing (API) = 1
Example Calculation
Missing confval for "fetchExternalImages":
Priority = 10 (ext_conf_template) * 3 (missing) * 3 (user-facing) = 90
Outdated Controller documentation:
Priority = 9 (controller) * 2 (outdated) * 1 (developer) = 18
Missing Utility documentation:
Priority = 4 (utility) * 3 (missing) * 1 (developer) = 12
Action: Document in priority order: 90 → 18 → 12
Official Structure Validation
Required Structure Checklist
Composer-Mode Installation:
- ✅
composer.jsonwith"type": "typo3-cms-extension" - ✅ PSR-4 autoload configuration
- ✅
Documentation/Index.rst - ✅
Documentation/Settings.cfg
Classic-Mode Installation:
- ✅
ext_emconf.php - ✅
Documentation/Index.rst - ✅
Documentation/Settings.cfg
Reserved Prefixes
Root Directory:
ext_*files are reserved for TYPO3 system use- Only allowed:
ext_emconf.php,ext_localconf.php,ext_tables.php,ext_tables.sql,ext_conf_template.txt
Never Create:
ext_custom.phpext_myconfig.php- Any other
ext_*files
Best Practices for Extraction
- Follow Official Structure: Extract based on official TYPO3 architecture
- Weight by Location: Use file location to determine documentation priority
- Respect Conventions: Map to RST sections based on TYPO3 conventions
- Security First: Extract and highlight security warnings from configs
- Version Awareness: Track version-specific features from ext_emconf.php
- Dependency Mapping: Use composer.json and constraints for requirements
- Complete Coverage: Prioritize user-facing config, controllers, models
- Context Awareness: Understand file purpose from directory structure
Resources
- Official Structure: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/
- TCA Reference: https://docs.typo3.org/m/typo3/reference-tca/
- TypoScript Reference: https://docs.typo3.org/m/typo3/reference-typoscript/
- Extbase/Fluid: https://docs.typo3.org/m/typo3/book-extbasefluid/