Как добавить выпадающий список в блок формы Adminhtml, выбрав данные из таблицы, на которую ссылается внешний ключ?


Я новичок в StackExchange, и это мой первый вопрос, так что будьте со мной спокойны, пожалуйста. :)

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

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

Но теперь я хочу добавить раскрывающееся поле в форму, чтобы брать предметы из другого таблица, связанная внешним ключом.

Приведенный ниже вопрос, скорее всего, то, что мне нужно, за исключением того факта, что он захватывает выбранные данные из массива:

Как добавить раскрывающееся поле для выбора настраиваемой опции от администратора?

У кого-нибудь есть пример того, как сделать это выше, но захватить выбранные данные из таблицы базы данных?

Author: Renato Aloi, 2017-08-08

1 answers

Помня, что мы следуем этому руководству: http://markshust.com/2012/07/05/creating-magento-adminhtml-grids-simplified

Короткий ответ таков...

Создайте функцию ниже, чтобы она служила источником для выпадающего списка на странице app\code\community\Foo\Bar\Block\Adminhtml\Baz\Edit\Form.php

protected function _getChuz()
{
  $collection = Mage::getModel('foo_bar/chuz')->getCollection();
  $data_array=array();
  foreach($collection as $item) {
    $data_array[]=array('value'=>$item['id'],'label'=>$item['name']);
  }
  return($data_array);
}

... и добавьте его в параметр "значения" в поле "выбрать":

$fieldset->addField('chuz', 'select', array(
        'name'  => 'chuz',
        'label' => Mage::helper('checkout')->__('Chuz'),
        'title'     => Mage::helper('checkout')->__('Chuz'),
        'values'   => $this->_getChuz(),
        'required'  => true
    ));

И длинный ответ таков...

1) Добавьте новую сущность chuz в app\code\community\Foo\Bar\etc\config.xml

<foo_bar_mysql4>
    <class>Foo_Bar_Model_Mysql4</class>
    <entities>
       ...
       <chuz>
           <table>foo_bar_chuz</table>
       </chuz>
    </entities>
</foo_bar_mysql4>

2) В файл app\code\community\Foo\Bar\sql\foo_bar_setup\mysql4-install-1.0.0.php выполните следующие действия...

Добавьте новый столбец chuz в таблицу foo_bar_baz

$table = $installer->getConnection()
...
->addColumn('chuz', Varien_Db_Ddl_Table::TYPE_CLOB, 0, array(
    'nullable'  => false,
  ), 'Chuz');
$installer->getConnection()->createTable($table);

И создайте скрипт для создания новой таблицы foo_bar_chuz

$table = $installer->getConnection()
->newTable($installer->getTable('foo_bar/chuz'))
->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
    'identity'  => true,
    'unsigned'  => true,
    'nullable'  => false,
    'primary'   => true,
    ), 'ID')
->addColumn('name', Varien_Db_Ddl_Table::TYPE_CLOB, 0, array(
    'nullable'  => false,
    ), 'Name');
$installer->getConnection()->createTable($table);

3) Создайте файлы модели следующим образом...

App\code\community\Foo\Bar\Model\Chuz.php

<?php
class Foo_Bar_Model_Chuz extends Mage_Core_Model_Abstract
{
  protected function _construct()
  {
    $this->_init('foo_bar/chuz');
  }
}

App\code\community\Foo\Bar\Model\Mysql4\Chuz.php

<?php
class Foo_Bar_Model_Mysql4_Chuz extends Mage_Core_Model_Mysql4_Abstract
{
  protected function _construct()
  {
    $this->_init('foo_bar/chuz', 'id');
  }
}

App\code\community\Foo\Bar\Model\Mysql4\Chuz\Collection.php

<?php
class Foo_Bar_Model_Mysql4_Chuz_Collection extends 
Mage_Core_Model_Mysql4_Collection_Abstract
{
  protected function _construct()
  {
    $this->_init('foo_bar/chuz');
  }
}

4) Наконец, выполните шаги из части Short Answer.

5) Не забудьте вставить некоторые строки в foo_bar_chuz вручную, потому что у нас нет формы создания для этого!

Результат должен быть следующим:

Result image

 1
Author: Renato Aloi, 2017-08-11 20:51:17