4

有没有办法通过商店代码或 id 获取当前页面标题?

下面的代码给出了当前页面的标题,但它是当前选择的商店视图,例如http://example.com/it/shop.html这是意大利商店视图。

上下文是 ~/Model/Controller/Page.php

$title = Mage::getSingleton('core/layout')->getBlock('head')->getTitle();

我试图找出通过特定商店代码(如enorit或 id)获取当前页面标题的方法。这是为了始终将 Segment.io 分析page调用强制为英文文本。

4

3 回答 3

1

你试过下面的代码吗?

  $page = Mage::getModel('cms/page')->setStoreId(Mage::app()->getStore()->getId())->load('Page-Identifier');

    $pageTitle = $page->getTitle();
于 2015-07-20T12:17:30.010 回答
0

不,至少没那么容易。标题可以在任何地方设置,它被设置为本地化字符串,没有任何附加信息。

例子

类别页面

标题在Mage_Catalog_Block_Category_View块内设置

if ($headBlock = $this->getLayout()->getBlock('head')) {
    $category = $this->getCurrentCategory();
    if ($title = $category->getMetaTitle()) {
        $headBlock->setTitle($title);
    }

产品页面

标题在Mage_Catalog_Block_Product_View块内设置

$headBlock = $this->getLayout()->getBlock('head');
if ($headBlock) {
    $product = $this->getProduct();
    $title = $product->getMetaTitle();
    if ($title) {
        $headBlock->setTitle($title);
    }

内容管理系统页面

标题在Mage_Cms_Block_Page块内设置

$head = $this->getLayout()->getBlock('head');
if ($head) {
    $head->setTitle($page->getTitle());

大车

标题设置在Mage_Checkout_CartController(这次不是块!)

$this
    ->loadLayout()
    ->_initLayoutMessages('checkout/session')
    ->_initLayoutMessages('catalog/session')
    ->getLayout()->getBlock('head')->setTitle($this->__('Shopping Cart'));

等等等等

不幸的是,没有单点可以挂钩,您必须分别处理所有情况。

唯一常用的方法是Mage_Page_Block_Html_Head::setTitle(),如前所述,这为时已晚,因为它已经获取了本地化字符串。

此外,正如您在示例中看到的那样,有时标题是翻译文本,__()有时它是当前商店视图上下文中模型的属性。

于 2015-07-21T06:39:14.580 回答
0

在 PHTML 文件的上下文中,我认为您只能像这样翻译字符串:

$this->__($this->getLayout()->getBlock('head')->getTitle())

如果你想使用存储视图翻译,你应该setTitle在块类或控制器的某个地方。

于 2015-07-20T13:16:50.763 回答