1. хук на \IPS\Theme\class_core_front_profile, добавляем (#elEditProfile, insert after) кнопку, но не напрямую через <li>...</li>, а через шаблон {template='myProfileButton' group="plugins" location="global" app="core" params='$members'}
2. создаем темплейт myProfileButton.phtml с кнопкой в dev/html (копируем из edit-profile, например, меняем seoTemplate='profile_testform' и do='testform')
3. создаем code-хук на \IPS\Http\Url\Friendly (фурлу по другому не создать в плагине)
static public function furlDefinition( $revert=false )
{
$furls = parent::furlDefinition( $revert );
if( !isset( $furls['profile_testform'] ) )
{
$furls['profile_testform'] = array(
'friendly' => 'profile/{#id}/testform',
'real' => 'app=core&module=members&controller=profile&do=testform',
'params' => array(),
'regex' => array(),
);
}
return $furls;
}
4. создаем хук на \IPS\core\modules\front\members\profile - новую функцию, которую мы передаем в do= на п.2
public function testform() {
$form = new \IPS\Helpers\Form;
$form->add( new \IPS\Helpers\Form\Text(’name’));
\IPS\Output::i()->output = $form;
}
Радуемся окошку с формой при нажатии на кнопку. Ну или ищем ошибку