diff --git a/publishable/lang/en/generic.php b/publishable/lang/en/generic.php index 484122f22d..fdbac2fbf3 100644 --- a/publishable/lang/en/generic.php +++ b/publishable/lang/en/generic.php @@ -7,6 +7,7 @@ 'add' => 'Add', 'add_folder' => 'Add Folder', 'add_new' => 'Add New', + 'add_row' => 'Add Row', 'all_done' => 'All done', 'are_you_sure' => 'Are you sure', 'are_you_sure_delete' => 'Are you sure you want to delete', @@ -81,6 +82,7 @@ 'required' => 'Required', 'return_to_list' => 'Return to List', 'route' => 'Route', + 'row' => 'Row', 'save' => 'Save', 'search' => 'Search', 'select_all' => 'Select All', @@ -105,6 +107,7 @@ 'updated_order' => 'Order updated', 'upload' => 'Upload', 'url' => 'URL', + 'value' => 'Value', 'view' => 'View', 'viewing' => 'Viewing', 'whoopsie' => 'Whoopsie!', diff --git a/publishable/lang/pt/generic.php b/publishable/lang/pt/generic.php index f2f1899c86..075131c560 100644 --- a/publishable/lang/pt/generic.php +++ b/publishable/lang/pt/generic.php @@ -7,6 +7,7 @@ 'add' => 'Adicionar', 'add_folder' => 'Adicionar Pasta', 'add_new' => 'Adicionar', + 'add_row' => 'Adicionar Linha', 'all_done' => 'Concluído', 'are_you_sure' => 'Tem certeza', 'are_you_sure_delete' => 'Tem certeza de que deseja remover', @@ -63,6 +64,7 @@ 'required' => 'Requerido', 'return_to_list' => 'Voltar à lista', 'route' => 'Rota', + 'row' => 'Linha', 'save' => 'Guardar', 'search' => 'Procurar', 'select_all' => 'Selecione Todos', @@ -81,6 +83,7 @@ 'update_failed' => 'atualização falhou', 'upload' => 'Upload', 'url' => 'URL', + 'value' => 'Valor', 'view' => 'Ver', 'viewing' => 'Visualizando', 'yes' => 'Sim', diff --git a/publishable/lang/pt_br/generic.php b/publishable/lang/pt_br/generic.php index fb5d440c2c..c9aeff16f8 100644 --- a/publishable/lang/pt_br/generic.php +++ b/publishable/lang/pt_br/generic.php @@ -7,6 +7,7 @@ 'add' => 'Adicionar', 'add_folder' => 'Adicionar Pasta', 'add_new' => 'Adicionar', + 'add_row' => 'Adicionar Linha', 'all_done' => 'Concluído', 'are_you_sure' => 'Tem certeza', 'are_you_sure_delete' => 'Tem certeza de que deseja remover', @@ -95,6 +96,7 @@ 'title' => 'Título', 'type' => 'Tipo', 'restore' => 'Restaurar', + 'row' => 'Linha', 'unsigned' => 'Não assinado', 'unstick_sidebar' => 'Descolar a barra lateral', 'update' => 'Atualizar', @@ -102,6 +104,7 @@ 'updated_order' => 'Ordem atualizada', 'upload' => 'Upload', 'url' => 'URL', + 'value' => 'Valor', 'view' => 'Ver', 'viewing' => 'Visualizando', 'whoopsie' => 'Oops!', diff --git a/resources/views/bread/browse.blade.php b/resources/views/bread/browse.blade.php index 3498a56443..629c5d8b1e 100644 --- a/resources/views/bread/browse.blade.php +++ b/resources/views/bread/browse.blade.php @@ -204,6 +204,18 @@
{{ mb_strlen( strip_tags($data->{$row->field}, '') ) > 200 ? mb_substr(strip_tags($data->{$row->field}, ''), 0, 200) . ' ...' : strip_tags($data->{$row->field}, '') }}
@elseif($row->type == 'coordinates') @include('voyager::partials.coordinates-static-image') + @elseif($row->type == 'key_value') + @php + $currentKeyValue = isset($data->{$row->field}) ? $data->{$row->field} : '{}'; + $currentKeyValue = json_decode($currentKeyValue, true); + @endphp + @if(isset($currentKeyValue) && (count($currentKeyValue))) +
    + @foreach($currentKeyValue as $key => $value) +
  • {{ $key }}: {{ $value }}
  • + @endforeach +
+ @endif @elseif($row->type == 'multiple_images') @php $images = json_decode($data->{$row->field}); @endphp @if($images) diff --git a/resources/views/bread/read.blade.php b/resources/views/bread/read.blade.php index 658f46b401..51e2ff77fd 100644 --- a/resources/views/bread/read.blade.php +++ b/resources/views/bread/read.blade.php @@ -56,6 +56,18 @@ @elseif($row->type == "image") + @elseif($row->type == 'key_value') + @php + $currentKeyValue = isset($dataTypeContent->{$row->field}) ? $dataTypeContent->{$row->field} : '{}'; + $currentKeyValue = json_decode($currentKeyValue, true); + @endphp + @if(isset($currentKeyValue) && (count($currentKeyValue))) +
    + @foreach($currentKeyValue as $key => $value) +
  • {{ $key }}: {{ $value }}
  • + @endforeach +
+ @endif @elseif($row->type == 'multiple_images') @if(json_decode($dataTypeContent->{$row->field})) @foreach(json_decode($dataTypeContent->{$row->field}) as $file) diff --git a/resources/views/formfields/key_value.blade.php b/resources/views/formfields/key_value.blade.php new file mode 100644 index 0000000000..9f5a4221b2 --- /dev/null +++ b/resources/views/formfields/key_value.blade.php @@ -0,0 +1,94 @@ +
+@php + $currentKeyValue = isset($dataTypeContent->{$row->field}) ? $dataTypeContent->{$row->field} : '{}'; + $currentKeyValue = json_decode($currentKeyValue, true); +@endphp +
+
+ +
+ + + + + + + + + + @if(isset($currentKeyValue) && (count($currentKeyValue))) + @foreach($currentKeyValue as $key => $value) + + + + + + @endforeach + @else + + + + + + @endif + +
{{ __('voyager::generic.key') }}{{ __('voyager::generic.value') }}{{ __('voyager::generic.action') }}
{{ $key }}{{ $value }}
+
+ +
+
+ + \ No newline at end of file diff --git a/src/FormFields/KeyValueHandler.php b/src/FormFields/KeyValueHandler.php new file mode 100644 index 0000000000..1621a0b3d3 --- /dev/null +++ b/src/FormFields/KeyValueHandler.php @@ -0,0 +1,18 @@ + $row, + 'options' => $options, + 'dataType' => $dataType, + 'dataTypeContent' => $dataTypeContent, + ]); + } +} diff --git a/src/Http/Controllers/ContentTypes/KeyValue.php b/src/Http/Controllers/ContentTypes/KeyValue.php new file mode 100644 index 0000000000..9a985906e4 --- /dev/null +++ b/src/Http/Controllers/ContentTypes/KeyValue.php @@ -0,0 +1,14 @@ +request->input($this->row->field) ?? '{}'; + } +} diff --git a/src/Http/Controllers/Controller.php b/src/Http/Controllers/Controller.php index a37e26c276..e88b4ab072 100644 --- a/src/Http/Controllers/Controller.php +++ b/src/Http/Controllers/Controller.php @@ -14,6 +14,7 @@ use TCG\Voyager\Http\Controllers\ContentTypes\Coordinates; use TCG\Voyager\Http\Controllers\ContentTypes\File; use TCG\Voyager\Http\Controllers\ContentTypes\Image as ContentImage; +use TCG\Voyager\Http\Controllers\ContentTypes\KeyValue; use TCG\Voyager\Http\Controllers\ContentTypes\MultipleCheckbox; use TCG\Voyager\Http\Controllers\ContentTypes\MultipleImage; use TCG\Voyager\Http\Controllers\ContentTypes\Password; @@ -264,6 +265,9 @@ public function getContentBasedOnType(Request $request, $slug, $row, $options = /********** CHECKBOX TYPE **********/ case 'checkbox': return (new Checkbox($request, $slug, $row, $options))->handle(); + /********** KEY VALUE TYPE **********/ + case 'key_value': + return (new KeyValue($request, $slug, $row, $options))->handle(); /********** MULTIPLE CHECKBOX TYPE **********/ case 'multiple_checkbox': return (new MultipleCheckbox($request, $slug, $row, $options))->handle(); diff --git a/src/VoyagerServiceProvider.php b/src/VoyagerServiceProvider.php index 053556c1ad..2badaa6155 100644 --- a/src/VoyagerServiceProvider.php +++ b/src/VoyagerServiceProvider.php @@ -318,6 +318,7 @@ protected function registerFormFields() 'date', 'file', 'image', + 'key_value', 'multiple_images', 'media_picker', 'number',