有没有办法通过商店代码或id获取当前页面标题?
以下代码给出了当前页面的标题,但属于当前选择的商店视图,例如http://example.com/it/shop.html这是意大利商店视图。
上下文为~/Model/Controller/Page.php
$title = Mage::getSingleton('core/layout')->getBlock('head')->getTitle();
我正试图找出通过特定商店代码(如en
、it
或id(获取当前页面标题的方法。这是为了始终强制Segment.io analytics page
调用英文文本。
您尝试过以下代码吗??
$page = Mage::getModel('cms/page')->setStoreId(Mage::app()->getStore()->getId())->load('Page-Identifier');
$pageTitle = $page->getTitle();
不,至少没那么容易。标题可以设置在任何位置,并且它被设置为本地化字符串,没有任何附加信息。
示例
类别页面
标题设置在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);
}
CMS页面
标题设置在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()
,如前所述,这太晚了,因为它已经获得了本地化的字符串。
此外,正如您在示例中看到的,有时标题是__()
的翻译文本,有时它是当前商店视图上下文中模型的属性。
在PHTML文件的上下文中,我认为您只能翻译如下字符串:
$this->__($this->getLayout()->getBlock('head')->getTitle())
如果要使用存储视图转换,则应该在块类或控制器中的某个位置使用setTitle
。