# TYPO3-Specific Directives
Comprehensive reference for TYPO3-specific RST directives and extensions.
## Permalink Anchors (Labels)
Every section in TYPO3 documentation **MUST** have a permalink anchor (label) for deep linking.
**Syntax:**
```rst
.. _section-name-label:
Section heading
===============
```
**Requirements:**
- Place label **immediately before** the section heading (no blank line between)
- Use **lowercase** with hyphens (`-`) as separators
- Use **descriptive, hierarchical names** reflecting the document structure
- Labels enable `:ref:` cross-references and URL anchors
**Example from Mass Approval documentation:**
```rst
.. _crowdin-mass-approval:
========================
Mass approval on Crowdin
========================
.. _crowdin-mass-approval-workflow:
Crowdin API workflow
====================
.. _crowdin-mass-approval-api:
API endpoints
-------------
.. _crowdin-mass-approval-authentication:
Authentication
--------------
.. _crowdin-mass-approval-implementation:
PHP implementation
==================
.. _crowdin-mass-approval-implementation-usage:
Usage
-----
.. _crowdin-mass-approval-best-practices:
Best practices
==============
.. _crowdin-mass-approval-best-practices-error:
Error handling
--------------
```
**Naming Convention:**
- Start with document/topic prefix: `crowdin-mass-approval`
- Add section hierarchy: `crowdin-mass-approval-workflow`
- Add subsection: `crowdin-mass-approval-implementation-usage`
- This creates predictable, navigable anchor URLs
**Benefits:**
- Direct linking to specific sections
- Stable URLs for documentation references
- Cross-document `:ref:` linking
- Search engine indexability
## Configuration Values (confval)
Document configuration options with structured metadata.
**Basic Syntax:**
```rst
.. confval:: settingName
:type: boolean
:Default: true
:Path: $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['ext_key']['setting']
Description of the configuration value.
```
**Field Types:**
- `:type:` - boolean, string, integer, array, object
- `:Default:` - Default value (capitalize 'Default')
- `:Path:` - Full path to the setting in TYPO3 configuration
- `:Scope:` - Where setting applies (frontend, backend, global)
**Example:**
```rst
.. confval:: fetchExternalImages
:type: boolean
:Default: true
:Path: $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['rte_ckeditor_image']['fetchExternalImages']
Controls whether external image URLs are automatically fetched and uploaded
to the current backend user's upload folder. When enabled, pasting image
URLs will trigger automatic download and FAL integration.
```
**TSConfig Example:**
```rst
.. confval:: RTE.default.buttons.image.options.magic.maxWidth
:type: integer
:Default: 300
Maximum width in pixels for images inserted through the RTE.
Images exceeding this width will be automatically scaled down.
```
**YAML Configuration Example:**
```rst
.. confval:: editor.externalPlugins.typo3image.allowedExtensions
:type: string
:Default: Value from ``$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']``
Comma-separated list of allowed image file extensions for the CKEditor
image plugin. Overrides global TYPO3 image extension settings.
```
### Two-Level Configuration Pattern
**Pattern:** Site-wide configuration with per-item override capability
Many TYPO3 features support two-level configuration:
1. **Site-wide default** via TypoScript
2. **Per-item override** via attributes or UI
**When to use:**
- Features where editors need item-specific control
- Mixed content pages (some items use site-wide, others override)
- Configuration that varies by context or workflow
**Documentation Structure:**
```rst
## Configuration
The noScale feature can be configured at two levels:
1. **Site-wide (TypoScript)** - Default behavior for all images
2. **Per-image (Editor)** - Override for specific images
### Site-Wide Configuration
.. confval:: noScale
:type: boolean
:Default: false (auto-optimization enabled)
:Path: lib.parseFunc_RTE.tags.img.noScale
Controls whether images are automatically optimized or used as original files.
When enabled, all images skip TYPO3's image processing.
**Configuration Priority:**
- **Per-image setting** (data-noscale attribute) takes precedence
- **Site-wide setting** (TypoScript) is the fallback
- **Default behavior** when neither is set
**Enable for all images:**
.. code-block:: typoscript
:caption: setup.typoscript
lib.parseFunc_RTE {
tags.img {
noScale = 1 # All images use original files
}
}
### Per-Image Override
.. versionadded:: 13.0.0
Editors can now enable noScale for individual images using the CKEditor
image dialog, overriding the site-wide TypoScript setting.
**How to Use:**
1. Insert or edit an image in CKEditor
2. Open the image dialog (double-click or select + click insert image button)
3. Check "Use original file (noScale)" checkbox
4. Save the image
**Configuration Priority:**
- **Per-image setting** (data-noscale attribute) overrides site-wide configuration
- If unchecked: Falls back to site-wide TypoScript setting
- If no site-wide setting: Default behavior (auto-optimization)
**Workflow Benefits:**
- **Mixed Content**: Some images original, others optimized on same page
- **Editorial Control**: Editors decide per-image without developer intervention
- **Flexibility**: Override site-wide settings for specific images
- **Newsletter Integration**: Mark high-quality images for email
**Technical Implementation:**
.. code-block:: html
```
**Example from t3x-rte_ckeditor_image:**
The noScale feature uses this pattern:
- **Site-wide**: `lib.parseFunc_RTE.tags.img.noScale = 1` in TypoScript
- **Per-image**: Checkbox in CKEditor dialog sets `data-noscale` attribute
- **Priority**: Per-image attribute overrides TypoScript setting
**Documentation Benefits:**
✅ Clear separation of site-wide vs per-item configuration
✅ Explicit priority/precedence rules documented
✅ Workflow guidance for editors
✅ Technical implementation details for developers
✅ Use case explanations (mixed content, newsletters)
## Version Information
Document version-specific changes with proper directives.
**Version Added:**
```rst
.. versionadded:: 13.0.0
The CKEditor plugin now requires ``StyleUtils`` and ``GeneralHtmlSupport``
dependencies for style functionality. Previous versions did not have this requirement.
```
**Version Changed:**
```rst
.. versionchanged:: 13.1.0
Image processing now uses TYPO3's native image processing service instead
of custom processing logic.
```
**Deprecated:**
```rst
.. deprecated:: 13.2.0
The ``oldSetting`` configuration option is deprecated. Use ``newSetting`` instead.
This option will be removed in version 14.0.0.
```
**Placement:** Place version directives immediately before or after the relevant content they describe.
## PHP Domain
Document PHP classes, methods, and properties.
**Class:**
```rst
.. php:class:: SelectImageController
Main controller for image selection wizard.
Extends: ``TYPO3\\CMS\\Backend\\Controller\\ElementBrowserController``
```
**Method:**
```rst
.. php:method:: infoAction(ServerRequestInterface $request): ResponseInterface
Retrieves image information and processed file details.
:param \\Psr\\Http\\Message\\ServerRequestInterface $request: PSR-7 server request
:returns: JSON response with image data or error response
:returntype: \\Psr\\Http\\Message\\ResponseInterface
:throws \\RuntimeException: When file is not found or invalid
```
**Property:**
```rst
.. php:attr:: resourceFactory
:type: \\TYPO3\\CMS\\Core\\Resource\\ResourceFactory
Resource factory for file operations.
```
**Namespace:**
```rst
.. php:namespace:: Netresearch\\RteCKEditorImage\\Controller
.. php:class:: SelectImageController
```
## Card Grids
Create visual card layouts for navigation.
**Basic Card Grid:**
```rst
.. card-grid::
:columns: 1
:columns-md: 2
:gap: 4
:card-height: 100
.. card:: 📘 Introduction
The RTE CKEditor Image extension provides comprehensive image handling
capabilities for CKEditor in TYPO3.
.. card-footer:: :ref:`Read more `
:button-style: btn btn-primary stretched-link
.. card:: 🔧 Configuration
Learn how to configure the extension with TSConfig, YAML, and TypoScript
settings for your specific needs.
.. card-footer:: :ref:`Read more `
:button-style: btn btn-secondary stretched-link
```
**Card Grid Options:**
- `:columns:` - Number of columns (default layout)
- `:columns-md:` - Columns for medium+ screens
- `:gap:` - Gap between cards (1-5)
- `:card-height:` - Card height (100 for equal height)
- `:class:` - Additional CSS classes
**Card Footer Styles:**
- `btn btn-primary stretched-link` - Primary button with full card click
- `btn btn-secondary stretched-link` - Secondary button with full card click
- `btn btn-light stretched-link` - Light button
**UTF-8 Emoji Icons:**
Use in card titles for visual appeal:
- 📘 Documentation
- 🔧 Configuration
- 🎨 Design
- 🔍 Search
- ⚡ Performance
- 🛡️ Security
- 📊 API
- 🆘 Troubleshooting
## Intersphinx References
Cross-reference TYPO3 core documentation.
**TSRef (TypoScript Reference):**
```rst
:ref:`t3tsref:start`
:ref:`t3tsref:stdwrap`
:ref:`t3tsref:cobj-image`
```
**Core API:**
```rst
:ref:`t3coreapi:start`
:ref:`t3coreapi:fal`
:ref:`t3coreapi:dependency-injection`
```
**TSConfig:**
```rst
:ref:`t3tsconfig:start`
:ref:`t3tsconfig:pagetsconfig`
```
**TCA:**
```rst
:ref:`t3tca:start`
:ref:`t3tca:columns-types`
```
**Fluid:**
```rst
:ref:`t3viewhelper:start`
:ref:`t3viewhelper:typo3-fluid-image`
```
## Index and Glossary
**Index Entry:**
```rst
.. index:: Image Processing, FAL, CKEditor
.. _image-processing:
Image Processing
================
```
**Glossary:**
```rst
.. glossary::
FAL
File Abstraction Layer - TYPO3's file management system
Magic Image
Automatically processed image with dimension constraints
```
**Reference Glossary:**
```rst
See :term:`FAL` for details.
```
## Tabs
Create tabbed content for multiple options.
```rst
.. tabs::
.. tab:: Composer
.. code-block:: bash
composer require netresearch/rte-ckeditor-image
.. tab:: Extension Manager
Install via TYPO3 Extension Manager:
1. Go to Admin Tools > Extensions
2. Search for "rte_ckeditor_image"
3. Click Install
```
## Special TYPO3 Directives
**Include Partial:**
```rst
.. include:: ../Includes.rst.txt
```
**File Tree:**
```rst
.. directory-tree::
* Classes/
* Controller/
* Database/
* Utils/
* Resources/
* Public/
* JavaScript/
```
**YouTube Video:**
```rst
.. youtube:: VIDEO_ID
```
**Download Link:**
```rst
:download:`Download PDF <../_static/manual.pdf>`
```
## Best Practices
1. **Use confval for all configuration**: Document every setting with proper metadata
2. **Version everything**: Add versionadded/versionchanged for all version-specific features
3. **Cross-reference liberally**: Link to related documentation with :ref:
4. **Card grids for navigation**: Use card-grid layouts for Index.rst files
5. **Emoji icons in titles**: Use UTF-8 emojis in card titles for visual appeal
6. **Stretched links**: Always use `stretched-link` class in card-footer for full card clicks
7. **PHP domain for APIs**: Document all public methods with php:method
8. **Intersphinx for core**: Reference TYPO3 core docs with intersphinx
## Quality Checklist
✅ All configuration options documented with confval
✅ Version information added for all version-specific features
✅ Cross-references work (no broken :ref: links)
✅ Card grids use stretched-link in card-footer
✅ UTF-8 emoji icons in card titles
✅ PHP API documented with php:method
✅ Code blocks specify language
✅ Admonitions used appropriately
✅ Local render shows no warnings
✅ All headings have proper underlines
✅ **Sentence case** used for all headlines (not Title Case)
✅ **Permalink anchors** (`.. _label:`) before every section heading
✅ **List punctuation**: all list items end with periods
✅ **CGL compliance**: PHP code examples pass `make fix-cgl`
## References
- **TYPO3 Documentation Guide:** https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/
- **Confval Reference:** https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/Reference/ReStructuredText/Code/Confval.html
- **Version Directives:** https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/Reference/ReStructuredText/Content/Versions.html
- **PHP Domain:** https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/Reference/ReStructuredText/Code/Phpdomain.html
- **Card Grid:** https://sphinxcontrib-typo3-theme.readthedocs.io/en-us/latest/