Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Возможно ли из шаблона BLADE получить мета? (title, keywords) ?
Например структура такая:
index состоит из:
инклюдим хедер
создаем контент
инклюдим сайдбар
инклюдим футер
Так вот, получается сайдбар появляется на любой странице. Как в нем можно получить мета заголовки не используя js?
Роутер ссылается на шаблон. В момент подключения контента определенной страницы я делаю так:
Роутер ссылается например на index, в нем содержание такое:
@section(’title’, ’тут тайтл’)
@section(’description’, ’тут описание’)
@include(’layouts.header’)
@include(’layouts.sidebar’)
@include(’layouts.footer’)
Не в сети
Наверно лучшим решением будет тогда так:
Вы также можете передать массив данных во включаемый шаблон:
@include(’view.name’, [’some’ ⇒ ’data’])
Получается что то типа этого:
<?php $title = Тут тайтл’; ?>
@section(’title’, title)
@include(’view.name’, [’title’ ⇒ ’title’])
И в секции name мы можем получить наши переменные.
Это ли не чудо?
В Битриксе делается так, что довольно удобно. В каждой директории лежит файл .sections.php
В нем прописываются мета данные.
По сути такая логика может быть реализована с помощью view()->share()
То есть до вывода нужной вьюхи, берем данные из нужной .sections.php
И посылаем через view()->share()
Второй вариант более удобный в плане обслуживания сео.
Но не писать мета в контроллере это точно! Как мне посоветовали… Потом можно будет сойти с ума в плане обслуживания СЕО
Кто за и против? Есть другие предложения?
Кто скажет для чего это?
Вот пример:
Нужно создать в сайдбаре кнопки социалок, без их js
Что бы сформировать ссылку для расшаривания страницы нужно url тайтл и описание как минимум.
Не в сети
Я так делал:
Например, на страницу новости нужно тоже было добавлять title, keywords.
В контроллере так: return view('template.news', ['item' => $news, ...]);
Этот шаблон примерно такой:
@extends('template._layout.base')
@section('content')
{{ $item->title }}
@endsection
А в template._layout.base я также там где нужно делаю вывод:
{{ $item->seoTitle }}
И все работает)
Не в сети
Не в сети
А где у вас $news определялась? Можно подробней про такой вариант?
В контроллере строкой выше), например так:
$news = $news->getNewsByUrl($url);
Не в сети
Я немного по другому поступаю, изначально в контролере который буду наследовать всё объявляю, типа того
class BaseController extends Controller
{
public $title = [];
public $description = null;
public $breadcrumb = [];
public $isAjax = false;
// ........
function __construct()
{
array_push($this->title, Config::get('app.site_name'));
View::share('title', implode(' :: ', $this->title));
View::share('description', $this->description);
View::share('breadcrumb', $this->breadcrumb);
View::share('isAjax', $this->isAjax);
// .......
}
}
class CatalogsController extends BaseController
{
public function level_one($id)
{
$catalog = Catalog::first($id);
array_push($this->title, $catalog->title);
$this->description, $catalog->description);
// ....
}
}
удобно, что можно несколько уровней добавлять, к примеру каталог с вложениями, плюс доступны в любом шаблоне
If you think it’s expensive to hire a professional to do the job, wait until you hire an amateur.
Не в сети
Не в сети
Вы неправильно понимаете, что такое layout. Все эти три шаблона — это partials.
Layout — это шаблон-разметка, обычно главный шаблон, который включает внутри себя весь скелет (набор секций).
Простите, а как в моем случаи тогда сделать?
Получается так? Например основной макет (Заготовку например index я делаю так)
Например:
<html>
<head>
@section(’title’, ’default’)
@section(’description’, ’default’)
</head>
<body>
@section(’content’)
Контент по умолчанию
@endsection
Не в сети
И потом уже @extends('layouts.index') работать?
Да-да!
Потом чтобы слегка поменять дизайн сайта - достаточно будет только layout отредактировать, поэтому он и называется layout - разметка.
А теги удобно устанавливать каким-нибудь модулем типа https://github.com/eusonlito/laravel-Meta
Не в сети