Как добавить выпадающий список в блок формы Adminhtml, выбрав данные из таблицы, на которую ссылается внешний ключ?
Я новичок в StackExchange, и это мой первый вопрос, так что будьте со мной спокойны, пожалуйста. :)
Я следую букве этого руководства здесь , изучая, как перечислять, создавать, обновлять и удалять ресурсы в базе данных, используя сетки и формы Adminhtml.
Я смог выполнить все задачи, предложенные в учебнике, и запустил его.
Но теперь я хочу добавить раскрывающееся поле в форму, чтобы брать предметы из другого таблица, связанная внешним ключом.
Приведенный ниже вопрос, скорее всего, то, что мне нужно, за исключением того факта, что он захватывает выбранные данные из массива:
Как добавить раскрывающееся поле для выбора настраиваемой опции от администратора?
У кого-нибудь есть пример того, как сделать это выше, но захватить выбранные данные из таблицы базы данных?
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
вручную, потому что у нас нет формы создания для этого!
Результат должен быть следующим: