Commit 3159cae9 authored by Christian Giupponi's avatar Christian Giupponi

Add canonical url and alternate links for each language available

parent 785f1b29
...@@ -19,17 +19,16 @@ class PublicController extends BasePublicController ...@@ -19,17 +19,16 @@ class PublicController extends BasePublicController
*/ */
private $app; private $app;
private $disabledPage = false;
public function __construct(PageRepository $page, Application $app) public function __construct(PageRepository $page, Application $app)
{ {
parent::__construct(); parent::__construct();
$this->page = $page; $this->page = $page;
$this->app = $app; $this->app = $app;
} }
/** /**
* @param $slug * @param $slug
*
* @return \Illuminate\View\View * @return \Illuminate\View\View
*/ */
public function uri($slug) public function uri($slug)
...@@ -46,7 +45,9 @@ class PublicController extends BasePublicController ...@@ -46,7 +45,9 @@ class PublicController extends BasePublicController
$template = $this->getTemplateForPage($page); $template = $this->getTemplateForPage($page);
return view($template, compact('page')); $alternate = $this->getAlternateMetaData($page);
return view($template, compact('page', 'alternate'));
} }
/** /**
...@@ -60,13 +61,17 @@ class PublicController extends BasePublicController ...@@ -60,13 +61,17 @@ class PublicController extends BasePublicController
$template = $this->getTemplateForPage($page); $template = $this->getTemplateForPage($page);
return view($template, compact('page')); $alternate = $this->getAlternateMetaData($page);
return view($template, compact('page', 'alternate'));
} }
/** /**
* Find a page for the given slug. * Find a page for the given slug.
* The slug can be a 'composed' slug via the Menu * The slug can be a 'composed' slug via the Menu
*
* @param string $slug * @param string $slug
*
* @return Page * @return Page
*/ */
private function findPageForSlug($slug) private function findPageForSlug($slug)
...@@ -83,7 +88,9 @@ class PublicController extends BasePublicController ...@@ -83,7 +88,9 @@ class PublicController extends BasePublicController
/** /**
* Return the template for the given page * Return the template for the given page
* or the default template if none found * or the default template if none found
*
* @param $page * @param $page
*
* @return string * @return string
*/ */
private function getTemplateForPage($page) private function getTemplateForPage($page)
...@@ -92,13 +99,33 @@ class PublicController extends BasePublicController ...@@ -92,13 +99,33 @@ class PublicController extends BasePublicController
} }
/** /**
* Throw a 404 error page if the given page is not found or draft * Throw a 404 error page if the given page is not found
*
* @param $page * @param $page
*/ */
private function throw404IfNotFound($page) private function throw404IfNotFound($page)
{ {
if (null === $page || $page->status === $this->disabledPage) { if (is_null($page)) {
$this->app->abort('404'); $this->app->abort('404');
} }
} }
/**
* Create a key=>value array for alternate links
*
* @param $page
*
* @return array
*/
private function getAlternateMetaData($page)
{
$translations = $page->getTranslationsArray();
$alternate = [];
foreach ($translations as $locale => $data) {
$alternate[$locale] = $data['slug'];
}
return $alternate;
}
} }
...@@ -3,12 +3,14 @@ ...@@ -3,12 +3,14 @@
<head lang="{{ LaravelLocalization::setLocale() }}"> <head lang="{{ LaravelLocalization::setLocale() }}">
<meta charset="UTF-8"> <meta charset="UTF-8">
@section('meta') @section('meta')
<meta name="description" content="@setting('core::site-description')" /> <meta name="description" content="@setting('core::site-description')"/>
@show @show
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title> <title>@section('title')@setting('core::site-name')@show</title>
@section('title')@setting('core::site-name')@show @foreach($alternate as $alternateLocale=>$alternateSlug)
</title> <link rel="alternate" hreflang="{{$alternateLocale}}" href="{{url($alternateLocale.'/'.$alternateSlug)}}">
@endforeach
<link rel="canonical" href="{{url()->current()}}" />
<link rel="shortcut icon" href="{{ Theme::url('favicon.ico') }}"> <link rel="shortcut icon" href="{{ Theme::url('favicon.ico') }}">
{!! Theme::style('css/main.css') !!} {!! Theme::style('css/main.css') !!}
...@@ -30,7 +32,7 @@ ...@@ -30,7 +32,7 @@
@yield('scripts') @yield('scripts')
<?php if (Setting::has('core::analytics-script')): ?> <?php if (Setting::has('core::analytics-script')): ?>
{!! Setting::get('core::analytics-script') !!} {!! Setting::get('core::analytics-script') !!}
<?php endif; ?> <?php endif; ?>
@stack('js-stack') @stack('js-stack')
</body> </body>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment