ページに異なるタイトルとメタタイトルを設定する


7

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タグ)をページに設定するにはどうすればよいですか

回答:


13

このようにして、さまざまなメタタイトルとページ見出しを取得できました。私のブロッククラスには以下のコードがあります:

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();
}

[EDIT by 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.

1
コンテンツブロックからページタイトルを設定するのが最善の方法かどうかはわかりませんが、あなたの答えが正しい方向に導いてくれました。page.main.titleブロックのページタイトルの設定は、コントローラーでも機能します。ありがとう。
マリウス

こんにちは、これを共有してくれてありがとう。これに使用した回答全体のコード(Main.phpですか?; ..layout.xml; template.phtml)を共有してもよろしいですか?どういうわけか再現できない/私の場合には結果が表示されません。それはすごいです!
エスカリエット

0

使用について:

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

メタタイトル用。


動作しません。結果を->getMetadata()呼び出すことができないように配列を返しますsetMetadata。そしてgetMetadata、行から削除すると、エラーが発生しますObject of class Magento\Framework\View\Page\Title could not be converted to string
マリウス

setMetadata()を使用すると、$ resultPage-> getConfig()-> getMetadata()-> setMetadata( 'meta_title'、 'Something other');のようなカスタムメタプロパティを設定できます。
Jaimin Parikh 2016

@JaiminParikh。配列を返し、配列からメソッドを呼び出すことができないgetMetadata()->setMetadataため、2つの呼び出しを連鎖させることはできませんgetMetadata。これについては、上のコメントで説明しました。しかし、私は試してみまし $resultPage->getConfig()->setMetadata('meta_title', 'Something else');たが、変化はありません。<meta name="title"...ページにレンダリングがないため、これは機能しないと思います。タイトルは次のように表示されます<title>...</title>
マリウス

@マリウスはい私はそれで間違っています。$ resultPage-> getConfig()-> setMetadata( 'meta_title'、 'Something other');を使用することにより、、tは、「meta_title」という名前の新しいメタタグを作成しますが、役に立ちません。
Jaimin Parikh 2016

0

新しいカスタム拡張機能を試してみましたが、うまくいきました:

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;
}

それは仕事をすべきです!


どこに追加したの?
ジビンジョージ

アクションコントローラのexecute()メソッドで
rou6e
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.