首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento:从管理模块加载模板文件

Magento:从管理模块加载模板文件
EN

Stack Overflow用户
提问于 2010-11-25 20:06:14
回答 2查看 4.5K关注 0票数 0

我一直在学习这篇关于在管理部分创建模块的教程。我只是在体验magento模块和twitter API。这是教程http://t.wits.sg/2009/03/31/howto-repackageable-custom-extension-development-in-magento/

到了第二页,我在管理中有一个模块菜单,调用我的AdminController的indexAction,如下所示:

代码语言:javascript
复制
<?php
class Optimise_Twits_AdminController extends Mage_Adminhtml_Controller_Action
{
  public function indexAction()
  {
    $this->loadLayout();
    $this->getLayout()->getBlock('content')->append($this->getLayout()->
      createBlock('twits/helloWorld'));
    $this->renderLayout();
  }
}

因此,这将显示block/HelloWorld.php块:

代码语言:javascript
复制
<?php
class Optimise_Twits_Block_HelloWorld extends Mage_Core_Block_Template
{
  protected function _toHtml()
  {
    return 'Hello world';
  }
}
?>

THis一切正常,我可以导航到我的管理菜单,点击菜单项,我会看到'HelloWorld‘。我想做的是在这里加载一个模板文件,而不是通过一个类显示文本。

我有一个我想要显示的表单,它可以查找所有产品并显示它们。然后,我可以选择一个产品并写入标签,当我单击表单上的submit按钮时,它会格式化数据,并将其作为状态更新发送到twitter。

我说错了吗?(我不应该在这里使用模板吗?)如果没有,有人可以帮我把我的模板放在哪里,以及如何调用它们。

下面是我的phtml文件的样子:

代码语言:javascript
复制
  <div class="simple_contact">
  <h1 class="cms">'Tweet up' Your Products</h1>
  <form id="twitter-feed" name="twitter-feed" action="[action_here]" 
     method="post">
  <table><tr>
  <?php
  $model = Mage::getModel("optimise_twits/products");
  $products = $model->getProducts();
  $i = 0;
  foreach ($products as $product)
  {
   // var_dump($product);
    echo '<tr>';
    echo '<td>';
    echo '<label for="'. $product .'">' . $product . '</label>';
    echo '<input type="hidden" name="tweet['.$i.'][product]" value="'. 
      $product .'">';
    echo '<br />';
    echo '<input type="text" class="hashtag" name="'.
      'tweet['.$i.'][tags]" id="tags" value="#enter, #product, #hastag"';
    echo '</td>';
    echo '<td>';
    echo '<input type="checkbox" name="tweet['.$i.'][chk]" id="'. 
       $product .'"></td>';
    echo '</tr>';
    $i++;
  }
?>
<tr>
   <td colspan="2"><input type="submit" name="submit" value="tweet"></td>
</tr>
</table>
</form>
</div>

非常感谢!

琼斯

EN

回答 2

Stack Overflow用户

发布于 2010-11-25 20:41:40

您可以通过调用块的setTemplate()方法来设置块上的模板。但别这么做。

如果你使用一个降序的Mage_Adminhtml_Block_Widget_Grid,它将为你制作一个表,你只需要提供一个集合类并描述一些列。但也不要这么做。

相反,请使用module creator。它将为您制作必要的网格小部件(和容器),并节省数小时/数天的工作。至少在你有足够的经验自己做这件事之前。

票数 2
EN

Stack Overflow用户

发布于 2010-11-26 04:48:34

是的,你这样做是对的。虽然Magento有一个自动创建表单小部件的类层次结构,但它们面临着与所有紧密绑定的OO组件相同的“问题”:如果您想要在应用程序的其他地方做同样的事情,那就太好了。如果你想/需要大量定制功能,这很耗时。它们是如何工作的,这是值得学习的,但你没有理由不能像使用更简单的PHP MVC系统那样使用Magento。

学习Magento中的每个系统是如何工作的是值得的,但是一头扎进网格可能会让你比刚开始的时候更困惑。

谈到你的具体问题,每个从Mage_Core_Block_Template继承的块都有一个"setTemplate“方法。此方法用于告诉Magento您希望块使用哪个phtml模板。因此,在Block的构造函数中,类似于

代码语言:javascript
复制
class Optimise_Twits_Block_HelloWorld extends Mage_Core_Block_Template
{
    protected function __construct()
    {
        $this->setTemplate('path/to/my/template.phtml');
    }   
}

您还会注意到我们删除了_toHtml方法。基类(Mage_Core_Block_Template)中的_toHtml加载您的模板。因此,如果您覆盖它,您的块将不再加载和呈现模板。

模板路径从主题的基本模板文件夹开始。所以,如果你使用的是现代主题

代码语言:javascript
复制
/app/design/frontend/default/modern/template

你把你的模板放在

代码语言:javascript
复制
/app/design/frontend/default/modern/template/path/to/my/template.phtml

(这稍微简化了一点,但同样,过于纠结于主题化路径的工作方式可能只会在这一点上造成阻碍。从Mage_Core_Block_Abstract::renderView开始追踪“真相”)

这应该足以让您入门了。如果你遇到更多的问题,只需要在这里问另一个具体的问题,应该会有人能够帮助你。学习Knowledge Base是一种很好的方式,可以了解更多关于这一切的工作原理,以及go beyond the knowledge base的文章(免责声明:我是两者的作者)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4276858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档