【问题标题】:Magento: Redirecting to a phtml page from a controller?Magento:从控制器重定向到 phtml 页面?
【发布时间】:2012-07-20 13:50:21
【问题描述】:

我有一个控制器,我想从那里重定向到某个 phtml 页面。该页面存储在 app\design\frontend\default\mystuff\template\catalog\product\view\myphtml.phtml

如何从我的控制器重定向到此页面?

谢谢!

【问题讨论】:

  • 你实际上想用你的控制器渲染那个模板,而不是重定向到它。模板可能需要一个块类才能正确渲染。此外,给定位置,您将需要加载产品对象实例以使其工作也许您想使用您的模板来呈现产品视图块?如果是这种情况,只需使用布局 XML 来更新产品视图块。
  • 谢谢,请告诉我具体的操作方法好吗?

标签: magento redirect


【解决方案1】:

最新:OP 表示需要单独显示此模板

如果您想只显示您的模板,您可以在控制器操作中执行此操作:

public yourAction()
{
    $block = $this->getLayout()->createBlock('core/template')
                                   ->setTemplate('catalog/product/view/myphtml.phtml');

    $this->getResponse()->setBody(
        $block->toHtml()
    );
}

您也可以使用布局 XML,在您的控制器中启动:

public yourAction()
{
    $this->loadLayout(false)->renderLayout(); //false keeps default handle from loading
}

在(理想情况下)你的模块布局 XML 中,做:

<?xml version="1.0"?>
<layout>
    <yourmodule_yourcontroller_youraction>
        <block type="core/template" template="catalog/product/view/myphtml.phtml" output="toHtml" />
    </yourmodule_yourcontroller_youraction>
</layout>

如果您需要知道完整的操作名称(yourmodule_yourcontroller_youraction),您可以通过echo $this-&gt;getFullActionName(); 在控制器操作中获取该信息。

最后,如果您尝试加载一个看起来像标准页面的产品视图页面,但您可以自己操作,您可以这样做:

public yourAction()
{
    $this->loadLayout()->renderLayout();
}

然后在你的布局 XML 中:

<?xml version="1.0"?>
<layout>
    <yourmodule_yourcontroller_youraction>
        <reference name="content">
            <block type="core/template" template="catalog/product/view/myphtml.phtml" name="your.block" />
        </reference>
    </yourmodule_yourcontroller_youraction>
</layout>

上一个:OP 表示他/她想要更改用于产品视图块的模板,并做出相应的回答。

Magento 的布局 XML 系统很好地处理了这个任务。由于您是最终实施者,因此您可以使用名为 local.xml 的特殊布局文件,该文件应位于您的自定义主题文件夹中(可能是 app/design/frontend/default/mystuff/layout/)。

文件应如下所示:

<?xml version="1.0"?>
<layout>
    <catalog_product_view>
        <reference name="product.info">
            <action method="setTemplate">
                <tpl>catalog/product/view/myphtml.phtml</tpl>
            </action>
        </reference>
    </catalog_product_view>
</layout>

您的布局说明与所有其他说明一起合并和处理。作为参考,product.info 块是在 catalog.xml 布局文件中建立的。上面的说明可以用简单的英文表述如下:

对于由完整动作名称catalog_product_view 标识的渲染范围和在布局中由名称product.info 标识的块实例,使用参数catalog/product/view/myphtml.phtml 调用其setTemplate() 方法。

【讨论】:

  • 谢谢,我不想要产品视图,我想在一个全新的页面上显示 phtml,而不是产品视图。我该怎么做?
  • 更新了我的答案。请记住,OOB 产品视图依赖于控制器级别的工作来实例化产品和准备视图,这有点不典型,并且破坏了视图模型的可移植性。
猜你喜欢
  • 1970-01-01
  • 2015-10-08
  • 2015-03-12
  • 2019-10-28
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多