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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Cms\Block\Widget\Page;
/**
* Widget to display link to CMS page
*/
class Link extends \Magento\Framework\View\Element\Html\Link implements \Magento\Widget\Block\BlockInterface
{
/**
* Prepared href attribute
*
* @var string
*/
protected $_href;
/**
* Prepared title attribute
*
* @var string
*/
protected $_title;
/**
* Prepared anchor text
*
* @var string
*/
protected $_anchorText;
/**
* @var \Magento\Cms\Model\ResourceModel\Page
*/
protected $_resourcePage;
/**
* Cms page
*
* @var \Magento\Cms\Helper\Page
*/
protected $_cmsPage;
/**
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Cms\Model\ResourceModel\Page $resourcePage
* @param \Magento\Cms\Helper\Page $cmsPage
* @param array $data
*/
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Cms\Model\ResourceModel\Page $resourcePage,
\Magento\Cms\Helper\Page $cmsPage,
array $data = []
) {
parent::__construct($context, $data);
$this->_resourcePage = $resourcePage;
$this->_cmsPage = $cmsPage;
}
/**
* Prepare page url. Use passed identifier
* or retrieve such using passed page id.
*
* @return string
*/
public function getHref()
{
if (!$this->_href) {
$this->_href = '';
if ($this->getData('href')) {
$this->_href = $this->getData('href');
} elseif ($this->getData('page_id')) {
$this->_href = $this->_cmsPage->getPageUrl($this->getData('page_id'));
}
}
return $this->_href;
}
/**
* Prepare anchor title attribute using passed title
* as parameter or retrieve page title from DB using passed identifier or page id.
*
* @return string
*/
public function getTitle()
{
if (!$this->_title) {
$this->_title = '';
if ($this->getData('title') !== null) {
// compare to null used here bc user can specify blank title
$this->_title = $this->getData('title');
} elseif ($this->getData('page_id')) {
$this->_title = $this->_resourcePage->getCmsPageTitleById($this->getData('page_id'));
} elseif ($this->getData('href')) {
$this->_title = $this->_resourcePage->setStore($this->_storeManager->getStore())
->getCmsPageTitleByIdentifier($this->getData('href'));
}
}
return $this->_title;
}
/**
* Prepare label using passed text as parameter.
* If anchor text was not specified use title instead and
* if title will be blank string, page identifier will be used.
*
* @return string
*/
public function getLabel()
{
if ($this->getData('anchor_text')) {
$this->_anchorText = $this->getData('anchor_text');
} elseif ($this->getData('href')) {
$this->_anchorText = $this->_resourcePage->setStore(
$this->_storeManager->getStore()
)->getCmsPageTitleByIdentifier(
$this->getData('href')
);
} elseif ($this->getData('page_id')) {
$this->_anchorText = $this->_resourcePage->getCmsPageTitleById($this->getData('page_id'));
} elseif ($this->getTitle()) {
$this->_anchorText = $this->getTitle();
} else {
$this->_anchorText = $this->getData('href');
}
return $this->_anchorText;
}
}