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