namespace App\Http\Controllers;
+use Illuminate\Http\Request;
use App\Models\Application;
use App\Models\Product;
use Cubist\Backpack\app\Http\Controllers\CubistFrontController;
class ApplicationController extends CubistFrontController
{
- public function view($id)
+ public function view(Request $request, $id)
{
$application = Application::find($id);
namespace App\Http\Controllers;
+use Illuminate\Http\Request;
use App\Models\News;
use Cubist\Backpack\app\Http\Controllers\CubistFrontController;
use Cubist\Backpack\app\Magic\PageData;
class NewsController extends CubistFrontController
{
- public function view($id)
+ public function view(Request $request, $id)
{
$newsItem = News::find($id);
use App\Models\Product;
use App\Models\ProductType;
use Cubist\Backpack\app\Http\Controllers\CubistFrontController;
+use Illuminate\Http\Request;
class ProductController extends CubistFrontController
{
- public function productList($id)
+ public function productList(Request $request, $id)
{
$productType = ProductType::find($id);
if (!$productType) {
return view('pages.products', $this->data);
}
- public function productDetails($id)
+ public function productDetails(Request $request, $id)
{
$product = Product::find($id);
namespace App\Templates;
+use Cubist\Backpack\app\Magic\Search as SearchEngine;
class Search extends Base
{
{
return 'Moteur de recherche';
}
+
+ public function init()
+ {
+ parent::init();
+
+ $this->removeField('intro');
+
+ $this->addField(['name' => 'page_heading',
+ 'type' => 'Text',
+ 'label' => 'Titre de la page',
+ 'tab' => 'Contenus']);
+
+ // Enable form
+ $this->addForm();
+ }
+
+ public function setData(&$data) {
+
+ $request = $data['request'];
+
+ $data['results'] = SearchEngine::query($request->q, $request->type ?? null, $request->limit ?? null);
+
+ }
+
+
}
<slide-toggle :active="visible" :duration="300" @open-end="focusField">
<div class="header-search-box container py-3">
- <form action="/search/" method="get" class="flex justify-between items-center">
+ <form :action="endpoint" method="get" class="flex justify-between items-center">
<input class="pl-2 -ml-2 py-2 font-display text-2xl flex-grow appearance-none focus:outline-none focus:bg-grey-100"
type="text"
- name="query"
+ name="q"
autocomplete="off"
tabindex="-1"
ref="searchInput"
placeholder: {
type: String,
default: 'Search...'
+ },
+ endpoint: {
+ type: String,
+ required: true
}
},
--- /dev/null
+$breakpoint-search-results = 980px
+
+.search-results
+ &-layout
+ display: grid
+ constrain(grid-gap, 2.5vw)
+ grid-template: "results sidebar" auto / 3fr 1fr
+ grid-template-rows: max-content
+ grid-template-columns: auto
+
+ +below($breakpoint-search-results)
+ grid-template-areas: "results" "sidebar"
+
+ &-main
+ grid-area: results
+
+ &-sidebar
+ grid-area: sidebar
+ max-width: 348px
+
+ +below($breakpoint-search-results)
+ max-width: none
+
+ +above($breakpoint-search-results)
+ .form-footer
+ flex-wrap: wrap
+ flex-direction: column-reverse
+
+ .form-submit-button
+ @apply w-full mb-4
@if ($src)
@php
- $url=$src;
- if(!file_exists($src)){
- $src=public_path().$src;
+ $url = $src;
+ if (!file_exists($src)) {
+ $src = public_path() . $src;
}
+
+ // It's possible that image might still not exist here so bail out
+ if (!file_exists($src)) {
+ return false;
+ }
+
$meta = getimagesize($src);
$ratio = $meta[1] / $meta[0] * 100 .'%'; // Height / Width
@endphp
--- /dev/null
+@extends('layouts/app')
+
+@section('content')
+
+ <content class="pb-3v">
+ <text-block :title="$page->page_heading" />
+
+ <div class="search-results-layout">
+
+ <div class="search-results-main">
+
+ <div class="bg-grey-100 p-1v">
+ <form action="{{ $nav->getHrefByName('recherche') }}" method="get" class="flex justify-between items-center sm:block">
+ <input class="pl-2 -ml-2 py-2 font-display text-2xl flex-grow appearance-none sm:w-full xs:text-base"
+ type="text"
+ name="q"
+ autocomplete="off"
+ placeholder="{{ __('Saisissez votre recherche') }}">
+ <button class="btn flex items-center py-3 px-8 font-display text-lg rounded ml-4 sm:mt-4 sm:mx-auto">
+ @svg('search', 'fill-current mr-2')
+ {{ __('Rechercher') }}
+ </button>
+ </form>
+ </div>
+
+ <div class="search-results mt-6">
+ <div class="text-navy mb-2">{{ count($results) }}
+ @if(count($results) == 1)
+ {{ __('résultat') }}
+ @else
+ {{ __('résultats') }}
+ @endif
+ </div>
+
+ @foreach ($results as $result)
+ <div class="search-result py-5 @if(!$loop->last) border-b-2 border-grey-100 @endif">
+
+ <div class="breadcrumbs">
+ @foreach ($result['breadcrumbs'] as $breadcrumb)
+ <div @if(!$loop->last) class="breadcrumbs-item" @endif>
+ <a class="breadcrumbs-link" @if ($breadcrumb->url)href="{{ $breadcrumb->url }}" @endif>
+ {{ $breadcrumb->title }}
+ </a>
+ </div>
+ @endforeach
+ </div>
+
+ <a class="text-2xl font-display mt-1 inline-block animated-underline" href="{{ $result['url'] }}">{{ $result['title'] }}</a>
+ </div>
+ @endforeach
+ </div>
+
+ </div>
+
+ <div class="search-results-sidebar">
+ <div class="bg-grey-100 p-1v">
+ @form
+ </div>
+ </div>
+
+ </div>
+
+
+ </content>
+
+@endsection
<div class="form-endmessage my-6 text-grey-dark text-sm">
@markdown($global->get('form_privacy'))
</div>
- <div class="flex justify-between items-center xs:flex-col-reverse">
- <span class="text-grey-dark xs:self-start xs:mt-5">*{{__('Champs obligatoires')}}</span>
- <button type="submit" class="btn btn-custom xs:w-full"
+ <div class="form-footer flex justify-between items-center xs:flex-col-reverse">
+ <span class="form-required-legend text-grey-dark xs:self-start xs:mt-5">*{{__('Champs obligatoires')}}</span>
+ <button type="submit" class="form-submit-button btn btn-custom xs:w-full"
data-sending="{{__('Envoi en cours')}}">{{ $page->get('form_button_text', __('Envoyer')) }}</button>
</div>
</form>
</header>
@if(config('features.search'))
- <search placeholder="{{ __('Rechercher ...') }}">
+ <search placeholder="{{ __('Rechercher ...') }}" endpoint="{{ $nav->getHrefByName('recherche') }}">
<template v-slot:link>
@svg('search')
</template>