Documentation
¶
Index ¶
- Constants
- func NewBlockCreateController(ui UiInterface) *blockCreateController
- func NewBlockDeleteController(ui UiInterface) *blockDeleteController
- func NewBlockManagerController(ui UiInterface) *blockManagerController
- func NewBlockUpdateController(ui UiInterface) *blockUpdateController
- func NewBlockVersioningController(ui UiInterface) *blockVersioningController
- type BlockAdminFieldProvider
- type BlockAdminFieldProviderRegistry
- func (r *BlockAdminFieldProviderRegistry) GetAllProviders() map[string]BlockAdminFieldProvider
- func (r *BlockAdminFieldProviderRegistry) GetProvider(blockType string) BlockAdminFieldProvider
- func (r *BlockAdminFieldProviderRegistry) GetRegisteredTypes() []string
- func (r *BlockAdminFieldProviderRegistry) Register(blockType string, provider BlockAdminFieldProvider)
- type HTMLAdminProvider
- type MenuAdminProvider
- type UiInterface
- type ValidationError
Constants ¶
const ActionModalPageFilterShow = "modal_block_filter_show"
const VIEW_CONTENT = "content"
const VIEW_SETTINGS = "settings"
Variables ¶
This section is empty.
Functions ¶
func NewBlockCreateController ¶
func NewBlockCreateController(ui UiInterface) *blockCreateController
func NewBlockDeleteController ¶
func NewBlockDeleteController(ui UiInterface) *blockDeleteController
func NewBlockManagerController ¶
func NewBlockManagerController(ui UiInterface) *blockManagerController
func NewBlockUpdateController ¶
func NewBlockUpdateController(ui UiInterface) *blockUpdateController
func NewBlockVersioningController ¶ added in v1.11.0
func NewBlockVersioningController(ui UiInterface) *blockVersioningController
Types ¶
type BlockAdminFieldProvider ¶ added in v1.14.0
type BlockAdminFieldProvider interface {
// GetContentFields returns form fields for the block content editing tab.
//
// The fields should allow users to configure all block-specific properties.
// Use the block parameter to read current values, and the request for context.
//
// Parameters:
// - block: The block being edited (use for reading current values)
// - r: The HTTP request (use for context, user info, etc.)
//
// Returns:
// - Array of form fields to display in the content tab (should return []form.FieldInterface)
GetContentFields(block cmsstore.BlockInterface, r *http.Request) interface{}
// GetTypeLabel returns the human-readable display name for this block type.
//
// This label appears in:
// - Block type dropdown during creation
// - Block type display field in settings
//
// Example: "Gallery Block", "Video Block", "Custom Tree Block"
GetTypeLabel() string
// SaveContentFields processes form submission and updates the block.
//
// This method is called when the user saves the content tab. It should:
// 1. Read form values from the request
// 2. Validate the input
// 3. Update the block's content and metadata
// 4. Return an error if validation fails
//
// Parameters:
// - r: The HTTP request containing form data
// - block: The block to update (modify in place)
//
// Returns:
// - error: Validation or processing error, or nil on success
SaveContentFields(r *http.Request, block cmsstore.BlockInterface) error
}
BlockAdminFieldProvider defines how custom block types render their admin UI.
Custom block types must implement this interface to provide:
- Form fields for the content editing tab
- Display label for the block type
- Logic to save form data back to the block
Example implementation for a gallery block:
type GalleryAdminProvider struct {
store cmsstore.StoreInterface
}
func (p *GalleryAdminProvider) GetContentFields(block cmsstore.BlockInterface, r *http.Request) []form.FieldInterface {
return []form.FieldInterface{
form.NewField(form.FieldOptions{
Label: "Gallery Images (JSON)",
Name: "gallery_images",
Type: form.FORM_FIELD_TYPE_TEXTAREA,
Value: block.Content(),
}),
form.NewField(form.FieldOptions{
Label: "Layout Style",
Name: "gallery_layout",
Type: form.FORM_FIELD_TYPE_SELECT,
Value: block.Meta("layout"),
Options: []form.FieldOption{
{Value: "Grid", Key: "grid"},
{Value: "Masonry", Key: "masonry"},
},
}),
}
}
func (p *GalleryAdminProvider) GetTypeLabel() string {
return "Gallery Block"
}
func (p *GalleryAdminProvider) SaveContentFields(r *http.Request, block cmsstore.BlockInterface) error {
block.SetContent(req.GetStringTrimmed(r, "gallery_images"))
block.SetMeta("layout", req.GetStringTrimmed(r, "gallery_layout"))
return nil
}
To register a custom admin provider:
adminUI := admin.UI(config)
adminUI.BlockAdminRegistry().Register("gallery", &GalleryAdminProvider{store: store})
See admin/blocks/README.md for detailed examples and best practices.
type BlockAdminFieldProviderRegistry ¶ added in v1.14.0
type BlockAdminFieldProviderRegistry struct {
// contains filtered or unexported fields
}
BlockAdminFieldProviderRegistry manages all registered block admin field providers.
The registry is thread-safe and maps block types (strings) to their admin providers. It's used by the admin controllers to dynamically generate forms for different block types.
Built-in block types:
- cmsstore.BLOCK_TYPE_HTML: HTML content editor
- cmsstore.BLOCK_TYPE_MENU: Menu configuration form
Custom block types can be registered after admin UI initialization:
adminUI.BlockAdminRegistry().Register("custom_type", customProvider)
func NewBlockAdminFieldProviderRegistry ¶ added in v1.14.0
func NewBlockAdminFieldProviderRegistry() *BlockAdminFieldProviderRegistry
NewBlockAdminFieldProviderRegistry creates a new registry for block admin field providers. This is typically called internally during admin UI initialization.
func (*BlockAdminFieldProviderRegistry) GetAllProviders ¶ added in v1.14.0
func (r *BlockAdminFieldProviderRegistry) GetAllProviders() map[string]BlockAdminFieldProvider
GetAllProviders returns a map of all registered block type providers.
This is useful for:
- Generating the block type dropdown in create forms
- Listing available block types
Returns a copy of the internal map to prevent external modification. This method is thread-safe.
func (*BlockAdminFieldProviderRegistry) GetProvider ¶ added in v1.14.0
func (r *BlockAdminFieldProviderRegistry) GetProvider(blockType string) BlockAdminFieldProvider
GetProvider returns the admin field provider for the given block type.
If no provider is registered for the type, returns nil. Callers should check for nil and provide a fallback.
This method is thread-safe.
func (*BlockAdminFieldProviderRegistry) GetRegisteredTypes ¶ added in v1.14.0
func (r *BlockAdminFieldProviderRegistry) GetRegisteredTypes() []string
GetRegisteredTypes returns a sorted list of all registered block type keys.
This is useful for generating dropdowns and validating block types. The list is sorted alphabetically for consistent UI ordering.
func (*BlockAdminFieldProviderRegistry) Register ¶ added in v1.14.0
func (r *BlockAdminFieldProviderRegistry) Register(blockType string, provider BlockAdminFieldProvider)
Register registers an admin field provider for a specific block type.
The blockType should match the value stored in the block's Type() field. If a provider already exists for the given type, it will be replaced.
This method is thread-safe and can be called after admin UI initialization to add custom block types.
Example:
adminUI.BlockAdminRegistry().Register("video", &VideoAdminProvider{})
adminUI.BlockAdminRegistry().Register("carousel", &CarouselAdminProvider{store: store})
type HTMLAdminProvider ¶ added in v1.14.0
type HTMLAdminProvider struct{}
HTMLAdminProvider provides admin UI for HTML block types.
func NewHTMLAdminProvider ¶ added in v1.14.0
func NewHTMLAdminProvider() *HTMLAdminProvider
NewHTMLAdminProvider creates a new HTML block admin provider.
func (*HTMLAdminProvider) GetContentFields ¶ added in v1.14.0
func (p *HTMLAdminProvider) GetContentFields(block cmsstore.BlockInterface, r *http.Request) interface{}
GetContentFields returns form fields for HTML block content editing.
func (*HTMLAdminProvider) GetTypeLabel ¶ added in v1.14.0
func (p *HTMLAdminProvider) GetTypeLabel() string
GetTypeLabel returns the display label for HTML blocks.
func (*HTMLAdminProvider) SaveContentFields ¶ added in v1.14.0
func (p *HTMLAdminProvider) SaveContentFields(r *http.Request, block cmsstore.BlockInterface) error
SaveContentFields processes form data and updates the HTML block.
type MenuAdminProvider ¶ added in v1.14.0
type MenuAdminProvider struct {
// contains filtered or unexported fields
}
MenuAdminProvider provides admin UI for Menu block types.
func NewMenuAdminProvider ¶ added in v1.14.0
func NewMenuAdminProvider(store cmsstore.StoreInterface, logger interface { Error(msg string, args ...interface{}) }) *MenuAdminProvider
NewMenuAdminProvider creates a new Menu block admin provider.
func (*MenuAdminProvider) GetContentFields ¶ added in v1.14.0
func (p *MenuAdminProvider) GetContentFields(block cmsstore.BlockInterface, r *http.Request) interface{}
GetContentFields returns form fields for Menu block content editing.
func (*MenuAdminProvider) GetTypeLabel ¶ added in v1.14.0
func (p *MenuAdminProvider) GetTypeLabel() string
GetTypeLabel returns the display label for Menu blocks.
func (*MenuAdminProvider) SaveContentFields ¶ added in v1.14.0
func (p *MenuAdminProvider) SaveContentFields(r *http.Request, block cmsstore.BlockInterface) error
SaveContentFields processes form data and updates the Menu block.
type UiInterface ¶
type UiInterface interface {
shared.UiInterface
BlockCreate(w http.ResponseWriter, r *http.Request)
BlockManager(w http.ResponseWriter, r *http.Request)
BlockDelete(w http.ResponseWriter, r *http.Request)
BlockUpdate(w http.ResponseWriter, r *http.Request)
BlockVersioning(w http.ResponseWriter, r *http.Request)
BlockAdminRegistry() *BlockAdminFieldProviderRegistry
}
func UI ¶
func UI(config shared.UiConfig) UiInterface
type ValidationError ¶ added in v1.14.0
type ValidationError struct {
Message string
}
ValidationError represents a validation error from SaveContentFields.
func (*ValidationError) Error ¶ added in v1.14.0
func (e *ValidationError) Error() string