How do I delete menu item created by createAddonMenu() in Google Script - google-sheets

I created an add-on menu for Google Sheet by using script SpreadsheetApp.getUi().createAddonMenu(). But as requested by our customer, instead of putting this menu under Add-ons, now we put this menu on top menu by using SpreadsheetApp.getUi().CreateMenu() and want to remove the menu under Add-ons. I tried SpreadsheetApp.getActive().removeMenu() but it doesn't work. Is anyone know how to remove the Add-ons menu item?

SpreadsheetApp.getActiveSpreadsheet().removeMenu('Custom Menu');
Reloading the Spreadsheet with Ctrl + R doesn't work to re-execute onOpen(), because the Spreadsheet App overrides the keys' function and reloads the Spreadsheet content within the Google App. To really reload, you may press Ctrl + F5 or use the Browser's Reload button or click into the address bar and hit Enter.
Some Examples for creating, editing and removing menus / menu items:
http://apps-script-google.blogspot.com/2015/03/custom-menu-create-delete.html

I realized the SpreadsheetApp.getUi().createAddonMenu() was in onOpen(), that means this Add-on menu item was only created when the sheet is opening. That means if the sheet is closed, the menu item will not exist. So just modify menu items in the script, close the sheet and re-open it, the menu item will be change accordingly.

Related

How do I protect a shared google sheet with and still allow the script button to work?

I have a sheet that is shared with quite a few people. They are supposed to fill in 5 cells, click the script button and it will insert the text below and sort it by date.
I created the script and assigned it to the button for this.
I need to protect the entire sheet except the 5 cells and the button.
When I add the protection nobody can click on the button. Is there a workaround?
Answer:
You can use Protected Ranges to protect the sheet from edit with the exception of pre-defined cells.
Steps:
Follow the menu item Data > Protected sheets and ranges from the Sheets User Interface.
Click on the + Add a sheet or range button in the newly-opened sidebar.
Click the Sheet tab.
Select which of the Sheets you wish to have protected.
Mark the Except certain cells check-box with a click (✓) and select in A1 notation the 5 cells you wish for users to edit. For example D1:D6.
Click Ok
Click Set permissions
Keep Restrict who can edit this range selected with Only you as the selection in the drop-down, and press Done.
This is enough - from here anyone you share the sheet with will have edit access to the specific five cells you specified in the exception rule. The button is also clickable as long as the user has authenticated the function to run as them.
References:
Docs Editors Help - Protect, hide, and edit sheets

Google sheets - on clicking a tab/sheet trigger a action

In Google sheets, I have multiple sheets/tab in one spreadsheet file. I want to trigger a action when I switch from one tab to another i.e. when I click on the tab name / sheet name. Is this possible?
I'm looking for the same solution. The only answer I've come up with is to hide all sheets but one and force the user to click a button to select a sheet to be unhidden, afterwhich the current sheet is hidden.

prevent popup menu of parent control from showing

I assigned a popup menu to the TPageControl because I want to display it when I rightclick a tab.
So that works...
Unfortunately it also shows the popup menu when I right-click within the actual tab sheet.
This I do not want because my ListBox1 in the tab sheet responds to a right-click to execute some code.
So right now it's a mess, the code fires upon rightclick of the listbox but also then displays a popup menu.
How can I nullify this popup menu in the tabsheet or at least within the listbox itself?
ok, Handled := True; was all that was needed in the popup event of the listbox. Thanks Rufo for pointing me in the right direction.

Shorten Joomla SEF URL Parent / Child / Sub Menu Items, Use only one alias without multiple parent alias

Is there anyway to only show the menu item alias in the URL without its parent alias? I know I can create a hidden menu with all items in the root level but this will make the breadcrumb unusable.
For example: www.mysite.com/grand-parent/parent/child
I like it to be just www.mysite.com/child
I have url rewrite/sef turned on using Joomla 2.5.
Thanks,
Will
There is a workaround.
Create a seperate menu and create menu item in that menu with required alias.
Then on the menu you want the link in the first place, create a menu item of type menu Alias and select the seperate menu item as target. This way parent alias will no appear infront for any alias type menu items.
No need for any workarounds. It works straight on.
(Written for J 2.5 but J 3 should be the same)
Choose the menu item which you wish to remove from the SEF URL (the parent menu which provides the url). Open it from the menu manager
In the section on the left, titled "Details" there is a row with "Alias". Next to it there's a button "Inherited". Click it so it becomes "Not Inherited".
Save & Close
Voila! It disappears .
It work's with "Direct Alias" extension.
http://extensions.joomla.org/extension/direct-alias
After instaling it "Inherited" button apears next to "Alias".
I have just had a similar problem and this plugin worked perfectly to achieve what I needed. This saves me hours of work creating 301 redirects. I had to buy the pro version to get the control over individual menu items. This gives you the functionality Ben Shomer describes above eg Next to it there's a button "Inherited". Click it so it becomes "Not Inherited". The free version controls ALL menu item aliases. Great plugin, highly recommended.
To perform what you want to do :
1- Install "Direct Alias" extension : http://extensions.joomla.org/extension/direct-alias
2- Go to "Menus" -> "All Menus Items" and select your menu item.
After "Alias" field you will have two buttons "Relative" and "Inherited".
Click on "Relative". It will transform to "Direct". Save and test.
You have now a direct link for your child item in your menu.
Note : If you don't install Direct "Direct Alias" extension the two button will not display.
I'm not sure it's possible with core Joomla.
You can achieve this - and complete control over your SEF urls - with the sh404 extension.
I solve it by following these steps.
Create a hidden menu which is your child menu. (For creating the hidden menu go to the Link Type tab and select No for Display in Menu option).
Then create your parent menu with a type of anything under the System Links (except Menu Item Alias)
Create a menu (as a child of the parent menu you have created before) with the type of Menu Item Alias and select the hidden child menu you've created before as the Menu Item.
That's all. Now you can show your menu structure like-
|-Parent
|--Child
And when you click on the Child link the URL will look like mysite.com/child

Cannot detect Frontpage properly in Joomla 2.5 templates

I've seen in Joomla documentation the way to detect if you are in Frontpage while creating a template in Joomla 2.5. This is the code:
<?php
$app = JFactory::getApplication();
$menu = $app->getMenu();
if ($menu->getActive() == $menu->getDefault()) {
echo 'This is the front page';
}
?>
This works when you are at home page (or clicking on Home menu), but I have an slider in home page, and I link in the slider to an article which is not in any menu item in the application. When I load this article the code above returns as I were at frontpage. I guess that if I doesn't click on any menu item, $menu->getActive() doesn't change.
Any suggestion?
Thanks in advance.
You can do one thing to solve this problem. Create a hidden menu of all the article links which are linked in the sliders.By creating hidden menu the link will be initialized and $menu->getActive() will work for all the links..Hopefully it will works for you .
I wish to add to the present answer and provide some clarifications.
In order for the menu selection to be detected the page requires to be assigned to a menu item. If this is a hidden menu than the link to such a page called My Page would be:
/index.php/my-page - “my-page” is the menu title alias for this item
However, if one wants to show the correct hierarchy in the breadcrumbs for the same page, then the menu hierarchy would have to be replicated in the hidden menu.
For example if My Page is under My Articles main menu item, then in the hidden menu you should add “My Articles” item, of the type: Menu Item Alias, which is in the Systems submenu of the menu type field. The My Page item should be a sub-menu item of My Articles.
The “My Articles” menu item in the hidden menu must have a different menu alias than the same one in the main menu hence the new link to My Page would look like:
/index.php/my-articles2/my-page
To create a hidden menu, one simply creates another menu. It does not matter whether one creates a module for it or not, but if one does then one just should not assign any position to that module.

Resources