Чтобы добавить к первому ответу,
одна вещь, с которой у меня постоянно были проблемы, - это не вызывать метод add_layout_tabs
в любом месте файла обновления вашего модуля (т. Е. Файл, начинающийся с * 1004)*)
Итак, предположим, что ваш файл обновления называется: upd.addon_name.php
.Тогда в install
выглядит так (примечание: все следующие функции являются частью класса Addon_name_upd
внутри вашего файла обновления:
function install () {
// ... create databases or any necessary code for your module
$this->EE->load->library('layout');
$this->EE->layout->add_layout_tabs($this->tabs(), 'addon_name');
return TRUE;
}
Обратите внимание на вызов метода $this->tabs()
: этот метод выглядитчто-то вроде этого:
function tabs() {
$tabs['addon_name'] = array(
'field_1_inside_publish_form' => array(
'visible' => 'true',
'collapse'=> 'false',
'htmlbuttons' => 'true',
'width' => '100%'
)
);
return $tabs;
}
Где field_1_inside_publish_form
- это поле, которое будет определено в соответствующем файле вкладки для модуля (т. е. tab.addon_name.php
).
Метод установки будет вВ результате сохраните новую вкладку в существующий макет публикации, включающий конфигурацию вкладок вашего модуля.
Однако необходимо добавить метод для удаления вашей конфигурации в методе удаления файла обновления, вызвав метод delete_layout_tabs
, например:итак:
function uninstall() {
// necessary code to drop your database tables or whatever
$this->EE->load->library('layout');
$this->EE->layout->delete_layout_tabs($this->tabs(), 'addon_name');
return TRUE;
}
Еще одна вещь, если вы будете развиваться так, как я: внесите небольшое изменение здесь, протестируйте свое изменение, вернитесь и закодируйте еще немного, тогда вы обнаружите, что если новые поля добавляются вфайл вкладки tab.addon_name.php
после включения вашего модуля не появляется на новой вкладке на странице публикации. Причина в том, что метод add_layout_tabs
, который вы вызываете в методе установки вашего обновленияфайл должен быть запущен.
Однако этот метод выполняется только при включении модуля.Таким образом, это означает, что вы должны отключить свой модуль, что является перетаскиванием, если ваш модуль добавляет таблицы базы данных.К счастью, вы можете сделать так, чтобы метод обновления вашего файла обновления загружал вашу новую конфигурацию вкладок (в дополнение к добавлению или удалению любых новых таблиц базы данных как части обновлений вашего модуля.)
Идея состоит в том, что вы удаляете свою предыдущую конфигурациюи вы добавляете конфигурацию, которая вызывает метод ваших вкладок с именами новых полей для раздела вкладок вашего модуля.
Итак, предположим, что у вашего метода вкладок есть новое поле с именем 'field_2_inside_publish_form', например так:
function tabs() {
$tabs['addon_name'] = array(
'field_1_inside_publish_form' => array(
'visible' => 'true',
'collapse'=> 'false',
'htmlbuttons' => 'true',
'width' => '100%'
),
'field_2_inside_publish_form' => array(
'visible' => 'true',
'collapse'=> 'false',
'htmlbuttons' => 'true',
'width' => '100%'
)
);
}
тогда ваш метод обновления может обновить макет следующим образом (предположим, что вы обновили свойство $this->version
в файле udpate с '1.0' до '1.5'.
function update($current='') {
// don't do anything if the version hasn't changed
if($current == $this->version) {
return FALSE;
}
// the version property has a version higher than current version in db
// this means the module is being updated.
if($current < $this->version) {
// update the tab layout
// delete old layout
$this->EE->load->library('layout');
$this->EE->layout->delete_layout_tabs($this->tabs(), 'addon_name');
// add new tab layout which calls tabs method with updated code
$this->EE->load->library('layout');
$this->EE->layout->add_layout_tabs($this->tabs(), 'addon_name');
}
return TRUE;
}
Помните, что метод обновления файла обновления вашего модуля запускается каждый раз, когда вы находитесь на странице панели управления вашего модуля , определенной в файле страницы панели управления вашего модуля (т. Е. mcp.addon_name.php
).страница главной панели управления, вероятно, будет соответствовать методу index класса Addon_name_mcp
вашей панели управленияФайл страницы el.
Это будет соответствовать ссылке на uri, например: admin.php?S=0&D=cp&C=addons_modules&M=show_module_cp&module=addon_name&method=index
Надеюсь, это поможет.Это немного затянуто, но я написал это больше для себя, чем для кого-либо другого (потому что я потратил впустую 3 часа, пытаясь заставить свой модуль работать).