Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6.1 KiB
| title |
|---|
| Configuration |
You can customize the plugin's look and behavior by adding configuration options.
Add configuration options to your site/config/config.php file:
<?php
return [
// Your existing Kirby configuration...
// Loop Configuration
'moinframe.loop' => [
'auto-inject' => true,
...
]
];
Configuration Options
Enable/Disable Tool
Option: moinframe.loop.enabled
Type: boolean|callable
Default: true
Controls whether loop is enabled globally or conditionally.
// Simple boolean enable/disable
'moinframe.loop.enabled' => false, // Disables globally
// Use a callback for dynamic control
'moinframe.loop.enabled' => function($page) {
// Only enable for specific templates
return in_array($page->template()->name(), ['article', 'blog']);
},
// Filter by page status
'moinframe.loop.enabled' => function($page) {
return $page->status() === 'published';
},
// Complex conditions
'moinframe.loop.enabled' => function($page) {
return $page->template()->name() === 'article'
&& $page->status() === 'published'
&& !$page->archived()->toBool();
}
Callback function receives:
$page- The current Kirby page object
Common use cases:
- Disable feedback on specific page templates
- Enable only for published content
- Conditional enabling based on page fields or metadata
Note: This option is checked both during auto-injection and manual snippet usage.
Auto-Injection
Option: moinframe.loop.auto-inject
Type: boolean
Default: true
Controls whether loop is automatically injected into all pages.
// Disable auto-injection (requires manual snippet placement)
'moinframe.loop.auto-inject' => false,
When disabled, you must manually add the snippet to your templates:
<?php snippet('loop/app') ?>
Use cases for disabling auto-injection:
- Custom page templates where you want precise control
- JavaScript-based routing (Swup, Taxi.js) that needs manual initialization
- Conditional loading based on user roles or page types
Position
Option: moinframe.loop.position
Type: string
Default: 'top'
Values: 'top' | 'bottom'
Sets the position of loop header on the page.
// Position header at bottom of page
'moinframe.loop.position' => 'bottom',
Database Path
Option: moinframe.loop.database
Type: string|null
Default: null (uses site/logs/loop/comments.sqlite)
Customize the SQLite database location.
// Custom database path
'moinframe.loop.database' => '/custom/path/comments.sqlite',
// Alternative locations
'moinframe.loop.database' => kirby()->root('content') . '/feedback.sqlite',
'moinframe.loop.database' => '/var/www/data/feedback.sqlite',
Important considerations:
- Path must be absolute
- Directory must exist and be writable
- Consider backup strategies for custom locations
- Ensure path is outside web root for security
Public Access
Option: moinframe.loop.public
Type: boolean
Default: false
Controls whether loop requires authentication.
// Allow public access (no authentication required)
'moinframe.loop.public' => true,
Security implications:
false(default): Only authenticated panel users can see/use the tooltrue: Anyone can add comments
Recommended for public access:
- Internal staging environments
- Client review sites with controlled access
- Public beta feedback collection
Language Override
Option: moinframe.loop.language
Type: string|null
Default: null (auto-detect from Kirby)
Force a specific UI language regardless of the current page language.
// Force German UI
'moinframe.loop.language' => 'de',
// Force English UI
'moinframe.loop.language' => 'en',
When to use:
- Single-language sites with non-English content but English-speaking editors
- Multi-language sites where editors prefer consistent UI language
Theme
Option: moinframe.loop.theme
Type: string
Default: 'default'
Values: 'default' | 'dark' | custom theme name
Sets the visual theme for the loop interface.
// Use dark theme
'moinframe.loop.theme' => 'dark',
// Use custom theme
'moinframe.loop.theme' => 'custom',
Available themes:
'default'- Light theme with clean, bright interface'dark'- Dark theme for low-light environments- Custom theme names - See Theming Guide for creating custom themes
Welcome Dialog
The welcome dialog introduces new users to loop functionality.
Enable/Disable Welcome Dialog
Option: moinframe.loop.welcome.enabled
Type: boolean
Default: true
// Disable welcome dialog
'moinframe.loop.welcome.enabled' => false,
Custom Welcome Headline
Option: moinframe.loop.welcome.headline
Type: string|null
Default: null (uses default translation)
// Custom welcome headline
'moinframe.loop.welcome.headline' => 'Welcome to Our Review Tool!',
Custom Welcome Text
Option: moinframe.loop.welcome.text
Type: string|null
Default: null (uses default translation)
// Custom welcome message
'moinframe.loop.welcome.text' => 'Click anywhere on the page to leave feedback. Use the toggle button to switch between navigation and comment modes.',
Manual Snippet Usage
When auto-injection is disabled, you have full control over when and where loop appears.
Basic Usage
<?php snippet('loop/app') ?>
Conditional Loading
<?php if ($kirby->user() && $kirby->user()->role()->isAdmin()): ?>
<?php snippet('loop/app') ?>
<?php endif ?>
[!TIPP] Manual snippets also respect the
enabledconfiguration option. If you've set up conditional enabling via theenabledoption, you don't need to duplicate that logic in your template - the snippet will automatically check the enabled status.
Caching Behavior
Warning
Pages with loop automatically have Kirby's page cache disabled. This is necessary for CSRF token validation and User authentication checks.