# 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/