LLMS_Metabox_Repeater_Field
Meta box Repeater Field class
Source Source
File: includes/admin/post-types/meta-boxes/fields/llms.class.meta.box.repeater.php
class LLMS_Metabox_Repeater_Field extends LLMS_Metabox_Field implements Meta_Box_Field_Interface {
/**
* Class constructor
*
* @param array $_field Array containing information about field
* @since 3.11.0
* @version 3.11.0
*/
public function __construct( $_field ) {
$button_defaults = array(
'classes' => '', // Array or space separated string.
'icon' => 'dashicons-plus', // dashicon classname or HTML/String.
'id' => $_field['id'] . '-add-new',
'size' => 'small',
'style' => 'primary',
'text' => __( 'Add New', 'lifterlms' ),
);
if ( empty( $_field['button'] ) ) {
$_field['button'] = $button_defaults;
} else {
$_field['button'] = wp_parse_args( $_field['button'], $button_defaults );
}
$this->field = $_field;
}
/**
* Retrieve the HTML for the repeater add more button
*
* @return string
* @since 3.11.0
* @version 3.11.0
*/
private function get_button() {
$btn = $this->field['button'];
// Setup class list.
$classes = explode( ' ', $btn['classes'] );
$classes[] = sprintf( 'llms-button-%s', $btn['style'] );
$classes[] = $btn['size'];
$classes[] = 'llms-repeater-new-btn';
$classes = implode( ' ', $classes );
// Setup icon.
if ( $btn['icon'] && 0 === strpos( $btn['icon'], 'dashicons-' ) ) {
$icon = '<span class="dashicons ' . $btn['icon'] . '"></span> ';
} else {
$icon = $btn['icon'];
}
return '<button class="' . $classes . '" type="button">' . $icon . $btn['text'] . '</button>';
}
private function get_rows() {
$rows = '';
return $rows;
}
private function get_row( $index ) {
ob_start();
?>
<div class="llms-collapsible llms-repeater-row" data-row-order="<?php echo $index; ?>">
<header class="llms-collapsible-header">
<div class="d-2of3">
<h3 class="llms-repeater-title"><?php echo $this->field['header']['default']; ?></h3>
</div>
<div class="d-1of3 d-right">
<span class="dashicons dashicons-arrow-down"></span>
<span class="dashicons dashicons-arrow-up"></span>
<span class="dashicons dashicons-menu llms-drag-handle"></span>
<span class="dashicons dashicons-no llms-repeater-remove"></span>
</div>
</header>
<section class="llms-collapsible-body">
<ul class="llms-mb-repeater-fields">
<?php foreach ( $this->field['fields'] as $field ) : ?>
<?php echo $this->get_sub_field( $field, $index ); ?>
<?php endforeach; ?>
</ul>
</section>
</div>
<?php
return ob_get_clean();
}
/**
* Get repeater sub field html output
*
* @return string
* @since 3.11.0
* @version 3.17.3
*/
private function get_sub_field( $field, $index ) {
$field['id'] .= '_' . $index;
if ( isset( $field['controller'] ) ) {
$field['controller'] .= '_' . $index;
}
$name = ucfirst(
strtr(
preg_replace_callback(
'/(\w+)/',
function( $m ) {
return ucfirst( $m[1] );
},
$field['type']
),
'-',
'_'
)
);
$field_class_name = str_replace( '{TOKEN}', $name, 'LLMS_Metabox_{TOKEN}_Field' );
$field_class = new $field_class_name( $field );
ob_start();
$field_class->output();
return ob_get_clean();
}
/**
* Outputs the Html for the given field
*
* @return void
* @since 3.11.0
* @version 3.11.0
*/
public function output() {
global $post;
parent::output();
echo '<div class="llms-repeater-model" id="' . $this->field['id'] . '-model" style="display:none;">' . $this->get_row( 'model' ) . '</div>';
echo '<div class="llms-collapsible-group llms-repeater-rows">' . $this->get_rows() . '</div>';
echo '<footer class="llms-mb-repeater-footer">';
echo $this->get_button();
echo '</footer>';
echo '<input class="llms-repeater-field-handler" type="hidden" value="' . $this->field['handler'] . '">';
parent::close_output();
}
}
Expand full source code Collapse full source code View on GitHub
Methods Methods
- __construct — Class constructor
- get_button — Retrieve the HTML for the repeater add more button
- get_row
- get_rows
- get_sub_field — Get repeater sub field html output
- output — Outputs the Html for the given field
Changelog Changelog
| Version | Description |
|---|---|
| 3.11.0 | Introduced. |