cms-token/@core/app/PageBuilder/Fields/Repeater.php

94 lines
3.4 KiB
PHP

<?php
namespace App\PageBuilder\Fields;
use App\Helpers\LanguageHelper;
use App\PageBuilder\Helpers\RepeaterField;
use App\PageBuilder\Helpers\Traits\FieldInstanceHelper;
use App\PageBuilder\Helpers\Traits\LanguageTabs;
use App\PageBuilder\PageBuilderField;
class Repeater extends PageBuilderField
{
use FieldInstanceHelper;
/**
* render field markup
* */
public function render()
{
$output = '<div class="iconbox-repeater-wrapper">';
$all_settings = $this->args['settings'];
$this->args['settings'] = RepeaterField::remove_default_fields($all_settings);
$repeater_id = $this->args['settings'][$this->args['id']] ?? [];
$last_field = array_key_last($repeater_id);
$last_field = !empty($last_field) ? $repeater_id[$last_field] : [];
if (!empty($last_field) && is_array($last_field) && count($last_field) > 0) {
foreach ($last_field as $index => $value) {
$output .= $this->render_repeater_fields($index);
}
} else {
$output .= $this->render_repeater_fields();
}
$output .= '</div>';
return $output;
}
private function render_fields($fields, $settings, $index = '', $lang = null): string
{
$output = '';
foreach ($fields as $field) {
$class = 'App\PageBuilder\Fields\\' . $field['type'];
$field_name = $field['name'] . '_' . $lang;
$value = '';
if (isset($settings[$this->args['id']][$field_name]) && is_array($settings[$this->args['id']][$field_name])){
$value = $settings[$this->args['id']][$field_name][$index];
}elseif (isset($settings[$this->args['id']][$field_name])){
$value = $settings[$this->args['id']][$field_name];
}
$instance = new $class(array_merge($field,[
'name' => $this->args['id'].'['.$field_name . '][]',
'value' => $value
]));
$output .= $instance->render();
}
return $output;
}
public function render_repeater_fields( $index = null): string
{
$output = '<div class="all-field-wrap">';
$output .= '<div class="action-wrap"> <span class="add"><i class="ti-plus"></i></span> <span class="remove"><i class="ti-trash"></i></span></div>';
$language_tab_init = LanguageTabs::init();
if (isset($this->args['multi_lang']) && $this->args['multi_lang']) {
$output .= $language_tab_init->language_tab();
$output .= $language_tab_init->language_tab_start();
$all_languages = LanguageHelper::all_languages();
foreach ($all_languages as $key => $lang) {
$output .= $language_tab_init->language_tab_content_start([
'class' => $key == 0 ? 'tab-pane fade show active' : 'tab-pane fade',
'id' => "nav-home-" . $lang->slug
]);
$output .= $this->render_fields($this->args['fields'], $this->args['settings'], $index, $lang->slug);
$output .= $language_tab_init->language_tab_content_end();
}
$output .= $language_tab_init->language_tab_end();
} else {
$output .= $this->render_fields($this->args['fields'], $this->args['settings'],$index);
}
$output .= '</div>';
return $output;
}
}