[], 'title_field' => '', 'prevent_empty' => true, 'is_repeater' => true, 'item_actions' => [ 'add' => true, 'duplicate' => true, 'remove' => true, 'sort' => true, ], 'dynamic' => [ 'returnType' => 'object', ], ]; } /** * Get repeater control value. * * Retrieve the value of the repeater control from a specific Controls_Stack. * * @since 1.0.0 * * @param array $control Control * @param array $settings Controls_Stack settings * * @return mixed Control values */ public function getValue($control, $settings) { $value = parent::getValue($control, $settings); if (!empty($value)) { foreach ($value as &$item) { foreach ($control['fields'] as $field) { $control_obj = Plugin::$instance->controls_manager->getControl($field['type']); // Prior to 1.5.0 the fields may contains non-data controls. if (!$control_obj instanceof BaseDataControl) { continue; } $item[$field['name']] = $control_obj->getValue($field, $item); } } } return $value; } /** * Import repeater. * * Used as a wrapper method for inner controls while importing Elementor * template JSON file, and replacing the old data. * * @since 1.8.0 * * @param array $settings Control settings * @param array $control_data Optional. Control data. Default is an empty array * * @return array Control settings */ public function onImport($settings, $control_data = []) { if (empty($settings) || empty($control_data['fields'])) { return $settings; } $method = 'onImport'; foreach ($settings as &$item) { foreach ($control_data['fields'] as $field) { if (empty($field['name']) || empty($item[$field['name']])) { continue; } $control_obj = Plugin::$instance->controls_manager->getControl($field['type']); if (!$control_obj) { continue; } if (method_exists($control_obj, $method)) { $item[$field['name']] = $control_obj->{$method}($item[$field['name']], $field); } } } return $settings; } /** * Render repeater control output in the editor. * * Used to generate the control HTML in the editor using Underscore JS * template. The variables for the class are available using `data` JS * object. * * @since 1.0.0 */ public function contentTemplate() { ?>
<# if ( itemActions.add && itemActions.add.product ) { #> <# } #>
<# if ( itemActions.add && itemActions.add.product ) { #>
<# } else if ( itemActions.add ) { #>
<# } #>