1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
/**
* Copyright © 2016 Ihor Vansach (ihor@magefan.com). All rights reserved.
* See LICENSE.txt for license details (http://opensource.org/licenses/osl-3.0.php).
*
* Glory to Ukraine! Glory to the heroes!
*/
namespace Magefan\Blog\Block\Post\View;
use Magento\Store\Model\ScopeInterface;
/**
* Blog post view rich snippets
*/
class Richsnippets extends Opengraph
{
/**
* @param array
*/
protected $_options;
/**
* Retrieve snipet params
*
* @return array
*/
public function getOptions()
{
if ($this->_options === null) {
$post = $this->getPost();
$logoBlock = $this->getLayout()->getBlock('logo');
$this->_options = [
'@context' => 'http://schema.org',
'@type' => 'BlogPosting',
'@id' => $post->getPostUrl(),
'author' => $this->getAuthor(),
'headline' => $this->getTitle(),
'description' => $this->getDescription(),
'datePublished' => $post->getPublishDate('c'),
'dateModified' => $post->getUpdateDate('c'),
'image' => [
'@type' => 'ImageObject',
'url' => $this->getImage() ?:
($logoBlock ? $logoBlock->getLogoSrc() : ''),
'width' => 720,
'height' => 720,
],
'publisher' => [
'@type' => 'Organization',
'name' => $this->getPublisher(),
'logo' => [
'@type' => 'ImageObject',
'url' => $logoBlock ? $logoBlock->getLogoSrc() : '',
],
],
'mainEntityOfPage' => $this->_url->getBaseUrl(),
];
}
return $this->_options;
}
/**
* Retrieve author name
*
* @return array
*/
public function getAuthor()
{
if ($author = $this->getPost()->getAuthor()) {
if ($author->getTitle()) {
return $author->getTitle();
}
}
// if no author name return name of publisher
return $this->getPublisher();
}
/**
* Retrieve publisher name
*
* @return array
*/
public function getPublisher()
{
$publisher = $this->_scopeConfig->getValue(
'general/store_information/name',
ScopeInterface::SCOPE_STORE
);
if (!$publisher) {
$publisher = 'Magento2 Store';
}
return $publisher;
}
/**
* Render html output
*
* @return string
*/
protected function _toHtml()
{
return '<script type="application/ld+json">'
. json_encode($this->getOptions())
. '</script>';
}
}