Установка другого заголовка и мета-заголовка для страницы


Я создаю простую страницу в своем экземпляре Magento 2.
в контроллере для этой страницы я пытаюсь установить заголовок для страницы и мета-заголовок, которые должны отличаться.
Но я не в состоянии этого сделать.
Мой файл макета для действия почти пуст:

<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
    </body>

</page>

И мое действие контроллера выглядит так:

namespace [Namespace]\[Module]\Controller\[Entity];

use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;

class Index extends Action
{
    protected $resultPageFactory;
    public function __construct(
        Context $context,
        PageFactory $resultPageFactory
    ) {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }
    public function execute()
    {
        $resultPage = $this->resultPageFactory->create();
        $resultPage->getConfig()->getTitle()->set('Something');
    }
}

Результат таков:

Но мета-заголовок такой же, как и заголовок (Something).
Изменение строки в контроллере:

$resultPage->getConfig()->getTitle()->set('Something');

До

$resultPage->getConfig()->getTitle()->set('Something else');  

Приводит к тому, что заголовок (тег H1) и мета-заголовок изменяются на something else.

Как я могу установить другой мета-заголовок и заголовок (тег h1) для страницы

Author: Marius, 2016-07-12

3 answers

Вот как мне удалось получить другой мета-заголовок и заголовок страницы. У меня есть код ниже В моем классе блоков:

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Framework\View\Page\Config $pageConfig,
    $data = array()
) {
    $this->_scopeConfig = $scopeConfig; 
    $this->_pageConfig = $pageConfig;   

    parent::__construct($context, $data);
}

 /**
 * Prepare global layout
 *
 * @return $this
 */
protected function _prepareLayout()
{
    $this->_pageConfig->addBodyClass('advance-sitemap');

    if($this->getSeoTitle())
        $this->_pageConfig->getTitle()->set('Meta Title');

    if($this->getMetaKeywords())        
        $this->_pageConfig->setKeywords('Meta Keywords');

    if($this->getMetaDescription())         
        $this->_pageConfig->setDescription('Meta Description');

    $pageMainTitle = $this->getLayout()->getBlock('page.main.title');
    if ($pageMainTitle) {
        $pageMainTitle->setPageTitle('Page Heading Title');
    }

    return parent::_prepareLayout();
}

[ РЕДАКТИРОВАТЬ с помощью OP]
Вы также можете задать заголовок страницы с помощью контроллера, например:

$resultPage = $this->resultPageFactory->create();
$pageMainTitle = $resultPage->getLayout()->getBlock('page.main.title');
if ($pageMainTitle && $pageMainTitle instanceof \Magento\Theme\Block\Html\Title) {
    $pageMainTitle->setPageTitle('Page title here');
}
//rest of the code here.
 15
Author: Pankaj Pareek, 2016-07-12 14:13:38

Только что попробовал себя в новом пользовательском расширении, оно работает для меня:

public function execute() {
    $resultPage = $this->resultPageFactory->create();
    // Handling page title
    $resultPage->getLayout()->getBlock('page.main.title')->setPageTitle('Page title here');
    // Handling meta_title, meta_description and meta_keywords
    $resultPage->getConfig()->getTitle()->set("Title");
    $resultPage->getConfig()->setDescription("Description");
    $resultPage->getConfig()->setKeywords("Key Words");
    return $resultPage;
}

Это должно делать свою работу!

 1
Author: rou6e, 2019-03-12 16:03:23

Как насчет использования:

$resultPage->getConfig()->getMetadata()->setMetadata('title', 'Something else');

Для мета-заголовка.

 0
Author: belfort1, 2016-07-12 12:42:06