]> _ Git - psq.git/commitdiff
blocks, detail com campaigns
authorLouis Jeckel <louis.jeckel@outlook.cm>
Thu, 13 Aug 2020 14:23:35 +0000 (16:23 +0200)
committerLouis Jeckel <louis.jeckel@outlook.cm>
Thu, 13 Aug 2020 14:23:35 +0000 (16:23 +0200)
30 files changed:
app/Helpers/Fields.php
app/Helpers/StreamingPlatforms.php [new file with mode: 0644]
app/Http/Controllers/ActuLabosController.php
app/Http/Controllers/AdCampaignController.php
app/Http/Controllers/Admin/AdCampaignController.php
app/Http/Controllers/PodcastController.php
app/Models/AdCampaign.php
app/Models/LaboArticle.php
app/Models/Podcast.php
app/Repositories/AdCampaignRepository.php
app/Repositories/PodcastRepository.php
config/twill.php
database/migrations/2020_08_13_124520_drop_url_col_from_ad_campaigns.php [new file with mode: 0644]
public/admin/js/admin.js
public/css/app.css
public/js/app.js
resources/js/components/AdCampaign/CampaignHit.vue
resources/sass/_blocks.scss [new file with mode: 0644]
resources/sass/app.scss
resources/views/actu-labos/index.blade.php
resources/views/actu-labos/show.blade.php
resources/views/admin/adCampaigns/form.blade.php
resources/views/admin/blocks/image.blade.php [new file with mode: 0644]
resources/views/admin/blocks/youtube.blade.php [new file with mode: 0644]
resources/views/com-campaigns/index.blade.php
resources/views/com-campaigns/show.blade.php [new file with mode: 0644]
resources/views/components/simple-preview.blade.php
resources/views/site/blocks/image.blade.php [new file with mode: 0644]
resources/views/site/blocks/youtube.blade.php [new file with mode: 0644]
routes/web.php

index 65dffb22651d460b159e2427be99ad5a0ce7d854..55895625646a6364c8ad44a1a1549d230c51e8ea 100644 (file)
@@ -10,7 +10,7 @@ class Fields
     public static function fullToolbar(): array
     {
         return [
-            [ 'header' => [2, 3, false] ],
+            [ 'header' => [3, 4, false] ],
             'link',
             'bold',
             'italic',
diff --git a/app/Helpers/StreamingPlatforms.php b/app/Helpers/StreamingPlatforms.php
new file mode 100644 (file)
index 0000000..c78e48b
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+
+
+namespace App\Helpers;
+
+
+class StreamingPlatforms
+{
+    /**
+     * @param $url
+     * @return string|null
+     */
+    public static function youtubeEmbed($url): ?string
+    {
+        $video_id = null;
+        if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/\s]{11})%i', $url, $match)) {
+            $video_id = $match[1];
+            return "https://www.youtube-nocookie.com/embed/$video_id";
+        }
+        return null;
+    }
+
+}
index be4dd5e40b904456b4da56478a3ef5b0e5b51cab..88b8596f160c80199dd52b81e187946e0db9fe02 100644 (file)
@@ -17,10 +17,8 @@ class ActuLabosController extends Controller
 
     public function show($slug, LaboArticleRepository $repository)
     {
-
         $actu = $repository->forSlug($slug);
 
-
         \View::share('actu', $actu);
         return view('actu-labos.show');
     }
index 0267fd4267e438cf8a936e102088417098f1b57f..44fc8a1cc8dd165650cf67a9c34a5b8d4d61b8ed 100644 (file)
@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Models\AdCampaign;
+use App\Repositories\AdCampaignRepository;
 use Illuminate\Http\Request;
 
 class AdCampaignController extends Controller
@@ -15,7 +16,6 @@ class AdCampaignController extends Controller
 
     /**
      * @return \Illuminate\View\View
-     * @todo : Always last 3 ?
      *
      */
     public function index()
@@ -24,11 +24,22 @@ class AdCampaignController extends Controller
             ->orderByDesc('id')
             ->take(3)
             ->published()
+            ->visible()
             ->get();
         \View::share('campaigns', $campaigns);
         return view('com-campaigns.index');
     }
 
 
+    public function show($slug, AdCampaignRepository $repository)
+    {
+        $campaign = $repository->forSlug($slug);
+        \View::share('campaign', $campaign);
+
+        return view('com-campaigns.show');
+
+    }
+
+
 
 }
index 7ccac6e1bb0b0c0e176ed35b99ee642a81891406..b1d192fa63aaf51c3001e8d87381b8408f76a647 100644 (file)
@@ -7,4 +7,10 @@ use A17\Twill\Http\Controllers\Admin\ModuleController;
 class AdCampaignController extends ModuleController
 {
     protected $moduleName = 'adCampaigns';
+
+    protected $indexOptions = [
+//        'reorder' => true
+    ];
 }
+
+
index eb20ad597a9c7a941b147885ca954341abb22a81..7291ce1369a42264046ee4992bb5dc712b72039c 100644 (file)
@@ -11,7 +11,7 @@ class PodcastController extends Controller
 
     public function index()
     {
-        \View::share('podcast', Podcast::published()->orderByDesc('id')->first());
+        \View::share('podcast', Podcast::published()->visible()->orderByDesc('id')->first());
         return view('podcasts.index');
     }
 }
index f357f5a35aadeef4d9f91a055108f49a8640882b..b1c12d3151db48716df97d7aac8577a0889d1b4c 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use A17\Twill\Models\Behaviors\HasBlocks;
 use A17\Twill\Models\Behaviors\HasSlug;
 use A17\Twill\Models\Behaviors\HasMedias;
 use A17\Twill\Models\Behaviors\HasPosition;
@@ -9,9 +10,14 @@ use A17\Twill\Models\Behaviors\Sortable;
 use A17\Twill\Models\Model;
 use Laravel\Scout\Searchable;
 
+/**
+ * Class AdCampaign
+ * @package App\Models
+ * @property string $url
+ */
 class AdCampaign extends Model implements Sortable
 {
-    use HasSlug, HasMedias, HasPosition;
+    use HasSlug, HasMedias, HasPosition, HasBlocks;
     use Searchable;
 
     protected $fillable = [
@@ -19,14 +25,14 @@ class AdCampaign extends Model implements Sortable
         'title',
         'description',
         'position',
-        'url',
         'publish_start_date',
         'publish_end_date',
         'organization'
     ];
 
     public $appends = [
-        'image'
+        'image',
+        'url'
     ];
 
     public $slugAttributes = [
@@ -68,4 +74,13 @@ class AdCampaign extends Model implements Sortable
     {
         return $this->image('image', 'preview');
     }
+
+
+    /**
+     * @return string
+     */
+    public function getUrlAttribute(): string
+    {
+        return route('com-campaign.show', ['slug' => $this->slug]) ?? '#';
+    }
 }
index 210aa7626c18dae454518351d4efbea1d58fb479..42063e727dd5c8722ce242bbbf7afebfcca6f537 100644 (file)
@@ -12,7 +12,7 @@ use A17\Twill\Models\Model;
  * Class LaboArticle
  * @package App\Models
  * @property string $content
- * @property string $link
+ * @property string $url
  * @property string $preview
  */
 class LaboArticle extends Model implements Sortable
@@ -59,7 +59,7 @@ class LaboArticle extends Model implements Sortable
     /**
      * @return string
      */
-    public function getLinkAttribute(): string
+    public function getUrlAttribute(): string
     {
         return route('actus-labos.show', ['slug' => $this->slug]);
     }
index 4d5297212d3e3c4faaec76e5b7bb5b2c5a692c42..7f67dc290e3ce8bc441163ae6a950aecdead6f5a 100644 (file)
@@ -12,7 +12,7 @@ use Illuminate\Support\Facades\Storage;
 
 class Podcast extends Model
 {
-    use HasSlug, HasMedias, HasFiles, HasBlocks;
+    use HasSlug, HasMedias, HasFiles;
 
     protected $fillable = [
         'published',
index 65c9c1d99889cfb0d5e6d197db561b1fd9a74e74..48f93f4fc362557197b192ec13301ea2fcfcdbe1 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace App\Repositories;
 
+use A17\Twill\Repositories\Behaviors\HandleBlocks;
 use A17\Twill\Repositories\Behaviors\HandleSlugs;
 use A17\Twill\Repositories\Behaviors\HandleMedias;
 use A17\Twill\Repositories\ModuleRepository;
@@ -9,7 +10,7 @@ use App\Models\AdCampaign;
 
 class AdCampaignRepository extends ModuleRepository
 {
-    use HandleSlugs, HandleMedias;
+    use HandleSlugs, HandleMedias, HandleBlocks;
 
     public function __construct(AdCampaign $model)
     {
index ea97011dadd457b793c6f56e0352272454af6b98..f028acece5c388af835ef9032db5f923912185a8 100644 (file)
@@ -12,7 +12,7 @@ use App\Models\Podcast;
 
 class PodcastRepository extends ModuleRepository
 {
-    use HandleSlugs, HandleMedias, HandleFiles, HandleBlocks, HandleRepeaters;
+    use HandleSlugs, HandleMedias, HandleFiles, HandleBlocks;
 
 
     public function __construct(Podcast $model)
index 086909f7045e1bee3e4e38014da0b474d64edbbd..47e98839d5c5b6e2834661e4e9eb40b9e8de4314 100644 (file)
@@ -286,6 +286,11 @@ return [
                 'title' => 'Invité',
                 'icon' => 'image',
                 'component' => 'a17-block-guest'
+            ],
+            'youtube' => [
+                'title' => 'Vidéo YouTube',
+                'icon' => 'video',
+                'component' => 'a17-block-youtube'
             ]
         ],
         'crops' => [
@@ -298,6 +303,16 @@ return [
                 ],
             ],
 
+            'content' => [
+                'default' => [
+                    [
+                        'name' => 'default',
+                        'ratio' => 0
+                    ]
+
+                ]
+            ],
+
             'image' => [
                 'desktop' => [
                     [
diff --git a/database/migrations/2020_08_13_124520_drop_url_col_from_ad_campaigns.php b/database/migrations/2020_08_13_124520_drop_url_col_from_ad_campaigns.php
new file mode 100644 (file)
index 0000000..226150a
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class DropUrlColFromAdCampaigns extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('ad_campaigns', function (Blueprint $table) {
+            $table->dropColumn('url');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('ad_campaigns', function (Blueprint $table) {
+            $table->string('url')->nullable();
+        });
+    }
+}
index bbcb562d3c86603a92b43e564c8ccfc886c9e93a..0b9da0dd8e6d0e8a7675de38ad0b4faec6f5c49d 100644 (file)
@@ -2173,6 +2173,8 @@ __webpack_require__.r(__webpack_exports__);
 //
 //
 //
+//
+//
 /* harmony default export */ __webpack_exports__["default"] = ({
   name: "CampaignHit",
   props: ['hit', 'flip']
@@ -49667,48 +49669,52 @@ var render = function() {
   return _vm.hit
     ? _c("div", { staticClass: "box p-1" }, [
         _c("div", [
-          _c(
-            "h3",
-            [
-              _vm.hit._highlightResult === undefined
-                ? _c("span", { domProps: { innerHTML: _vm._s(_vm.hit.title) } })
-                : _vm._e(),
-              _vm._v(" "),
-              _c("ais-highlight", {
-                attrs: { attribute: "title", hit: _vm.hit }
-              })
-            ],
-            1
-          )
+          _c("a", { attrs: { href: _vm.hit.url } }, [
+            _c(
+              "h3",
+              [
+                _vm.hit._highlightResult === undefined
+                  ? _c("span", {
+                      domProps: { innerHTML: _vm._s(_vm.hit.title) }
+                    })
+                  : _vm._e(),
+                _vm._v(" "),
+                _c("ais-highlight", {
+                  attrs: { attribute: "title", hit: _vm.hit }
+                })
+              ],
+              1
+            )
+          ])
         ]),
         _vm._v(" "),
-        _c("div", { staticClass: "row" }, [
-          _c("div", { class: { "col-sm-6": true, "order-2": _vm.flip } }, [
-            _c("img", {
-              staticClass: "w-100",
-              attrs: { src: _vm.hit.image, alt: "" }
-            })
-          ]),
+        _c("div", [
+          _c("img", {
+            class: {
+              "mw-40 mx-1": true,
+              "float-left": !_vm.flip,
+              "float-right": _vm.flip
+            },
+            attrs: { src: _vm.hit.image, alt: "" }
+          }),
           _vm._v(" "),
-          _c("div", { class: { "col-sm-6": true, "order-1": _vm.flip } }, [
-            _c("div", {
-              staticClass: "pb-2",
-              domProps: { innerHTML: _vm._s(_vm.hit.description) }
-            }),
-            _vm._v(" "),
-            _c(
-              "a",
-              {
-                class: {
-                  "click-here": true,
-                  "bottom-right": !_vm.flip,
-                  "bottom-left": _vm.flip
-                },
-                attrs: { href: _vm.hit.url, target: "_blank" }
+          _c("div", {
+            staticClass: "pb-2",
+            domProps: { innerHTML: _vm._s(_vm.hit.description) }
+          }),
+          _vm._v(" "),
+          _c(
+            "a",
+            {
+              class: {
+                "click-here": true,
+                "bottom-right": !_vm.flip,
+                "bottom-left": _vm.flip
               },
-              [_vm._v("Lire ici")]
-            )
-          ])
+              attrs: { href: _vm.hit.url }
+            },
+            [_vm._v("Lire ici")]
+          )
         ])
       ])
     : _vm._e()
index 3322380693cf162c445cad93cfd9d5d0326a5247..9b1186aa2824d465c6ca492aadf9e7f82f556cc6 100644 (file)
@@ -11482,6 +11482,12 @@ ul.leaders span + span {
   font-family: "Avenir Next Demi", sans-serif;
 }
 
+div.youtube-block iframe {
+  display: block;
+  margin: 1rem auto;
+  max-width: 100%;
+}
+
 body {
   margin-bottom: 4rem;
 }
@@ -11490,6 +11496,8 @@ body {
 div.pill-box div {
   box-shadow: 0 2px 0 rgba(90, 97, 105, 0.11), 0 4px 8px rgba(90, 97, 105, 0.12), 0 10px 10px rgba(90, 97, 105, 0.06), 0 7px 70px rgba(90, 97, 105, 0.1);
   background-color: white;
+  overflow: hidden;
+  position: relative;
 }
 
 .header-logo {
@@ -11514,14 +11522,14 @@ div.pill-box div > a {
 
 .click-here.bottom-left,
 div.pill-box div > a.bottom-left {
-  left: 25px;
+  left: 10px;
   position: absolute;
   bottom: 0;
 }
 
 .click-here.bottom-right,
 div.pill-box div > a.bottom-right {
-  right: 25px;
+  right: 10px;
   position: absolute;
   bottom: 0;
 }
@@ -11556,7 +11564,12 @@ div.pill-box div > a.bottom-right {
   color: white !important;
 }
 
-article > .content {
+article h2 {
+  font-size: 22px;
+  text-align: center;
+}
+
+article .content {
   max-width: 800px;
   font-size: larger;
   margin: auto;
@@ -11578,3 +11591,14 @@ article img.top-img {
   color: inherit !important;
 }
 
+.block-img {
+  max-width: 100%;
+  max-height: 350px;
+  display: block;
+  margin: auto;
+}
+
+.mw-40 {
+  max-width: 40%;
+}
+
index cf83dd667e9db53c28c5edf82afbff0890c97aef..27a4e1ca90b593155502ae98e8e993082c791256 100644 (file)
@@ -7368,6 +7368,8 @@ __webpack_require__.r(__webpack_exports__);
 //
 //
 //
+//
+//
 /* harmony default export */ __webpack_exports__["default"] = ({
   name: "CampaignHit",
   props: ['hit', 'flip']
@@ -79147,48 +79149,52 @@ var render = function() {
   return _vm.hit
     ? _c("div", { staticClass: "box p-1" }, [
         _c("div", [
-          _c(
-            "h3",
-            [
-              _vm.hit._highlightResult === undefined
-                ? _c("span", { domProps: { innerHTML: _vm._s(_vm.hit.title) } })
-                : _vm._e(),
-              _vm._v(" "),
-              _c("ais-highlight", {
-                attrs: { attribute: "title", hit: _vm.hit }
-              })
-            ],
-            1
-          )
+          _c("a", { attrs: { href: _vm.hit.url } }, [
+            _c(
+              "h3",
+              [
+                _vm.hit._highlightResult === undefined
+                  ? _c("span", {
+                      domProps: { innerHTML: _vm._s(_vm.hit.title) }
+                    })
+                  : _vm._e(),
+                _vm._v(" "),
+                _c("ais-highlight", {
+                  attrs: { attribute: "title", hit: _vm.hit }
+                })
+              ],
+              1
+            )
+          ])
         ]),
         _vm._v(" "),
-        _c("div", { staticClass: "row" }, [
-          _c("div", { class: { "col-sm-6": true, "order-2": _vm.flip } }, [
-            _c("img", {
-              staticClass: "w-100",
-              attrs: { src: _vm.hit.image, alt: "" }
-            })
-          ]),
+        _c("div", [
+          _c("img", {
+            class: {
+              "mw-40 mx-1": true,
+              "float-left": !_vm.flip,
+              "float-right": _vm.flip
+            },
+            attrs: { src: _vm.hit.image, alt: "" }
+          }),
           _vm._v(" "),
-          _c("div", { class: { "col-sm-6": true, "order-1": _vm.flip } }, [
-            _c("div", {
-              staticClass: "pb-2",
-              domProps: { innerHTML: _vm._s(_vm.hit.description) }
-            }),
-            _vm._v(" "),
-            _c(
-              "a",
-              {
-                class: {
-                  "click-here": true,
-                  "bottom-right": !_vm.flip,
-                  "bottom-left": _vm.flip
-                },
-                attrs: { href: _vm.hit.url, target: "_blank" }
+          _c("div", {
+            staticClass: "pb-2",
+            domProps: { innerHTML: _vm._s(_vm.hit.description) }
+          }),
+          _vm._v(" "),
+          _c(
+            "a",
+            {
+              class: {
+                "click-here": true,
+                "bottom-right": !_vm.flip,
+                "bottom-left": _vm.flip
               },
-              [_vm._v("Lire ici")]
-            )
-          ])
+              attrs: { href: _vm.hit.url }
+            },
+            [_vm._v("Lire ici")]
+          )
         ])
       ])
     : _vm._e()
index a3401dd9c47df595f8d3a8306445aaf16c0d5f89..c0d3f49161921b01ff109d34e2d6fef1cf74faaf 100644 (file)
@@ -2,20 +2,22 @@
     <div class="box p-1" v-if="hit">
 
         <div>
+            <a :href="hit.url">
             <h3>
                 <span v-if="hit._highlightResult === undefined" v-html="hit.title"></span>
                 <ais-highlight attribute="title" :hit="hit" />
             </h3>
+            </a>
 
         </div>
-        <div class="row">
-            <div :class="{'col-sm-6': true, 'order-2' : flip}">
-                <img class="w-100" :src="hit.image" alt="">
-            </div>
-            <div :class="{'col-sm-6': true, 'order-1' : flip}">
-                <div v-html="hit.description" class="pb-2"></div>
-                <a :href="hit.url" target="_blank" :class="{'click-here': true,  'bottom-right': !flip, 'bottom-left': flip}">Lire ici</a>
-            </div>
+        <div>
+
+            <img :class="{'mw-40 mx-1': true, 'float-left': !flip, 'float-right': flip} " :src="hit.image" alt="">
+
+            <div v-html="hit.description" class="pb-2"></div>
+            <a :href="hit.url" :class="{'click-here': true,  'bottom-right': !flip, 'bottom-left': flip}">Lire ici</a>
+
+
         </div>
 
     </div>
diff --git a/resources/sass/_blocks.scss b/resources/sass/_blocks.scss
new file mode 100644 (file)
index 0000000..8e253a6
--- /dev/null
@@ -0,0 +1,10 @@
+//YOUTUBE
+
+div.youtube-block {
+    iframe {
+        display: block;
+        margin: 1rem auto;
+        max-width: 100%;
+    }
+
+}
index df5d0692c85a66d9ca54cce71b5c8f3d304e5dfe..a2e18062a85395e0e185c4297ea2414c524461f8 100644 (file)
@@ -10,6 +10,7 @@
 @import "covers";
 @import "pill_boxes";
 @import "title_dots";
+@import "blocks";
 
 body {
     margin-bottom: 4rem;
@@ -21,6 +22,8 @@ body {
     0 10px 10px rgba(90, 97, 105, 0.06),
     0 7px 70px rgba(90, 97, 105, 0.1);
     background-color: white;
+    overflow: hidden;
+    position: relative;
 }
 
 .header-logo {
@@ -45,13 +48,13 @@ a {
 
     &.bottom {
         &-left {
-            left:25px;
+            left:10px;
             position: absolute;
             bottom: 0;
         }
 
         &-right {
-            right:25px;
+            right:10px;
             position: absolute;
             bottom: 0;
         }
@@ -102,7 +105,12 @@ a {
 }
 
 article {
-    > .content {
+    h2 {
+        font-size: 22px;
+        text-align: center;
+
+    }
+    .content {
         max-width: 800px;
         font-size: larger;
         margin: auto;
@@ -125,3 +133,14 @@ article {
 
     }
 }
+
+.block-img {
+    max-width: 100%;
+    max-height: 350px;
+    display: block;
+    margin: auto;
+}
+
+.mw-40{
+    max-width: 40%;
+}
index 664c91613fd533b70a2d5474373df434431214cc..bf2fa58e4104fc12c3a19c3cf8fdec1727b0f827 100644 (file)
@@ -24,7 +24,7 @@
             <div class="col-sm-6 mb-3">
                 @component('components.simple-preview', ['actu' => $actus->shift()])
                 @endcomponent
-                <x-pill-box class="mb-3" slug="actu-labos-3"></x-pill-box>
+                <x-pill-box class="mt-3" slug="actu-labos-3"></x-pill-box>
             </div>
 
 
index 14790997b4f3a2b98ebbedd51a0eb527b722b920..12f4142e6e3ba3556734f3f2b71b7e4b6a68b707 100644 (file)
@@ -3,14 +3,23 @@
 @section('content')
     <div class="container psq-labos">
         <x-back></x-back>
-        <h1>{{$actu->title}}</h1>
+        <h1>L'actu des labos</h1>
 
-        <article>
-            <img src="{{$actu->image('image')}}" class="top-img" alt="">
-            <p class="chapo">{{$actu->chapo}}</p>
-            <div class="content">
-                {!! $actu->content !!}
+        <article class="row">
+            <div class="col-sm-4">
+                <img src="{{$actu->image('image')}}" class="top-img mb-4" alt="">
+                <x-pill-box slug="article-actu-labos"></x-pill-box>
             </div>
+
+            <div class="col-sm-8">
+                <h2>{{$actu->title}}</h2>
+                <div class="chapo">{{$actu->chapo}}</div>
+                <div class="content">
+                    {!! $actu->content !!}
+                </div>
+
+            </div>
+
         </article>
 
 
index d182db91193d760ad585f7d549bc423d2ec39a64..6c545adb8e80fc3c43ff9dd3caaa4c1242d6fe2c 100644 (file)
         'label' => 'Description',
         'maxlength' => 400
     ])
-    @formField('input', [
-        'name' => 'url',
-        'label' => 'Lien',
-        'maxlength' => 255
-    ])
+
     @formField('medias', [
         'name' => 'image',
         'label' => 'Image',
     ])
 
+    @formField('block_editor', ['blocks' => ['image', 'text', 'youtube']])
 @stop
diff --git a/resources/views/admin/blocks/image.blade.php b/resources/views/admin/blocks/image.blade.php
new file mode 100644 (file)
index 0000000..f5d5336
--- /dev/null
@@ -0,0 +1,8 @@
+
+@formField('medias', [
+    'name' => 'content',  // role
+    'label' => 'Image',
+    'withVideoUrl' => false,
+    'translated' => false,
+])
+
diff --git a/resources/views/admin/blocks/youtube.blade.php b/resources/views/admin/blocks/youtube.blade.php
new file mode 100644 (file)
index 0000000..50b4be0
--- /dev/null
@@ -0,0 +1,6 @@
+@formField('input', [
+    'name' => 'url',
+    'label' => 'URL',
+    'maxlength' => 250,
+    'translated' => false,
+])
index bfd698bfea97714d019840be54781d535cc63bf6..5f9a484f691ee57b5dfab6338b3d3787ab46c747 100644 (file)
@@ -7,7 +7,7 @@
 
     <div class="row">
         <div class="col-md-8 mb-4">
-            <campaign-hit :hit='@json($campaigns->pop())'></campaign-hit>
+            <campaign-hit :hit='@json($campaigns->shift())'></campaign-hit>
         </div>
         <div class="col-md-4 mb-4">
             <x-pill-box slug="campagnes-et-com-1">
             </x-pill-box>
         </div>
         <div class="col-md-8 mb-4">
-            <campaign-hit :hit='@json($campaigns->pop())' :flip="true"></campaign-hit>
+            <campaign-hit :hit='@json($campaigns->shift())' :flip="true"></campaign-hit>
         </div>
     </div>
     <div class="row">
         <div class="col-md-12">
-            <campaign-hit :hit='@json($campaigns->pop())'></campaign-hit>
+            <campaign-hit :hit='@json($campaigns->shift())'></campaign-hit>
         </div>
     </div>
 
diff --git a/resources/views/com-campaigns/show.blade.php b/resources/views/com-campaigns/show.blade.php
new file mode 100644 (file)
index 0000000..0772012
--- /dev/null
@@ -0,0 +1,20 @@
+@extends('layouts.app')
+
+@section('content')
+
+    <article class="container psq-com-campaign">
+        <x-back></x-back>
+
+        <h1>MARKETING & COM : LES CAMPAGNES DE LA SEMAINE</h1>
+
+        <div class="content">
+        <h2>{{$campaign->title}}</h2>
+        <div class="chapo">
+            {!! $campaign->description !!}
+        </div>
+            {!! $campaign->renderBlocks() !!}
+        </div>
+
+    </article>
+
+@endsection
index f51c839d197afae7eef86c8d9ffbc72284818f06..64a9587fbe239c3437391dc315c501ec87e1b934 100644 (file)
@@ -2,17 +2,19 @@
 @if($actu)
     <div class="box p-2">
         <div class="row simple-preview">
+            <div class="col-12">
+                <a href="{{$actu->url}}">
+                    <h2>{{$actu->title}}</h2>
+                </a>
+            </div>
 
             <div class="col-4">
                 <img src="{{$actu->image('image')}}" alt="" class="w-100">
             </div>
             <div class="col-8">
-                <a href="{{$actu->link}}">
-                    <h2>{{$actu->title}}</h2>
-                </a>
                 <p class="chapo ">{{$actu->chapo}}</p>
                 {{ $actu->preview }}
-                <a href="{{$actu->link}}" class="click-here">Lire la suite</a>
+                <a href="{{$actu->url}}" class="click-here">Lire la suite</a>
 
             </div>
         </div>
diff --git a/resources/views/site/blocks/image.blade.php b/resources/views/site/blocks/image.blade.php
new file mode 100644 (file)
index 0000000..2fab201
--- /dev/null
@@ -0,0 +1 @@
+<img src="{{$block->image('content', 'default')}}" alt="" class="block-img">
diff --git a/resources/views/site/blocks/youtube.blade.php b/resources/views/site/blocks/youtube.blade.php
new file mode 100644 (file)
index 0000000..f195428
--- /dev/null
@@ -0,0 +1,11 @@
+@php
+$url = \App\Helpers\StreamingPlatforms::youtubeEmbed($block->input('url'));
+@endphp
+<div class="youtube-block">
+    @if($url === null)
+        <p class="text-danger">URL Invalide !</p>
+    @else
+        <iframe width="560" height="315" src="{{$url}}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+    @endif
+</div>
+
index cc9c3eb356e20babc39958099f20f95e4552b6ef..01b1b0319e69e47229932795ab673209fff19a4d 100644 (file)
@@ -53,8 +53,11 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
 
     Route::get('search', 'FileController@search')->name('archives');
 
-    Route::get('campagnes-et-communication', 'AdCampaignController@index');
-    Route::get('campagnes-et-communication/archives', 'AdCampaignController@search');
+    Route::prefix('campagnes-et-communication')->group(function() {
+        Route::get('/', 'AdCampaignController@index')->name('com-campaign.index');
+        Route::get('archives', 'AdCampaignController@search')->name('com-campaign.search');
+        Route::get('{slug}', 'AdCampaignController@show')->name('com-campaign.show');
+    });
 
     Route::get('podcasts', 'PodcastController@index');