繁体   English   中英

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

[英]Magento: load template file from admin module

我一直在管理部分中关注本教程中有关创建模块的内容。 我只是尝试使用magento模块和twitter API。 这是教程http://t.wits.sg/2009/03/31/howto-repackageable-custom-extension-development-in-magento/

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

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

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

<?php
class Optimise_Twits_Block_HelloWorld extends Mage_Core_Block_Template
{
  protected function _toHtml()
  {
    return 'Hello world';
  }
}
?>

一切正常,我可以在菜单项上单击导航至管理菜单,然后看到“ HelloWorld”。 我想做的是在这里加载模板文件,而不是通过类显示文本。

我有一个要显示的表单,该表单查找所有产品并显示它们。 然后,我可以选择一种产品并写入标签,当我单击表单上的“提交”按钮时,它会格式化数据并将其平移到Twitter作为状态更新。

我要解决这个错误吗? (我不应该在这里使用模板吗?)如果不能,那么有人可以帮助我确定模板的放置位置以及如何调用它们。

这是我的phtml文件所希望的样子:

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

非常感谢!

Jonesy

您可以通过调用setTemplate()方法在一个块上设置模板。 但是不要。

如果使用降级的Mage_Adminhtml_Block_Widget_Grid它将为您创建表,则只需提供一个收集类并描述一些列。 但是也不要这样做。

而是使用模块创建器 它将为您制作必要的网格小部件(和容器),并节省工作时间/天数。 至少直到您有足够的经验来自己做为止。

是的,您的权限正确。 尽管Magento具有用于自动创建表单窗口小部件的类层次结构,但是它们遭受着所有紧密绑定的OO UI组件都会遇到的相同“问题”:如果您想完全执行应用程序其他地方的工作,那就太好了。 如果想要/需要大量自定义功能,则很耗时。 值得学习它们的工作方式,但是没有理由像简单的PHP MVC系统那样无法使用Magento。

值得学习Magento中每个系统的工作方式,但是全猪跳入网格可能会让您比起步时更加困惑。

转到您的特定问题,每个从Mage_Core_Block_Template继承的Block都有一个“ setTemplate ”方法。 此方法用于告诉Magento您要使用块的phtml模板。 因此,在您的Block的构造函数中,类似

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是加载模板的对象。 因此,如果您覆盖它,则您的块将不再加载和渲染模板。

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

/app/design/frontend/default/modern/template

您将模板放在

/app/design/frontend/default/modern/template/path/to/my/template.phtml

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

那应该足以让您入门。 如果您遇到其他问题,请在此处提出另一个具体问题,某个人应该可以提供帮助。 遍历知识库是一种很好的方法,可以更多地了解这一切的工作方式以及超出知识库的文章(免责声明:我是这两者的作者)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM