Ferreteria/v0.5/menu
< Ferreteria | v0.5
Jump to navigation
Jump to search
About
Menus in Ferreteria are static HTML which use URL data to convey state-changes. Many of the same classes and code are also used for isolated action-links which can be placed anywhere on a page, as appropriate (e.g. "[recalculate]", "[void]").
Changes from v0.4
Note that the v0.5 code has not actually been tested yet, so the examples may be wrong. Also, fcMenuOptionLink
will eventually be namespaced and renamed.
The code for adding a menu entry to a section-header used to look like this:
$oag = \fcHeaderMenuGroup::CreateCollection();
$oag->ChoiceKey()->SetIt('do');
$oag->BasePath()->SetIt($urlSelf);
// create & configure settings for "edit" menu item
$oa = \fcMenuOptionLink::CreateCollection();
$oag->CopyValuesTo($oa);
$oa->ChoiceValue()->SetIt('edit');
$oa->Popup()->SetIt('edit this invoice');
// create edit menu item object
$ol = new \fcMenuOptionLink($oa);
// add it to the menu group
$oGrp->SetNode($ol);
// create & configure settings for "empty the invoice" menu item
$oa = \fcMenuOptionLink::CreateCollection();
$oag->CopyValuesTo($oa);
$oa->ChoiceValue()->SetIt('empty');
$oa->Popup()->SetIt('remove all lines from this invoice');
// create edit menu item object
$ol = new \fcMenuOptionLink($oa);
// add it to the menu group
$oGrp->SetNode($ol);
The v0.5 methodology looks like this:
$oMenu = caApp::Me()->GetHeaderMenu();
// create & configure settings for "[add] => create new permission" menu item
$ol = new \fcMenuOptionLink;
$oa = $ol->GetArgPod();
$oa->BasePath()->SetIt($this->LinkURL()); // base URL to prefix all output URLs
$oa->ChoiceKey()->SetIt('do'); // name of option group to which this option belongs
$oa->ChoiceValue()->SetIt('add'); // value of key for this action
$oa->Popup()->SetIt('create new permission'); // (optional) hover-over text
$doAdd = $ol->GetIsSelected();
$oMenu->AddTwig($ol);
Changes:
- We now create the MenuOptionLink object directly, rather than spawning it using a static function.
- The function name for adding the Link to a parent object has changed from SetNode() to AddTwig().
- In the v0.4 example, the parent is a Group object; in the v0.5 example, it's a HeaderMenu object.
Another example, using the same code being converted from v0.4 to v0.5.
v0.4:
// "edit" menu only appears if we're not adding
$oMenu = cApp::Me()->GetHeaderMenu();
$oa = \fcMenuOptionLink::CreateCollection();
$oa->BasePath()->SetIt($this->LinkURL());
$oa->ChoiceKey()->SetIt('do');
$oa->ChoiceValue()->SetIt('edit');
$oa->Popup()->SetIt('edit this project');
$ol = new \fcMenuOptionLink($oa);
$doEdit = $ol->GetIsSelected();
$oMenu->SetNode($ol);
v0.5:
$oMenu = cApp::Me()->GetHeaderMenu();
$ol = new \fcMenuOptionLink;
$oa = $ol->GetArgPod();
$oa->BasePath()->SetIt($this->LinkURL());
$oa->ChoiceKey()->SetIt('do');
$oa->ChoiceValue()->SetIt('edit');
$oa->Popup()->SetIt('edit this project');
$doEdit = $ol->GetIsSelected();
$oMenu->AddTwig($ol);