powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN: вызвать компонент внутри DrawHTML другого компонента
4 сообщений из 4, страница 1 из 1
ZEN: вызвать компонент внутри DrawHTML другого компонента
    #37373958
Leviafan27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Подскажите решение вопроса:
1) Имеется компонент, в который передается несколько параметров, на основе которых возвращается нужным образом сгенерированная ссылка. Код компонента:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
Class %ZEN.Component.FBhref Extends %ZEN.Component.component
{

Property value As %ZEN.Datatype.string;

Property tag As %ZEN.Datatype.string;

Property hrefDisplay As %ZEN.Datatype.string;

Property w As %ZEN.Datatype.integer;

Property h As %ZEN.Datatype.integer;

Property hrefTitle As %ZEN.Datatype.caption;

Property refValType As %ZEN.Datatype.integer;

Property refVal As %ZEN.Datatype.integer;

Property chkR As %ZEN.Datatype.integer;

Property rightID As %ZEN.Datatype.integer;

Method %DrawHTML()
{
	if ..chkR= 0  {
		S style=""	
	} else {
		S userID=$Data(%session.Data("UID"))
		S r=..rightID
		&sql(SELECT COUNT(*) INTO :sacount FROM db.dbUsersRights WHERE userID=:userID AND rightID=' 1 ')
		&sql(SELECT COUNT(*) INTO :count FROM db.dbUsersRights WHERE userID=:userID AND rightID=:r)
		if sacount> 0  {
			S style=""
		} else {
		if count> 0  {
			S style=""
		} else {
			S style="display:none;"	
		}
	}
	}
		&html<
		<a id='#(..tag)#' href='#(..value)#' title='#(..hrefTitle)#' style='#(style)#'>#(..hrefDisplay)#</a>
        <script type='text/javascript'>
		$(document).ready(function() {
    $("##(..tag)#").fancybox({
				'width'				: '#(..w)#%',
				'height'			: '#(..h)#%',
				'autoScale'			: false,
				'transitionIn'		: 'none',
				'transitionOut'		: 'none',
				'type'				: 'iframe',
        'onClosed': function() { parent.location.reload(true); ; }  
			});
		});
	</script>>
}

}

Компонент вызывается из любой ZEN-страницы и нормально работает. Пример страницы с вызовом компонента:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Class pages.pageUser Extends %ZEN.Component.page [ LegacyInstanceContext ]
{

Property userID As %ZEN.Datatype.integer(ZENURL = "userID");

XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page>
<libHeader/>
<hgroup groupStyle="width: 100%; height: 100%;" enclosingStyle="width: 100%; height: 100%;">
<vgroup containerStyle="width: 190px; vertical-align:top; padding-left: 5px;">
<libLeftAll/>
</vgroup>
<vgroup>
	<libUserPage id="UserPage"/>	
<vgroup id="vgroup" width="40%" valign="middle" align="left"> 
<hgroup align="center">
<FBhref id="fb" tag="userRights" hrefDisplay="[Права]"
w="30" h="75" hrefTitle="Права пользователя" refValType="1"
 refVal="userID" chkR="0" rightID="2"/>
</hgroup>
</vgroup>
</vgroup>
</hgroup>
<libFooter/>
</page>
}

Method %OnDrawHTMLBody() As %Status
{
	Do %page.%SetValueById("UserPage",..userID)
	Do %page.%SetValueById("fb","popup.popupRights.cls?userID="_..userID)
	
	q $$$OK
}

}

2) Имеется другой ZEN-компонент, возвращающий код с помощью %DrawHTML. Код компонента:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Class lib.libLeft Extends %ZEN.Component.component [ LegacyInstanceContext ]
{

Method %DrawHTML()
{
	       
 if $Data(%session.Data("UID"))> 0  {
 S UID=%session.Data("UID")
 &sql(SELECT MirrorID,surname,firstname,secname
		     INTO :MirrorID,:surname,:firstname,:secname 
		     FROM db.dbUsersMain 
		     WHERE ID=:UID)
 S f=$E(firstname, 1 )
 S s=$E(secname, 1 )
 
 
 &html<<table border=' 0 ' class="t_main" width="120"><tr class="t_title"><td height="7px">#(surname)# #(f)#.#(s)#.</td>
 </tr><tr><td>
 <img src="users/#(MirrorID)#.jpg" width="45" height="60">
       <p class="small"><a href="pages.pageUser.cls?userID=#(%session.Data("UID"))#">Моя страница</a></p>
       <p class="small"><a href="pages.pageES.cls">Выход</a></p>
       </td></tr></table>>		     
 }
}
}

Как в методе DrawHTML второго компонента вызывать первый компонент, передав в него необходимые параметры, по аналогии с его вызовом из ZEN-страницы?
...
Рейтинг: 0 / 0
ZEN: вызвать компонент внутри DrawHTML другого компонента
    #37373959
Leviafan27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конкретно: нужно вставить ссылку, возвращаемую первым компонентом, между следующими строками кода второго компонента:

Код: plaintext
1.
2.
3.
       <p class="small"><a href="pages.pageUser.cls?userID=#(%session.Data("UID"))#">Моя страница</a></p>
        //здесь надо вызвать первый компонент
       <p class="small"><a href="pages.pageES.cls">Выход</a></p>
...
Рейтинг: 0 / 0
ZEN: вызвать компонент внутри DrawHTML другого компонента
    #37374241
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leviafan27 ,

Тестировал на версии 2011.2.FT1Class del.FBhref Extends %ZEN.Component.component
{

/// This is the XML namespace for this component.
Parameter NAMESPACE = " http://www.intersystems.com/zenDemo" ;

Property value As %ZEN.Datatype.string;

Property tag As %ZEN.Datatype.string;

Property hrefDisplay As %ZEN.Datatype.string;

Property hrefTitle As %ZEN.Datatype.caption;

/// The %DrawHTML method draws the initial HTML for this component.
Method %DrawHTML()
{
  &html<<a #(..%Attr("id",..tag))# #(..%Attr("href",..value))# #(..%Attr("title",..hrefTitle))#>#(..hrefDisplay)#</a>>
}

}

Class del.libLeft Extends %ZEN.Component.component
{

/// This is the XML namespace for this component.
Parameter NAMESPACE = " http://www.intersystems.com/zenDemo" ;

/// The %DrawHTML method draws the initial HTML for this component.
Method %DrawHTML()
{
  set fbHref=##class(del.FBhref).%New()
  set fbHref.tag="t2"
  set fbHref.value="#"
  set fbHref.hrefTitle="Права пользователя2"
  set fbHref.hrefDisplay="[Права2]"
  
  &html<<p><a href="#">Моя страница</a></p>>
  do fbHref.%DrawHTML()
  &html<<p><a href="#">Выход</a></p>>
}

}

Class my.test Extends %ZEN.Component.page [ DependsOn = (del.FBhref,del.libLeft) ]
{

/// Этот XML блок описывает содержимое этой страницы.
XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page
  xmlns=" http://www.intersystems.com/zen"
  xmlns:demo=" http://www.intersystems.com/zenDemo"
  title="">
  <demo:FBhref tag="t1" value="#" hrefTitle="Права пользователя1" hrefDisplay="[Права1]"/>
  <demo:libLeft/>
</page>
}

}
PS: рекомендация InterSystems ( http://docs.intersystems.com/cache20111/csp/docbook/DocBook.UI.Page.cls?KEY=GZAP_customization#GZAP_package]Package for Custom Component Classes: Important )?
...
Рейтинг: 0 / 0
ZEN: вызвать компонент внутри DrawHTML другого компонента
    #37379863
Leviafan27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, помогло.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN: вызвать компонент внутри DrawHTML другого компонента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]