Extend viewdefs to change a value for a button

I am trying to disable a button in the Save button dropdown in a module's record view.

I would like to do that for just that single button without overriding the entire file, so I thought I would create and extension file for the record view and unset that array element.

Obviously if there are other extensions adding more buttons in this dropdown, I don't want to unset the wrong one, so I tried all kinds of foreach loops with if statements, array_walk_recursive(), array_map() and more foreach loops referencing the original array.

The only actual way I managed to do it is still this:

unset($viewdefs['Calls']['base']['view']['record']['buttons'][1]['buttons'][1]);

And if another button gets added at the top of the dropdown, this should theoretically remove the wrong button!

I cannot find anything in the documentation or examples of how this simple thing should be done besides copying the entire file. I believe that would make this simple change affect any other modules also trying to affect the same view.

Parents Reply
  • Can you please check and see why this bit of code does not do anything like I think it should?

    This is the first thing I tried, and I tried again and it still doesn't work.

    In the file custom/Extension/modules/Calls/Ext/clients/base/views/record/record.php

    <?php

    foreach ($viewdefs['Calls']['base']['view']['record']['buttons'] as &$button) {
      if ($button['name'] == 'save_dropdown') {
        foreach ($button['buttons'] as &$btn) {
          if ($btn['name'] == 'save_invite_button') {
            unset($btn);
          }
        }
      }
    }

    After rebuilding and clearing the cache, the button is still there:

    Although this should also work, in theory, but doesn't:

    function remove_button(&$item) {
        if ($item['name'] == 'save_invite_button') {
            unset($item);
        }
    }

    array_walk_recursive($viewdefs['Calls']['base']['view']['record']['buttons'], 'remove_button');
Children
No Data