2010-11-25 3 views
0

Я слежу за этим руководством по созданию модулей в разделе управления. Я просто экспериментирую с модулями magento и API twitter. Вот учебник http://t.wits.sg/2009/03/31/howto-repackageable-custom-extension-development-in-magento/Magento: загрузить файл шаблона из модуля администратора

я дошел до страницы, где два у меня есть меню модуля в области управления, который вызывает на indexAction моего AdminController как так:

<?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». Я хочу сделать здесь загрузку файла шаблона вместо отображения текста через класс.

У меня есть форма, которую я хочу отобразить, которая просматривает все продукты и отображает их. Затем я могу выбрать продукт и писать в тегах, а когда я нажимаю кнопку отправки в форме, она форматирует данные и отбрасывает их на твиттер в качестве обновления статуса.

Я иду об этом неправильно? (не должен ли я использовать шаблоны здесь?), если нет, кто-то может мне помочь, где разместить мои шаблоны и как их называть.

Это то, что мой файл 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> 

Спасибо большое!

Джоунси

ответ

2

Вы можете установить шаблон на блоке, вызвав его setTemplate() метод. Но не надо.

Если вы используете нисходящий Mage_Adminhtml_Block_Widget_Grid, он сделает таблицу для вас, вам нужно будет предоставить класс коллекции и описать некоторые столбцы. Но не делайте этого.

Вместо этого используйте module creator. Он сделает необходимый виджет сетки (и контейнер) для вас и сэкономит часы/дни работы. По крайней мере, пока у вас недостаточно опыта, чтобы сделать это самостоятельно.

+0

поэтому это создаст файлы шаблонов и все, что мне нужно Делать это голова и изменять их? Он не собирается писать в magento, поэтому мне не нужны решетки с созданием нового элемента и т. Д. – iamjonesy 2010-11-25 15:59:47

2

Да, вы делаете это правильно. Хотя Magento имеет иерархию классов для автоматического создания виджетов форм, они страдают от той же «проблемы», что и все жестко связанные компоненты OO UI: отлично, если вы хотите сделать именно то, что сделано в другом месте приложения. занимая много времени, если вы хотите/должны сильно настроить функциональность. Стоит изучить, как они работают, но нет причин, по которым вы не можете использовать Magento, как если бы вы использовали более простую систему PHP MVC.

Стоит узнать, как работает каждая система в Magento, но прыгать в сетку целиком может просто оставить вас в замешательстве, чем когда вы начали.

Переходя к вашему конкретному вопросу, каждый блок, который наследуется от Mage_Core_Block_Template, имеет метод «setTemplate». Этот метод, если используется, чтобы сообщить Magento, какой шаблон phtml вы хотите использовать блок. Так, в конструкторе вашего Блока, что-то вроде

class Optimise_Twits_Block_HelloWorld extends Mage_Core_Block_Template 
{ 
    protected function __construct() 
    { 
     $this->setTemplate('path/to/my/template.phtml'); 
    } 
} 

Вы также заметите, что мы удалили метод _toHtml. _toHtml в базовом классе (Mage_Core_Block_Template) - это то, что загружает ваш шаблон. Поэтому, если вы переопределите его, ваш блок больше не будет загружать и отображать шаблон.

Путь к шаблону начинается с базы базовых шаблонов вашей темы. Таким образом, если вы используете современную тему

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

Вы хотите поставить шаблон на

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

(это немного упрощено, но опять же, получая слишком запутанно в тот пути Темизации работы может только встаньте на этом пути. Начните трассировку на Mage_Core_Block_Abstract::renderView за «правду»)

Этого должно быть достаточно, чтобы вы начали. Если вы столкнетесь с дополнительными проблемами, просто задайте другой, конкретный вопрос здесь, и кто-то должен быть в состоянии помочь. Работая через Knowledge Base - это отличный способ узнать больше о том, как все это работает, а также статьи, которые go beyond the knowledge base (отказ от ответственности: я являюсь автором обоих)

Смежные вопросы