Visual Basic, .NET, ASP, VBScript
 

   
 
Описание для автора не найдено
 
     
   
 

Генератор меню написан в виде include-файла для ASP и позволяет создавать меню в браузерах Internet Explorer 4+ и Netscape Navigator 4+. Создаваемое меню может быть привязано к любой точке страницы (причем угол привязки выбирается автоматически из соображений того, чтобы меню помещалось в видимой области). Имеется возможность вертикальной прокрутки пунктов текущего уровня меню в вертикальном направлении (в случае если пунктов много и они все не помещаются на экране).

Пример ASP-странички создающей меню:

<%@ language=JScript %>
<!--#include file="..\include\menus.inc"--> // собственно подключение генератора
<%browser=Server.CreateObject("MSWC.BrowserType"); // определение браузера
menu1=NewMenu(); // создание нового уровня меню
menu2=NewMenu();
menu3=NewMenu();
menu4=NewMenu();
menu5=NewMenu();
AddItem(menu1,"","Item1","http://localhost/lexey","Item1","","","",""); // добавление пункта в меню
AddSubMenu(menu1,menu2,"","Submenu","http://localhost/lexey","SubMenu","","","",""); // добавление подменю.
AddItem(menu2,"","¦єэъЄ1","http://localhost/lexey","Item1","","","","");
AddItem(menu2,"","¦єэъЄ2","http://localhost/lexey","Item2","","","","");
AddItem(menu2,"","¦єэъЄ3","http://localhost/lexey","Item3","","","","");
AddItem(menu2,"","A","http://localhost/lexey","Пункт1","","","","");
AddItem(menu2,"","B","http://localhost/lexey","Item1","","","","");
AddItem(menu2,"","C","http://localhost/lexey","Item1","","","","");
AddItem(menu2,"","D","http://localhost/lexey","Item1","","","","");
AddItem(menu2,"","E","http://localhost/lexey","Item1","","","","");
AddSubMenu(menu2,menu3,"","Submenu","http://localhost/lexey","SubMenu","","","","");
AddSubMenu(menu2,menu5,"","Submenu","http://localhost/lexey","SubMenu","","","","");
AddSubMenu(menu2,menu4,"","Submenu","http://localhost/lexey","SubMenu","","","","");
AddItem(menu3,"","Item1","http://localhost/lexey","Item1","","","","");
AddItem(menu5,"","Item1","http://localhost/lexey","Item1","","","","");
AddItem(menu4,"","Item1","http://localhost/lexey","Item1","","","","");
AddItem(menu4,"","Item2","http://localhost/lexey","Item2","","","","");
%>

<html>
<head>
<script language=javascript>
<%
WriteMMC(browser.Browser); // выводим скрипт управления меню клиенту
%>
</script>
</head>
<body>
<%
WriteMT(browser.Browser); // генерируем набор HTML-тэгов
%>
<script language="Javascript">
CreateRootMenu(<%=menu1%>,100,300,1000); // отображаем меню в позиции 100,300 с z-index 1000
</script>
</body>
</html>/

Создание нового уровня меню осуществляется с помощью конструктора NewMenu(), который возвращает дескриптор (handle) нового меню. После получения нового дескриптора можно приступать к заданию пунктов меню, что делается с помощью функций AddItem(…) и AddSubMenu. Формат их вызова следующий:

AddItem(handle,itemicon,itemtext,itemurl,itemtip,itemonclick,_
   itemonmouseover,itemonmouseout,itemcustom) – добавляет новый пункт в меню. Параметры:

  • handle – дескриптор меню, в которое добавляется пункт.
  • itemicon – URL иконки. Иконка должна иметь размер 16x16. Если этот параметр равен “”, то используется иконка по умолчанию (images/itemicon.gif)
  • itemtext – название пункта меню.
  • itemurl - URL, по которому осуществляется переход при клике на данном пункте меню
  • itemtip – подсказка, отображаемая в строке статуса браузера
  • itemonclick, itemonmouseover, itemonmouseout – позволяют задать собственные обработчики событий onclick, onmouseover, onmouseout. Если эти параметры равны “”, то используются обработчики по умолчанию.
  • itemcustom – дополнительная строка, которая будет добавлена в тэг, описывающий пункт меню (<div> - для IE, <layer> - для NN).

AddSubMenu(handle,subhandle,subicon,subtext,suburl,subtip,_
   subonclick,subonmouseover,subonmouseout,subcustom) - добавляет подменю в меню. Параметры:

  • subhandle – дескриптор добавляемого подменю.
  • Все остальные параметры полностью аналогичны параметрам функции AddItem.

 

После описания меню необходимо сгенерировать страницу, содержащую управляющий скрипт и набор тэгов. Это делается с помощью двух функций:

WriteMMC(browser) - выдает "код", управления меню в генерируемую страницу. Параметры:

  • brouser – тип клиентского браузера. Если равен “IE”, то генерируется скрипт управления для IE4+, иначе для NN4+.

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

<script language=javascript>

<%

…. // здесь делаем вызов WriteMMC

%>

</script>

WriteMT(browser) – генерирует набор тэгов HTML, описывающих меню.

Параметры полностью аналогичны вызову WriteMMC.

Внимание: генерируемый текст меню должен попасть внутрь тела документа. В примере вызов WriteMT помещен в блок:

              %>

<body>

<%

…. // здесь вызывается WriteMT

%>

</body>

<%

Замечание: текст меню может быть заключен внутрь какого-либо тэга, являющегося контейнером (например, <div>, <span>, <layer>).

 

И, наконец, меню нужно отобразить. Для этого предназначен вызов CreateRootMenu(handle,top,left,zindex), который отображает дерево меню с корнем handle, привязанное к позиции top, left. Параметр zindex отвечает за упорядочивание накладывающихся объектов и в точности соответствует параметру z-index стилей HTML (он должен быть больше максимального значения z-index всех объектов на странице, чтобы меню отображалось поверх других элементов страницы).

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

Недостатки:

  1. довольно внушительный размер сгенерированной страницы (около 15kb);
  2. меню не может работать поверх страницы, являющейся контейнером фреймов (это ограничение языка HTML);
  3. некоторые объекты (например, list-box’ы) не понимают атрибута z-index и всегда получаются на переднем плане документа, поэтому наложение меню на такой объект приводит к любопытной картине.

 

Достоинства:

  1. моим знакомым понравилось;
  2. по-моему, довольно удобно;
  3. дописать по желанию.

С тестовым вариантом можно ознакомится здесь.
С работающим применением этой конструкции можно ознакомиться на http://oivta.isa.ruleavesite.gif (131 bytes)

Исходные тексты можно получить здесь.

 
     

   
   
     
  VBNet рекомендует