--- /dev/null
+<?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);
+ }
+}
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);
}
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
{
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');
}
}
}
- \Barryvdh\Debugbar\Facade::stopMeasure('nav_catalog');
+ Debugbar::stopMeasure('nav_catalog');
}
}
<?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');
+ }
+
}
--- /dev/null
+.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
<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>
--- /dev/null
+@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