namespace App\Http\Controllers;
use App\Models\LaboArticle;
+use App\Repositories\LaboArticleRepository;
use Illuminate\Http\Request;
class ActuLabosController extends Controller
{
public function index()
{
- \View::share('actus', LaboArticle::query()->orderBy('position')->published()->take(4)->get());
+ \View::share('actus', LaboArticle::query()->orderBy('position')->published()->visible()->take(4)->get());
return view('actu-labos.index');
}
+
+
+ public function show($slug, LaboArticleRepository $repository)
+ {
+
+ $actu = $repository->forSlug($slug);
+
+
+ \View::share('actu', $actu);
+ return view('actu-labos.show');
+ }
}
+
+
class PillBoxSpaceController extends ModuleController
{
protected $moduleName = 'pillBoxSpaces';
+
+ protected $indexOptions = [
+ 'publish' => false,
+ 'bulkPublish' => false,
+ ];
+
+ protected $indexColumns = [
+ 'title' => [
+ 'title' => 'Emplacement',
+ 'field' => 'title',
+ 'sort' => true,
+ ],
+ 'box_title' => [
+ 'title' => "Titre de l'encadré",
+ 'field' => 'box_title',
+
+ ]
+
+ ];
}
use A17\Twill\Models\Behaviors\Sortable;
use A17\Twill\Models\Model;
+/**
+ * Class LaboArticle
+ * @package App\Models
+ * @property string $content
+ * @property string $link
+ * @property string $preview
+ */
class LaboArticle extends Model implements Sortable
{
use HasSlug, HasMedias, HasPosition;
'publish_end_date',
'title',
'chapo',
- 'preview',
'content',
'published',
'position',
],
],
];
+
+
+ public function getPreviewAttribute(): string
+ {
+ $line = strip_tags($this->content);
+
+ if (preg_match('/^.{1,200}\b/s', $line, $match)) {
+ $line = trim($match[0]) . "…";
+ }
+
+ return $line;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLinkAttribute(): string
+ {
+ return route('actus-labos.show', ['slug' => $this->slug]);
+ }
}
use HasSlug;
protected $fillable = [
- 'published',
+// 'published',
'title',
'box_content',
'box_title',
'title',
];
+
}
{
$this->model = $model;
}
+
+ public function afterSave($object, $fields)
+ {
+ parent::afterSave($object, $fields);
+ $object->published = true;
+ $object->save();
+ }
}
--- /dev/null
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class RemovePreviewFromLaboArticles extends Migration
+{
+ /**
+ * Run the migrations.
+ *
+ * @return void
+ */
+ public function up()
+ {
+ Schema::table('labo_articles', function (Blueprint $table) {
+ $table->dropColumn('preview');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('labo_articles', function (Blueprint $table) {
+ $table->text('preview')->nullable();
+ });
+ }
+}
color: #074e9c;
}
-.highlight-blue {
+.highlight-blue,
+.btn-back {
color: white;
background-color: #074e9c;
}
border: 1px solid #d04d4a;
}
+.psq-actu .box,
+.psq-actu div.pill-box div,
+div.pill-box .psq-actu div {
+ border-radius: 5px;
+}
+
.psq-com-campaign h1 {
color: white;
background-color: #AD5ED3;
border: 1px solid #AD5ED3;
}
+.psq-com-campaign .box,
+.psq-com-campaign div.pill-box div,
+div.pill-box .psq-com-campaign div {
+ border-radius: 5px;
+}
+
.psq-plus h1 {
color: white;
background-color: #41BD53;
border: 1px solid #41BD53;
}
+.psq-plus .box,
+.psq-plus div.pill-box div,
+div.pill-box .psq-plus div {
+ border-radius: 5px;
+}
+
.psq-mag h1 {
color: white;
background-color: #ce317c;
border: 1px solid #ce317c;
}
+.psq-mag .box,
+.psq-mag div.pill-box div,
+div.pill-box .psq-mag div {
+ border-radius: 5px;
+}
+
.psq-podcasts h1 {
color: white;
background-color: #288ed7;
border: 1px solid #288ed7;
}
+.psq-podcasts .box,
+.psq-podcasts div.pill-box div,
+div.pill-box .psq-podcasts div {
+ border-radius: 5px;
+}
+
.psq-labos h1 {
color: white;
background-color: #546983;
border: 1px solid #546983;
}
+.psq-labos .box,
+.psq-labos div.pill-box div,
+div.pill-box .psq-labos div {
+ border-radius: 5px;
+}
+
.psq-not-registered h1 {
color: white;
background-color: #e79817;
border: 1px solid #e79817;
}
+.psq-not-registered .box,
+.psq-not-registered div.pill-box div,
+div.pill-box .psq-not-registered div {
+ border-radius: 5px;
+}
+
.psq-login-logout h1 {
color: white;
background-color: #0c2c50;
border: 1px solid #0c2c50;
}
+.psq-login-logout .box,
+.psq-login-logout div.pill-box div,
+div.pill-box .psq-login-logout div {
+ border-radius: 5px;
+}
+
nav {
margin-bottom: 0.5rem;
display: flex;
font-size: small;
}
+.chapo {
+ font-style: italic;
+ font-size: large;
+}
+
+.simple-preview .chapo {
+ font-size: small;
+}
+
+.btn-back {
+ text-transform: uppercase;
+ font-weight: bold;
+ margin-bottom: 1rem;
+ color: white !important;
+}
+
+article > .content {
+ max-width: 800px;
+ font-size: larger;
+ margin: auto;
+ text-align: justify;
+}
+
+article img.top-img {
+ display: block;
+ margin: auto;
+ max-width: 100%;
+ max-height: 350px;
+}
+
.error-403 p {
font-size: x-large;
}
.pill-box > div {
border: 1px solid $color;
}
+
+ .box {
+ //border: 1px solid $color;
+ border-radius: 5px;
+ }
}
}
}
+.chapo {
+ font-style: italic;
+ font-size: large;
+}
+
+.simple-preview{
+ .chapo {
+ font-size: small;
+ }
+}
+
+
+.btn-back {
+ @extend .highlight-blue;
+ text-transform: uppercase;
+ font-weight: bold;
+ margin-bottom: 1rem;
+ color: white !important;
+
+}
+
+article {
+ > .content {
+ max-width: 800px;
+ font-size: larger;
+ margin: auto;
+ text-align: justify;
+ }
+
+ img.top-img {
+ display: block;
+ margin: auto;
+ max-width: 100%;
+ max-height: 350px;
+ }
+}
.error-403 {
p {
font-size: x-large;
@extends('layouts.app')
-
+@php
+@endphp
@section('content')
+ <div class="container psq-labos">
+ <h1>L'actu des labos</h1>
+ <h2 class="text-center">Une séléction de nos articles publiés cette semaine</h2>
+
+
+ <div class="mt-5 row">
+ <div class="col-sm-6 mb-3">
+ @component('components.simple-preview', ['actu' => $actus->shift()])
+ @endcomponent
+ </div>
+ <div class="col-sm-6 mb-3">
+ @component('components.simple-preview', ['actu' => $actus->shift()])
+ @endcomponent
+ </div>
+ <div class="col-sm-6 mb-3">
+ <x-pill-box class="mb-3" slug="actu-labos-1"></x-pill-box>
+ @component('components.simple-preview', ['actu' => $actus->shift()])
+ @endcomponent
+ </div>
+ <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>
+ </div>
+
+
+
+ </div>
-@foreach($actus as $actu)
- {{$actu->title}}
-@endforeach
+ </div>
@endsection
+@extends('layouts.app')
+
+@section('content')
+ <div class="container psq-labos">
+ <x-back></x-back>
+ <h1>{{$actu->title}}</h1>
+
+ <article>
+ <img src="{{$actu->image('image')}}" class="top-img" alt="">
+ <p class="chapo">{{$actu->chapo}}</p>
+ <div class="content">
+ {!! $actu->content !!}
+ </div>
+ </article>
+
+
+
+ </div>
+@endsection
@formField('input', [
'name' => 'chapo',
'label' => 'Chapô',
- 'maxlength' => 200,
- 'required' => true,
-
- ])
- @formField('input', [
- 'name' => 'preview',
- 'label' => 'Extrait',
'maxlength' => 250,
- 'type' => 'textarea',
'required' => true,
])
+
@formField('wysiwyg', [
'label' => 'Article complet',
'name' => 'content',
--- /dev/null
+<a href="{{url()->previous()}}" class="btn btn-back">❮ Retour</a>
--- /dev/null
+
+@if($actu)
+ <div class="box p-2">
+ <div class="row simple-preview">
+
+ <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>
+
+ </div>
+ </div>
+ </div>
+@endif
{{-- Description + weekly sponsor --}}
<div class="col-sm-5 mb-3 px-2">
- <div class="bg-white p-3">
+ <div class="box p-3">
<div class="text-justify mb-2">
{!! $podcast->description !!}
<hr>
<h2 class="text-center">Nos rubriques du mois</h2>
</div>
- <div class="col-sm-5 px-4">
+ <div class="col-sm-6 px-4">
<div class="row box mb-3 py-3">
<div class="col-12">
<h3>Le coup de cœur</h3>
</div>
</div>
+ </div>
+ <div class="col-sm-6 px-4">
<div class="row box mb-4 py-3">
<div class="col-12">
<h3>Le coup de com</h3>
</div>
</div>
</div>
- <div class="col-sm-2 mb-3">
- <x-pill-box title="Lorem ipsum" color="cyan">
- Haec dum oriens diu perferret, caeli reserato tepore Constantius consulatu suo septies et Caesaris ter egressus Arelate Valentiam petit, in
- </x-pill-box>
- </div>
- <div class="col-sm-5">
+
+
+ <div class="col-sm-6 px-4">
<div class="row box py-3">
<div class="col-12">
<h3>Le journal de la com santé</h3>
</div>
</div>
</div>
+ <div class="col-sm-6 mb-3">
+ <x-pill-box title="Lorem ipsum" color="cyan">
+ Haec dum oriens diu perferret, caeli reserato tepore Constantius consulatu suo septies et Caesaris ter egressus Arelate Valentiam petit, in
+ </x-pill-box>
+
+ </div>
+ </div>
</div>
Route::get('pas-encore-inscrit', 'Auth\NotRegisteredYet@index')->name('not-registered');
- Route::get('actus-labos', 'ActuLabosController@index');
+ Route::prefix('actus-labos')->group(function() {
+ Route::get('', 'ActuLabosController@index')->name('actus-labos.index');
+ Route::get('{slug}', 'ActuLabosController@show')->name('actus-labos.show');
+ });
/** Metadata */
Route::prefix('/files/{file:slug}')->group(function () {