From 6117c1231a8172e20950220991eafa3a6714a208 Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov <38059171+askvortsov1@users.noreply.github.com> Date: Fri, 6 Mar 2020 11:52:30 -0500 Subject: [PATCH] Add title and description meta tags (#72) --- extensions/tags/js/src/forum/addTagFilter.js | 8 +++++++- .../tags/js/src/forum/components/TagsPage.js | 7 +++++++ extensions/tags/src/Content/Tag.php | 17 +++++++++++++++- extensions/tags/src/Content/Tags.php | 20 +++++++++++++++++-- 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/extensions/tags/js/src/forum/addTagFilter.js b/extensions/tags/js/src/forum/addTagFilter.js index 39316186c..95ed7c78d 100644 --- a/extensions/tags/js/src/forum/addTagFilter.js +++ b/extensions/tags/js/src/forum/addTagFilter.js @@ -23,8 +23,14 @@ export default function() { extend(IndexPage.prototype, 'view', function(vdom) { const tag = this.currentTag(); + if (tag) vdom.attrs.className += ' IndexPage--tag'+tag.id(); + }); + + extend(IndexPage.prototype, 'config', function() { + const tag = this.currentTag(); + if (tag) { - vdom.attrs.className += ' IndexPage--tag'+tag.id(); + app.setTitle(tag.name()); } }); diff --git a/extensions/tags/js/src/forum/components/TagsPage.js b/extensions/tags/js/src/forum/components/TagsPage.js index 952e089ab..8ff703f06 100644 --- a/extensions/tags/js/src/forum/components/TagsPage.js +++ b/extensions/tags/js/src/forum/components/TagsPage.js @@ -84,4 +84,11 @@ export default class TagsPage extends Page { ); } + + config(...args) { + super.config(...args); + + app.setTitle(app.translator.trans('flarum-tags.forum.meta.tags_title')); + app.setTitleCount(0); + } } diff --git a/extensions/tags/src/Content/Tag.php b/extensions/tags/src/Content/Tag.php index a6633198f..183fd2e7b 100644 --- a/extensions/tags/src/Content/Tag.php +++ b/extensions/tags/src/Content/Tag.php @@ -14,6 +14,7 @@ use Flarum\Api\Controller\ListDiscussionsController; use Flarum\Frontend\Document; use Flarum\Tags\TagRepository; use Flarum\User\User; +use Illuminate\Contracts\Translation\Translator; use Illuminate\Contracts\View\Factory; use Illuminate\Support\Arr; use Psr\Http\Message\ServerRequestInterface as Request; @@ -35,15 +36,23 @@ class Tag */ protected $tags; + /** + * @var Translator + */ + protected $translator; + /** * @param Client $api * @param Factory $view + * @param TagRepository $tags + * @param Translator $translator */ - public function __construct(Client $api, Factory $view, TagRepository $tags) + public function __construct(Client $api, Factory $view, TagRepository $tags, Translator $translator) { $this->api = $api; $this->view = $view; $this->tags = $tags; + $this->translator = $translator; } public function __invoke(Document $document, Request $request) @@ -71,6 +80,12 @@ class Tag $apiDocument = $this->getApiDocument($actor, $params); + $document->title = $tag->name; + if ($tag->description) { + $document->meta['description'] = $tag->description; + } else { + $document->meta['description'] = $this->translator->trans('flarum-tags.forum.meta.tag_description', ['{tag}' => $tag->name]); + } $document->content = $this->view->make('tags::frontend.content.tag', compact('apiDocument', 'page', 'tag')); $document->payload['apiDocument'] = $apiDocument; diff --git a/extensions/tags/src/Content/Tags.php b/extensions/tags/src/Content/Tags.php index 517cd1238..8c3a93bbe 100644 --- a/extensions/tags/src/Content/Tags.php +++ b/extensions/tags/src/Content/Tags.php @@ -14,6 +14,7 @@ use Flarum\Frontend\Document; use Flarum\Http\UrlGenerator; use Flarum\Settings\SettingsRepositoryInterface; use Flarum\Tags\TagRepository; +use Illuminate\Contracts\Translation\Translator; use Illuminate\Contracts\View\Factory; use Illuminate\Support\Arr; use Psr\Http\Message\ServerRequestInterface as Request; @@ -35,6 +36,11 @@ class Tags */ protected $tags; + /** + * @var Translator + */ + protected $translator; + /** * @var SettingsRepositoryInterface */ @@ -49,15 +55,23 @@ class Tags * @param Client $api * @param Factory $view * @param TagRepository $tags + * @param Translator $translator * @param SettingsRepositoryInterface $settings * @param UrlGenerator $url */ - public function __construct(Client $api, Factory $view, TagRepository $tags, SettingsRepositoryInterface $settings, UrlGenerator $url) - { + public function __construct( + Client $api, + Factory $view, + TagRepository $tags, + Translator $translator, + SettingsRepositoryInterface $settings, + UrlGenerator $url + ) { $this->api = $api; $this->view = $view; $this->tags = $tags; $this->settings = $settings; + $this->translator = $translator; $this->url = $url; } @@ -77,6 +91,8 @@ class Tags ]; }); + $document->title = $this->translator->trans('flarum-tags.forum.meta.tags_title'); + $document->meta['description'] = $this->translator->trans('flarum-tags.forum.meta.tags_description'); $document->content = $this->view->make('tags::frontend.content.tags', compact('primaryTags', 'secondaryTags', 'children')); $document->canonicalUrl = $defaultRoute === '/tags' ? $this->url->to('forum')->base() : $request->getUri()->withQuery('');