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
+
+
+
+
+
+
+
+ | {{ __('voyager::generic.key') }} |
+ {{ __('voyager::generic.value') }} |
+ {{ __('voyager::generic.action') }} |
+
+
+
+ @if(isset($currentKeyValue) && (count($currentKeyValue)))
+ @foreach($currentKeyValue as $key => $value)
+
+ | {{ $key }} |
+ {{ $value }} |
+ |
+
+ @endforeach
+ @else
+
+ |
+ |
+ |
+
+ @endif
+
+
+
+
+
+
+
+
\ 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',