Use different task names for different edit pages.
Example:
mosMenuBar::save(); //no task specified, the default "save" task will be applied
mosMenuBar::save('savearticle'); //task = savearticle
mosMenuBar::save('savecategory'); //task = savecategory
mosMenuBar::save('save_the_planet'); //task = save_the_planet
Here is a fully custom save button:
mosMenuBar::customX('saveitem', 'save.png', 'save_f2.png', $adminLanguage->A_SAVE, true ); //task = saveitem
Catch the current task and proceed to the requested action (file admin.xxx.php) :
<?php
$task = mosGetParam($_REQUEST, 'task', '');
switch ($task) {
case 'save': doSave(); break;
case 'savearticle': doSaveArticle(); break;
case 'savecategory': doSaveCategory(); break;
case 'save_the_planet': doSaveThePlanet(); break;
case 'saveitem': saveItemPlease(); break;
default: pageNotFound(); break;
}
?>
Informational note for Elxis 4.0 Nautilus: Elxis 4.0 does not uses option and task variables. It does not even use any POST/GET variables!
Elxis Nautilus routes the user request by analysing the URI segments.I paste a part of the routing procedure of component Search
<?php
private function makeRoute() {
$c = count($this->segments);
if ($c == 0) { return; }
if ($c > 1) {
exitPage::make('404', 'CSEA-0003');
}
if ($this->segments[0] == 'osdescription.xml') {
$this->controller = 'open';
$this->task = 'osDescription';
return;
}
$eng = strtolower(str_ireplace('.html', '', $this->segments[0]));
$eng = filter_var($eng, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
if ($eng != '') { $this->engine = $eng; }
}
?>
And here is a sample on how you create buttons in Elxis Nautilus (no special file is required - buttons are generated on runtime)
<?php
$toolbar = $elxis->obj('toolbar');
$toolbar->add($eLang->get('SAVE'), 'save', false, '', 'elxSubmit(\'save\');');
$toolbar->add($eLang->get('APPLY'), 'saveedit', false, '', 'elxSubmit(\'apply\');');
$toolbar->add($eLang->get('CANCEL'), 'cancel', false, $elxis->makeAURL('content:categories/'));
?>