]> _ Git - pmi.git/commitdiff
News pages. WIP #2751 @7
authorStephen Cameron <stephen@cubedesigners.com>
Thu, 25 Jul 2019 19:14:44 +0000 (21:14 +0200)
committerStephen Cameron <stephen@cubedesigners.com>
Thu, 25 Jul 2019 19:14:44 +0000 (21:14 +0200)
app/Http/Controllers/NewsController.php [new file with mode: 0644]
app/Models/News.php
app/Templates/Catalog.php
app/Templates/News.php
resources/styles/components/news.styl [new file with mode: 0644]
resources/views/pages/home.blade.php
resources/views/pages/news-detail.blade.php [new file with mode: 0644]

diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php
new file mode 100644 (file)
index 0000000..e7c73e3
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\News;
+use Cubist\Backpack\app\Http\Controllers\CubistFrontController;
+
+class NewsController extends CubistFrontController
+{
+    public function view($id)
+    {
+        $newsItem = News::find($id);
+
+        if (!$newsItem) {
+            $this->_404();
+        }
+
+        $this->data['title'] = $newsItem->title;
+        $this->data['news'] = $newsItem->getPageData();
+        $this->data['image'] = $this->data['news']->getImageURL('image', 'thumb');
+
+        return view('pages.news-detail', $this->data);
+    }
+}
index ceabc086478e4a284d553656f51e74ca6700a8ee..c52af1fedf80f656827e632711e1890d122b7de1 100644 (file)
@@ -7,6 +7,9 @@ use Spatie\MediaLibrary\Models\Media;
 class News extends \Cubist\Backpack\app\Magic\Models\News
 {
     public function registerMediaConversions(Media $media = null) {
+
+        parent::registerMediaConversions($media);
+
         $this->addMediaConversion('thumb')
              ->crop('crop-center', 348, 232);
     }
index bfe47763aa78df4615d174fe44646e50770359a5..c37ea76c81ff8bb93279abf611b1ce13ab595d74 100644 (file)
@@ -8,6 +8,7 @@ use App\Models\ProductType;
 use Cubist\Backpack\app\Magic\Menu\Item;
 use Cubist\Backpack\app\Magic\Menu\VirtualItem;
 use Cubist\Backpack\app\Template\TemplateAbstract;
+use Barryvdh\Debugbar\Facade as Debugbar;
 
 class Catalog extends TemplateAbstract
 {
@@ -20,19 +21,19 @@ class Catalog extends TemplateAbstract
 
     public function setMenuChildren($menu)
     {
-        \Barryvdh\Debugbar\Facade::startMeasure('nav_catalog', 'Make Products sub navigation');
+        Debugbar::startMeasure('nav_catalog', 'Make Products sub navigation');
         parent::setMenuChildren($menu);
 
         $families = ['captor' => __('Capteurs'), 'system' => __('Systèmes de mesure')];
 
-        \Barryvdh\Debugbar\Facade::startMeasure('nav_catalog_models', 'Request catalog models');
-        \Barryvdh\Debugbar\Facade::startMeasure('nav_catalog_models_types', 'Request catalog models (types)');
+        Debugbar::startMeasure('nav_catalog_models', 'Request catalog models');
+        Debugbar::startMeasure('nav_catalog_models_types', 'Request catalog models (types)');
         $productTypes = ProductType::all();
-        \Barryvdh\Debugbar\Facade::stopMeasure('nav_catalog_models_types');
-        \Barryvdh\Debugbar\Facade::startMeasure('nav_catalog_models_products', 'Request catalog models (products)');
+        Debugbar::stopMeasure('nav_catalog_models_types');
+        Debugbar::startMeasure('nav_catalog_models_products', 'Request catalog models (products)');
         $products = Product::all();
-        \Barryvdh\Debugbar\Facade::stopMeasure('nav_catalog_models_products');
-        \Barryvdh\Debugbar\Facade::stopMeasure('nav_catalog_models');
+        Debugbar::stopMeasure('nav_catalog_models_products');
+        Debugbar::stopMeasure('nav_catalog_models');
 
         $menu->setType('mega');
 
@@ -74,7 +75,7 @@ class Catalog extends TemplateAbstract
                 }
             }
         }
-        \Barryvdh\Debugbar\Facade::stopMeasure('nav_catalog');
+        Debugbar::stopMeasure('nav_catalog');
     }
 
 }
index 79e321a88d2bd3bdb39b3012c916295a27fa1641..3a7a88a75c5aaa2631f3256064637a62547066d7 100644 (file)
@@ -1,13 +1,41 @@
 <?php
 
-
 namespace App\Templates;
 
+use App\Models\News as NewsModel;
+use Cubist\Backpack\app\Magic\Menu\Item;
+use Barryvdh\Debugbar\Facade as Debugbar;
 
 class News extends Base
 {
-public function getName()
-{
-    return 'Actualités';
-}
+    public function getName()
+    {
+        return 'Actualités';
+    }
+
+    public function setMenuChildren($menu)
+    {
+        Debugbar::startMeasure('nav_news', 'Make news nav items');
+        parent::setMenuChildren($menu);
+
+        $news = NewsModel::all();
+
+        foreach ($news as $newsItem) {
+
+            // Don't include offline items
+            if ($newsItem->status != 1) {
+                continue;
+            }
+
+            $item = new Item();
+            $item->setTitle($newsItem->title);
+            $item->setHref($newsItem->slug); // Todo: consider having a configurable / translatable prefix for news URLs
+            $item->setId('news/' . $newsItem->id);
+            $item->setController(['controller' => 'NewsController', 'action' => 'view', 'params' => ['id' => $newsItem->id]]);
+            $menu->addChild($item);
+        }
+
+        Debugbar::stopMeasure('nav_news');
+    }
+
 }
diff --git a/resources/styles/components/news.styl b/resources/styles/components/news.styl
new file mode 100644 (file)
index 0000000..c7b341f
--- /dev/null
@@ -0,0 +1,24 @@
+.news
+  // 3 column layout with image / text / sidebar
+  &-layout
+    display: grid
+    constrain(grid-gap, 2.5vw)
+    grid-template: "image body sidebar" auto / 1fr 2fr 1fr
+
+    +below(1200px)
+      grid-template: "image sidebar" "body sidebar"
+      grid-column-gap: 5vw
+
+    +below(700px)
+      grid-template: "image" "body" "sidebar"
+      grid-row-gap: 5vw
+
+  &-image
+    grid-area: image
+
+  &-body
+    grid-area: body
+
+  &-sidebar
+    grid-area: sidebar
+    min-width: 260px
index bbcd549213c40685e31270d5284325112681c3fa..90e10a08903d414a997760bc9fe95bb1207705ea 100644 (file)
 
                 <grid cols="4" class="md:grid-cols-2 xs:grid-cols-1 xs:grid-gap-20v">
                     @foreach ($news as $newsItem)
+                        @php
+                            $newsURL = $nav->getHrefByID("news/{$newsItem->id}");
+                        @endphp
 
                         <div>
-                            {{--Todo: handle missing images + get correct image size--}}
-                            <img class="mb-4" src="{{ $newsItem->getFirstMediaUrl($newsItem->image, 'thumb') }}"
-                                 alt="{{ $newsItem->title }}">
+                            <a href="{{ $newsURL }}">
+                                {{--Todo: handle missing images + get correct image size--}}
+                                <img class="mb-4" src="{{ $newsItem->getFirstMediaUrl($newsItem->image, 'thumb') }}" alt="{{ $newsItem->title }}">
+                            </a>
                             <h4 class="font-display">{{ $newsItem->title }}</h4>
                             <p>{{ $newsItem['chapo'] }}</p>
 
-                            {{--Todo: set up news URLs in nav--}}
-                            <p><a href="#">Lire la suite</a></p>
+                            <p><a href="{{ $newsURL }}">Lire la suite</a></p>
                         </div>
                     @endforeach
                 </grid>
diff --git a/resources/views/pages/news-detail.blade.php b/resources/views/pages/news-detail.blade.php
new file mode 100644 (file)
index 0000000..af4af25
--- /dev/null
@@ -0,0 +1,28 @@
+@extends('layouts/app')
+
+@section('content')
+
+    <full-width padding="pb-2v">
+        <content>
+            <text-block :title="$news->title" title-tag="h1" />
+
+            <div class="news-layout">
+                @if ($image)
+                    {{-- Todo: use larger image + srcset here --}}
+                    <img src="{{ $image }}" alt="{{ $title }}" class="news-image">
+                @endif
+
+                <div class="news-body">
+                    <p>{{ date('d/m/y', strtotime($news->date['date'])) }}</p>
+                    @markdown($news->content)
+                </div>
+
+                <div class="news-sidebar bg-grey-100 p-1v">
+                    (Newsletter Form)
+                </div>
+
+            </div>
+        </content>
+    </full-width>
+
+@endsection