diff --git a/app/Presenters/Admin/OptionFormFieldsPresenter.php b/app/Presenters/Admin/OptionFormFieldsPresenter.php
index 8cf6ad0..8f3d4f7 100644
--- a/app/Presenters/Admin/OptionFormFieldsPresenter.php
+++ b/app/Presenters/Admin/OptionFormFieldsPresenter.php
@@ -2,6 +2,7 @@
namespace App\Presenters\Admin;
+use App\Repositories\MediaFileRepository;
use Arr;
class OptionFormFieldsPresenter
@@ -11,6 +12,7 @@ class OptionFormFieldsPresenter
$options = config('admin.options.' . $page);
$presenter = app('Html');
$optionRepo = app('Option');
+ $mediaFileRepo = app(MediaFileRepository::class);
$html = '';
if(!empty($options['fields'])) {
foreach($options['fields'] as $key => $option) {
@@ -35,7 +37,7 @@ class OptionFormFieldsPresenter
]),
$presenter->div([
'class' => 'col-12 col-md-6',
- 'html' => function() use ($key, $type, $required, $presenter, $optionRepo) {
+ 'html' => function() use ($key, $type, $required, $presenter, $optionRepo, $mediaFileRepo) {
$html = '';
$bastHtmlArgs = [
@@ -43,6 +45,39 @@ class OptionFormFieldsPresenter
'id' => 'option-' . $key,
];
switch ($type) {
+ case 'media':
+ $mediaFiledId = $optionRepo->$key;
+ $mediaFile = $mediaFileRepo->findModel($mediaFiledId);
+ $previewImgHtml = '';
+ $mediaFieldContentHtml = '';
+ if($mediaFile) {
+ $previewImgHtml = $presenter->img([
+ 'src' => $mediaFile->url
+ ]);
+ }
+ $mediaFieldContentHtml .= $presenter->input(array_merge([
+ 'type' => 'hidden',
+ 'class' => 'input',
+ 'value' => $mediaFiledId
+ ], $bastHtmlArgs));
+ $mediaFieldContentHtml .= $presenter->div([
+ 'class' => 'preview',
+ 'html' => $previewImgHtml
+ ]);
+ $mediaFieldContentHtml .= $presenter->button([
+ 'class' => ['btn', 'btn-success', 'select-media'],
+ 'html' => '選擇'
+ ]);
+ $mediaFieldContentHtml .= $presenter->button([
+ 'class' => ['btn', 'btn-danger', 'clear-media'],
+ 'style' => !$mediaFile ? 'display:none;' : '',
+ 'html' => '清除'
+ ]);
+ $html .= $presenter->div([
+ 'class' => 'option-media-field',
+ 'html' => $mediaFieldContentHtml
+ ]);
+ break;
case 'text':
case 'password':
case 'email':
diff --git a/app/Presenters/Html/BaseHtmlPresenter.php b/app/Presenters/Html/BaseHtmlPresenter.php
index 3cc1ba8..a7d454a 100644
--- a/app/Presenters/Html/BaseHtmlPresenter.php
+++ b/app/Presenters/Html/BaseHtmlPresenter.php
@@ -23,23 +23,16 @@ trait BaseHtmlPresenter
public function getAttributes($fieldArgs = [])
{
$attributes = [];
- $multiValueAttributes = [
- 'class',
- 'style',
- ];
+
Arr::forget($fieldArgs, 'html');
foreach ($fieldArgs as $name => $value) {
- if(in_array($name, $multiValueAttributes)) {
- if(is_array($value)) {
- $value = array_filter($value);
- $values = trim(implode(' ', $value));
- } else {
- $values = $value;
- }
- array_push($attributes, $this->getAttribute($name, $values));
+ if(is_array($value)) {
+ $value = array_filter($value);
+ $values = trim(implode(' ', $value));
} else {
- array_push($attributes, $this->getAttribute($name, $value));
+ $values = $value;
}
+ array_push($attributes, $this->getAttribute($name, $values));
}
return trim(implode(' ', $attributes));
}
diff --git a/app/Presenters/LogoPresenter.php b/app/Presenters/LogoPresenter.php
new file mode 100644
index 0000000..001a40b
--- /dev/null
+++ b/app/Presenters/LogoPresenter.php
@@ -0,0 +1,20 @@
+logo;
+ $mediaFileRepo = app(MediaFileRepository::class);
+ $logoMedia = $mediaFileRepo->findModel($logoId);
+ if($logoMedia) {
+ return $logoMedia->url;
+ }
+ return '';
+ }
+}
diff --git a/config/admin.php b/config/admin.php
index af3b5bd..841fbf6 100644
--- a/config/admin.php
+++ b/config/admin.php
@@ -32,6 +32,10 @@ return [
'general' => [
'permission' => 'admin manage options general',
'fields' => [
+ 'logo' => [
+ 'label' => 'logo',
+ 'type' => 'media'
+ ],
'site_name' => [
'label' => 'siteName',
'validator' => 'required',
diff --git a/resources/js/admin/page/options.js b/resources/js/admin/page/options.js
new file mode 100644
index 0000000..eb484ba
--- /dev/null
+++ b/resources/js/admin/page/options.js
@@ -0,0 +1,26 @@
+$('.select-media').on('click', e => {
+ e.preventDefault()
+ let $this = $(e.currentTarget),
+ $input = $this.siblings('input'),
+ $preview = $this.siblings('.preview'),
+ $clearButton = $this.siblings('.clear-media')
+
+ app.methods.media(true, $input.get(0), true, (data) => {
+ let media = data.medias[0]
+ $preview.empty().append(
+ $('').attr('src', media.url)
+ )
+ $clearButton.show()
+ })
+})
+
+$('.clear-media').on('click', e => {
+ e.preventDefault()
+ let $this = $(e.currentTarget),
+ $input = $this.siblings('input'),
+ $preview = $this.siblings('.preview')
+
+ $input.val(null)
+ $preview.empty()
+ $this.hide()
+})
diff --git a/resources/lang/en/adminOptionLabels.php b/resources/lang/en/adminOptionLabels.php
index 0c225f9..a38db85 100644
--- a/resources/lang/en/adminOptionLabels.php
+++ b/resources/lang/en/adminOptionLabels.php
@@ -1,5 +1,6 @@
'Logo',
'siteName' => 'Site Name',
'siteDescription' => 'Site Description',
'blockSearchEngineIndexing' => 'Block Search Engine Indexing',
diff --git a/resources/sass/_app-common.scss b/resources/sass/_app-common.scss
new file mode 100644
index 0000000..e52de08
--- /dev/null
+++ b/resources/sass/_app-common.scss
@@ -0,0 +1,3 @@
+#app-logo {
+ max-height: 25px;
+}
diff --git a/resources/sass/admin/app.scss b/resources/sass/admin/app.scss
index 0433349..274acef 100644
--- a/resources/sass/admin/app.scss
+++ b/resources/sass/admin/app.scss
@@ -4,8 +4,4 @@
@import "components/datatables";
@import "components/blockui";
@import "../components/media-library";
-
-
-
-
-
+@import "../app-common";
diff --git a/resources/sass/admin/page/options.scss b/resources/sass/admin/page/options.scss
new file mode 100644
index 0000000..1408e4b
--- /dev/null
+++ b/resources/sass/admin/page/options.scss
@@ -0,0 +1,7 @@
+.option-media-field {
+ .preview {
+ img {
+ max-width: 50%;
+ }
+ }
+}
diff --git a/resources/sass/app.scss b/resources/sass/app.scss
index 3193ffa..0db3d2f 100644
--- a/resources/sass/app.scss
+++ b/resources/sass/app.scss
@@ -6,3 +6,5 @@
// Bootstrap
@import '~bootstrap/scss/bootstrap';
+
+@import "app-common";
diff --git a/resources/views/admin/layouts/app.blade.php b/resources/views/admin/layouts/app.blade.php
index 33ec86b..5efe770 100644
--- a/resources/views/admin/layouts/app.blade.php
+++ b/resources/views/admin/layouts/app.blade.php
@@ -29,10 +29,9 @@
-