Кастомизация
20
Авг
16

Скрытие пунктов меню формы

Вот небольшой скрипт, с помощью которого Вы можете скрыть пункт(ы) какого-либо меню, распологающегося в верхней части формы (например, меню Действия).

Во-первых, поместите этот скрипт на онлоад формы:

function HideMenuItem(targetMenu, targetMenuItem) {
    var menuLIs = document.getElementById("mnuBar1").getElementsByTagName("LI");
	for (var i = 0; i < menuLIs.length; i++) {
		if (menuLIs[i].title && menuLIs[i].title.indexOf(targetMenu) > -1) {
			var targetDivs = menuLIs[i].getElementsByTagName("DIV");
			for (var j = 0; j < targetDivs.length; j++) {
				var targetLIs = targetDivs[j].getElementsByTagName("LI");
				for (var k = 0; k < targetLIs.length; k++) {
					if (targetLIs[k].innerHTML.indexOf(targetMenuItem) > -1) {
						targetLIs[k].style.display = "none";
						return;
					}
				}
			}
		}
	}
}

Далее нужно вызвать функцию HideMenuItem и передать ей два параметра: первый – название меню без пробелов (наприме, у Вас есть катомное меню «Супер главное Меню», то первый параметр будет «СуперглавноеМеню»), второй – название пункта меню!

HideMenuItem("<НазваниеМенюБезПробелов>", "<название пункта меню>");

Пробуем

Часто слышал о необходимости скрыть пункт «Преобразовать интерес» меню Действия, формы Интерес! Вот его и скроем. Сначала разместил на онлоаде Интерса определение функциии (первую часть кода 🙂 ), а затем вызвал ее:

HideMenuItem("Действия", "Преобразовать интерес...");

Результат



Комментарии (16)
  • Anna 20.08.2009

    Подскажите, пожалуйста, как мне задать айдишник меню ,которое яч сама создала? Я создала меню и мне в нем надо по условию скрывать кнопки. Но айдишник задать не могу: при импорте настроек ругается((

  • slivka_83 20.08.2009

    Добрый день 🙂

    О каком меню речь? вроде как в статье и написано как скрывать пункты меню 🙂

    П.С. айдишник задавать нельзя 🙂

  • Anna 20.08.2009

    Да нет, я сделала свои пункты меню и мне надо было чтоб они были открыты или закрыты при определенных условиях.. а достучатся до них согласно вашему примеру можно чрез айдишники, а задать их в исв.конфиге не смогла

  • slivka_83 20.08.2009

    Согласно моему примеру достучаться до них можно через Название меню и Название пункта меню 🙂 это не id’ишники 🙂 это Title 🙂

  • Anna 20.08.2009

    а это: var menuLIs = document.getElementById(«mnuBar1»).getElementsByTagName(«LI»);

  • slivka_83 20.08.2009

    Это мы получаем ВСЕ HTML-элементы LI, потому что именно с помощью них кодируются пункты меню 🙂 затем мы просматриваем все эти LI и находим тот в котором внутренней текст равен названию пункта меню 🙂

  • Anna 20.08.2009

    спасибо за ответы, но вот что-то не работает: HideMenuItem(«Операции», «Принять»);

  • slivka_83 20.08.2009

    хм… станно… может что-то не так сделали…

  • Anna 20.08.2009

    не знаю.. вроде бы правильно.. те пункты меню, которые есть стандратные — скрываются отлично, а мои чтото не хотят((

  • slivka_83 20.08.2009

    вот уже хоть какие-то подробности… 🙂 осталось только сравнить HTML-разметку стандартной кнопки и кастомной (в IE8 нажмите F12) 🙂 возможно в них есть отличия 🙂 сейчас под рукой нет CRM (z в отпске) — если не разберетесь до конца следующей недели — «стучите» 🙂

  • Азат 20.08.2009

    Предлагаю проще скрывать кнопки:

    if (document.all.id_объекта != null) document.all.id_объекта.style.display = ‘none’;

    id_объекта определяем просто: в интересующем объекте нажимаем F12, тыкаем на интересующую кнопку

  • slivka_83 20.08.2009

    Тут не про скрытие кнопок, а про скрытие пунктов меню 🙂

  • Азат 20.08.2009

    Ок, согласен.
    С точки зрения конечного пользователя эффект идентичный.

  • slivka_83 20.08.2009

    Результат то идентичный, только подход разный, поскольку у пунктов меню в CRM 4 не было своего ID 🙂 да и щелкнуть по ним из DevTollBar’а не представлялось возможным, поскольку инструмент выделения не вызывал раскрытия меню 🙂

  • Азат 20.08.2009

    Ха, получить ID проще простого, тем более из DevTollBar’а. Жмем F12, затем «Выбрать элемент щелчком, затем (например) на «Действия», получаем вот что:
    [img]http://imagepost.ru/images/m/en/menju_dejstvija.png[/img]
    Далее, поднимаемся чуть выше по ветке (третья строка над выделением): class = ms-crm-Menu-Label и видим, что от него ответвляется скрытая область (на картинке вторая трока снизу).
    Кликаем на плюсик,затем еще раз на плюсик — и вот, все пункты меню в порядке отображения на форме и ID-шниками 🙂
    [img]http://imagepost.ru/images/p/un/punkty_menju.png[/img]
    А развернув аналогичным способом соответсвующий пунк меню, можно добратьсядо подменю и получить нужные ID-шники [img]http://imagepost.ru/images/p/od/podpunkty_menju.png[/img]

    Таким образом, для того чтобы скрыть «Действия — Добавить действие — Задача», используем на онлоаде формы:
    if (document.all._MIlocAddActTo4212 != null) document.all._MIlocAddActTo4212.style.display = ‘none’;

  • slivka_83 20.08.2009

    Да, возможно в каком-то ролапе добавили ID’ишники, но на момент написания статьи их небыло 🙂

*

code