Link.php 3.74 KB
Newer Older
Ketan's avatar
Ketan committed
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;
    }
}