feat(phase2): shared common-form layer + CommonWidgetFields trait for all widgets
- Extract Zibll CSF_Widget::params() common-field parity into inc/modules/widget-common.php (required by widgets-register.php to keep both files <1000 lines): subtitle, title_style(simple/big), title_highlight +color, title_link x3, title_link_style colors, sidebar_affix, show_type (all/only_pc/only_sm), show_id_type(show/hide), show_ids, animation_in, animation_repeat, layout_pin_pc/m, layout_bg(white/dark). Adds normalize_link/normalize_bg helpers, affix_attrs, common_wrapper_attr, render_title, animation_class. Back-compat normalizes legacy tokens (in_affix->sidebar_affix, pc/only_pc, include/exclude->show/hide). - Add src/AKSRT/Widgets/Traits/CommonWidgetFields.php trait (render_common_form_section + update_common_fields). - Wire all 57 widgets to use the trait; migrate the 16 hand-rolled in_affix implementations to shared sidebar_affix (fixes 6 latent bugs where in_affix was never persisted). SearchWidget intentionally skips the shared form section (its business show_type collides) but adopts the affix helper. - widget_display_callback parity verified via tmp assertion script. Refs .specs/plans/zibll-widgets-1to1.md Phase 2 (US1/US5) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
98aeee3cc1
commit
d975ff4ce6
60 files changed
+1227
-489
No files matched your search
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
/**
|
||||
* CommonWidgetFields trait — single seat-belt for shared widget form/update.
|
||||
*
|
||||
* Every AKSRT widget `use`s this trait so the Zibll common-field family
|
||||
* (title block, display rules, affix, animation, layout bg) is declared and
|
||||
* persisted in exactly one place: inc/modules/widget-common.php.
|
||||
*
|
||||
* Widgets keep only their business fields; the trait wires the shared section
|
||||
* into form() and folds the shared keys into update().
|
||||
*
|
||||
* @package AKSRT\Widgets\Traits
|
||||
*/
|
||||
|
||||
namespace AKSRT\Widgets\Traits;
|
||||
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
trait CommonWidgetFields {
|
||||
|
||||
/**
|
||||
* Whether this widget should render the shared common-form section.
|
||||
*
|
||||
* Override and return false for pure-display widgets with no admin form.
|
||||
* Default: true (every widget gets the shared block).
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function use_common_form(): bool {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the shared common-form section at the end of a widget's form().
|
||||
*
|
||||
* Call from form(): render business fields, then `$this->render_common_form_section($instance);`.
|
||||
*
|
||||
* @param array<string,mixed> $instance Widget instance.
|
||||
*/
|
||||
protected function render_common_form_section(array $instance): void {
|
||||
if (!$this->use_common_form()) {
|
||||
return;
|
||||
}
|
||||
if (function_exists('aksrt_widget_render_common_form')) {
|
||||
aksrt_widget_render_common_form($instance);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge shared common fields into a widget's update() result.
|
||||
*
|
||||
* Usage in update():
|
||||
* return $this->update_common_fields($new_instance, $old_instance, [
|
||||
* 'title' => sanitize_text_field(...),
|
||||
* ...business fields...
|
||||
* ]);
|
||||
*
|
||||
* @param array<string,mixed> $new_instance New submitted instance.
|
||||
* @param array<string,mixed> $old_instance Previous instance.
|
||||
* @param array<string,mixed> $business Sanitized business fields to keep.
|
||||
* @return array<string,mixed>
|
||||
*/
|
||||
protected function update_common_fields(array $new_instance, array $old_instance, array $business = []): array {
|
||||
if (!$this->use_common_form()) {
|
||||
return $business;
|
||||
}
|
||||
if (function_exists('aksrt_widget_update_common')) {
|
||||
$common = aksrt_widget_update_common($new_instance, $old_instance);
|
||||
return array_merge($business, $common);
|
||||
}
|
||||
return $business;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user