Ferreteria/v0.5/menu: Difference between revisions

From Woozle Writes Code
Jump to navigation Jump to search
No edit summary
No edit summary
Line 69: Line 69:
             $oMenu = cApp::Me()->GetHeaderMenu();
             $oMenu = cApp::Me()->GetHeaderMenu();
             $ol = new \fcMenuOptionLink;
             $ol = new \fcMenuOptionLink;
               $ol->BasePath()->SetIt($this->LinkURL());
            $oa = $ol->GetArgPod();
               $ol->ChoiceKey()->SetIt('do');
               $oa->BasePath()->SetIt($this->LinkURL());
               $ol->ChoiceValue()->SetIt('edit');
               $oa->ChoiceKey()->SetIt('do');
               $ol->Popup()->SetIt('edit this project');
               $oa->ChoiceValue()->SetIt('edit');
               $oa->Popup()->SetIt('edit this project');
                
                
               $doEdit = $ol->GetIsSelected();
               $doEdit = $ol->GetIsSelected();
                
                
               $oMenu->SetTwig($ol);
               $oMenu->AddTwig($ol);
</syntaxhighlight>
</syntaxhighlight>

Revision as of 15:50, 10 December 2021

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);