[英]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.