Magento: загрузить файл шаблона из модуля администратора - PullRequest
0 голосов
/ 25 ноября 2010

Я следовал этому руководству по созданию модулей в разделе управления. Я просто экспериментирую с модулями magento и Twitter API. Вот учебник http://t.wits.sg/2009/03/31/howto-repackageable-custom-extension-development-in-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();
  }
}

Таким образом, отображается блок block / 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 ]

2 голосов
/ 25 ноября 2010

Да, вы делаете это правильно. Хотя у Magento есть иерархия классов для автоматического создания виджетов форм, они страдают от той же «проблемы», с которой сталкиваются все тесно связанные компоненты пользовательского интерфейса: это замечательно, если вы хотите делать именно то, что сделано в другом месте приложения. отнимает много времени, если вы хотите / должны сильно настроить функциональность. Стоит узнать, как они работают, но нет причин, по которым вы не можете использовать 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 для «истины»)

Этого должно быть достаточно, чтобы начать. Если у вас возникнут дальнейшие проблемы, просто задайте другой, конкретный вопрос здесь, и кто-то должен быть в состоянии помочь. Пробираясь по Базе знаний - это отличный способ узнать больше о том, как все это работает, а также статьи, которые выходят за рамки базы (отказ от ответственности: я автор оба)

2 голосов
/ 25 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...