SlideShare a Scribd company logo
BUILDING CUSTOM 
SECTIONS IN UMBRACO 
THE DIFFERENCES BETWEEN V6 AND V7 
4F1 F* ./ )*-#.F¥F´2* ut
WHY USE CUSTOM SECTIONS 
0./*(F. /$*).F- F$ 'F2# )F4*0F2)/F4*0-F $/*-.F/*F()  
¨ 3/ -)'©F/F$)F/# F(-*F )
TECHNOLOGY 
# F($)F$!! - ) F$)F0$'$)F0./*(F. /$*).F /2  )FyF) 
zF$.F/# F/ #)*'*4
TECHNOLOGY 
UMBRACO 6 AND EARLIER 
‡F !*-(. 
‡F
 
)0'-
FF‡F +$
TECHNOLOGY 
UMBRACO 7 
)0'-
FF‡F +$ 
‡F
 
‡F !*-(. 
 /$*).F0$'F!*-F1yF.#*0'F2*-F$)F1zF2$/#F.*( F($)*-F	 
/2 $)‡
CREATING A CUSTOM SECTION 
- /$)FF0./*(F. /$*)F$.F'(*./F$ )/$'F$)FyFFz 
- / FF'.. 
	(+' ( )/Fumbraco.interfaces.IApplication 
 *-/ F2$/# 
umbraco.businesslogic.ApplicationAttribute 
[Application(duug-customers, Customers, icon-people, 15)] 
public class Section: IApplication 
{ 
}
CREATING A CUSTOM TREE 
F/-  F+-*1$ .FF)1$/$*)F!*-F4*0-F¨ 3/ -)'©F/ 
# F.*0- F*!F/# F/F)F F)4/#$) 
F. /$*)F)F#1 F(0'/$+' F/-  .
CREATING A CUSTOM TREE 
IN UMBRACO 6 
- / FF'.. 
	)# -$/F!-*(Fumbraco.cms.presentation.Trees.BaseTree 
 *-/ F'..F2$/#Fumbraco.businesslogic.TreeAttribute
CREATING A CUSTOM TREE 
IN UMBRACO 6 
[Tree(duugcustomers, duugcustomerstree, Customers)] 
public class CustomerTree : BaseTree { 
public CustomerTree(string application) 
: base(application) 
{ 
} 
public override void RenderJS(ref StringBuilder Javascript) 
{ 
// render javascript for tree 
} 
public override void Render(ref XmlTree tree) 
{ 
// render tree items 
} 
protected override void CreateRootNode(ref XmlTreeNode rootNode) 
{ 
// create root node of tree 
} 
}
CREATING A CUSTOM TREE 
IN UMBRACO 7 
- / FF'..F¨'..F)( F.0!!$3 F2$/#F*)/-*'' -© 
	)# -$/F!-*(FUmbraco.Web.Trees.TreeController 
 *-/ F'..F2$/#Fumbraco.businesslogic.TreeAttribute 
 *-/ F'..F2$/# 
Umbraco.Web.Mvc.PluginControllerAttribute
CREATING A CUSTOM TREE 
IN UMBRACO 7 
[Tree(duug-customers, duug-customers-tree, Customers)] 
[PluginController(DUUG)] 
public class CustomerTreeController : TreeController { 
protected override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings) 
{ 
} 
protected override MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings) 
{ 
} 
}
TALK IS CHEAP. SHOW 
ME THE CODE.
$)0.F*-1'.
EDITING YOUR DATA 
*2F/#/F2 F#1 F- / F*0-F/-  F2 F2)/F/# F $/*-.F/*F F'  
/*F $/F/# F/ 
	)F(-*FyF2 F2$''F- / FF !*-(F+  
	)F(-*FzF2 F2$''F- / FF)0'-F1$ 2F¨+'$)F#/('Fá 
)0'-F*)/-*'' -©
EDITING YOUR DATA 
IN UMBRACO 6 
 /F/# F/$*)F*!F4*0-F/-  F)* F¨%.F!0)/$*)© 
	)F ) -
F( /#*F4*0F)  F- / F/# F!0)/$*) 
- / F4*0-F $/F2 !*-( 
. Fumbraco.uicontrolsF¨/1$ 2ˆF+) .ˆF+-*+ -/4+) '.© 
/*F  +F'**F)F!  'F*!F/# F ) 
'$/ F$)+0/F2$/#F‡F1'$/$*)F*)/-*'.
EDITING YOUR DATA 
IN UMBRACO 7 
 /F/# F-*0/ F!*-F4*0-F/-  F)* F¨$!F)   © 
- / F4*0-F $/*-F1$ 2 
- / F4*0-F $/*-F)0'-F*)/-*'' - 
- / ¥0+/ F+ F()$! ./ 
. F$- /$1 .F/*F  +F'**F)F!  'F*!F/# F ) 
¨0(ž+) ˆF0(ž/ˆ‡‡‡© 
'$/ F$)+0/F2$/#F)0'-F$- /$1 .
EDITING YOUR DATA 
IN UMBRACO 7 : ANGULAR EDITOR ROUTES 
# F($)F)0'-F-*0/ F/*F'*F $/*-.F$. 
/:section/:tree/:method/:id 
(-*F2$''F'*F$)F/# F1$ 2F!*-F/#$.F-*0/ F. F*) 
*)1 )/$*). 
$ 2.F2$''F F'* F!-*(‰ 
/App_Plugins/{mypackage}/BackOffice/{treetype}/{method}.html 
 1 '*+ -.F)F.+ $!4FF0./*(FRoutePathF!*-F)4F/-  F)*  
2#$#F2$''F0. F0(-*F/*F-*0/ F/*F/#/F.+ $!$F'*/$*)‡
EDITING YOUR DATA 
IN UMBRACO 7 : PACKAGE MANIFEST 
# F+ ‡()$! ./F$.FF%.*)F!$' F/#/F/ ''.F(-*F2#/F'$ )/ 
.$ F- .*0- .F/*F'*F2# )F/# F0./*(F/-  F$.F'*  
{ 
javascript : [ 
'~/App_Plugins/DUUG/scripts/customer.edit.controller.js', 
'~/App_Plugins/DUUG/scripts/customer.create.controller.js', 
'~/App_Plugins/DUUG/scripts/customer.delete.controller.js', 
'~/App_Plugins/DUUG/scripts/customer.resource.js' 
] 
}
REUSING EXISTING EDITORS 
	)F(-*FyF4*0F)F#$ 1 F/#$.F$)F. 1 -'F24.ˆF0/ 
''F!  'F'$ FF# 
	)F(-*FzF4*0F)F0. F/# Fumb-editorF$- /$1
TALK IS CHEAP. SHOW 
ME THE CODE.
$)0.F*-1'.
CREATING MENUS  DIALOGS 

 )0F$/ (.F++ -F$)F/# F*)/ 3/F( )0F*!F4*0-F/-   
)*  
#F)* F/4+ F)F#1 FF$!! - )/F*)/ 3/F( )0 
'$$)F*)FF( )0F$/ (F)F*+ )FF$'*
CREATING MENUS  DIALOGS 
IN UMBRACO 6 
F4*0-F( )0F$/ (F/*F4*0-F/-  )*  
customerNode.Menu.Add(ActionDelete.Instance); 
 !0'/F/$*).F)F F!*0)F$) 
umbraco.BusinessLogic.ActionsF)( .+  
0./*(F/$*).F)F F- / F4F$(+' ( )/$) 
umbraco.interfaces.IAction
CREATING MENUS  DIALOGS 
IN UMBRACO 6 
- / FF0. -F*)/-*'F!*-F4*0-F- / F$'* 
- / FF'..F/#/F$(+' ( )/. 
umbraco.interfaces.ITaskReturnUrl 
 $./ -F4*0-F$'*.FF/..F$) 
/umbraco/config/create/ui.xml 
nodetype alias=duugcustomerstree 
headerCustomer/header 
usercontrol/../App_Plugins/duugV6/CustomerCreateDialog.ascx/usercontrol 
tasks 
create assembly=Duug.CustomSectionV6.Core type=CustomerSection.CustomerTasks 
/create/tasks 
/nodetype
CREATING MENUS  DIALOGS 
IN UMBRACO 7 
F4*0-F( )0F$/ (F/*F4*0-F/-  )* F$)F/# FGetMenuForNode 
( /#* 
# F'$.F*!F4*0-F( )0F)* F2$''F'.*F F/# F)0'-F-*0/  
/$*) 
- / FF1$ 2F)F)0'-F*)/-*'' -F!*-F/# F$'* 
$'*.F2$''F F'* F!-*( 
/App_Plugins/{mypackage}/BackOffice/{treetype}/{action}.html
TALK IS CHEAP. SHOW 
ME THE CODE.
$)0.F*-1'.
WRAP UP 
(-*FzF0. .F*)1 )/$*).F*1 -F* ¥*)!$

More Related Content

PDF
Duug - Ttypescript
PDF
Neo Technology
PDF
Get into the FLOW with Extbase
DOCX
Alv interactive ABAPreport
PDF
South East Edmonton Industrial Leasing Opportunities 3000- 6000 Square Feet
PDF
ពុទ្ធកិច្ច ៤៥ ព្រះវស្សា
PDF
Tyler Maiman's Thesis
PDF
The A to Z of the Outernet
Duug - Ttypescript
Neo Technology
Get into the FLOW with Extbase
Alv interactive ABAPreport
South East Edmonton Industrial Leasing Opportunities 3000- 6000 Square Feet
ពុទ្ធកិច្ច ៤៥ ព្រះវស្សា
Tyler Maiman's Thesis
The A to Z of the Outernet

What's hot (18)

PDF
Anna bhaaryato
PDF
Report of the Export Group on the methodology for the people below the povert...
PDF
LAMP_TRAINING_SESSION_6
PDF
Somerville, Ma Arts at the Armory building inaccessible- state complaint Mar...
TXT
ABAP EVENTS EXAMPLE
PDF
Recetas cocina-cubana
PDF
Webinar: Online Fundraising
PDF
sertifikat bhs inggris
PDF
Alternative Asset Markets - Ilija Murisic - UBS Global Warming Index, UBS Gre...
PDF
"Internationalisation with PHP and Intl" source code
PDF
Caballo de troya de descartes, de antonio hidalgo
PDF
Image Processing on Delta Lake
PDF
Findes der millioner i velfærdsteknologi?
PDF
CAR Emails 6.7.02 (b)
PDF
Uwp Constitution 1998 Edition
PDF
Rate3
PDF
Rate4
PDF
Cysts of the jaw 10
Anna bhaaryato
Report of the Export Group on the methodology for the people below the povert...
LAMP_TRAINING_SESSION_6
Somerville, Ma Arts at the Armory building inaccessible- state complaint Mar...
ABAP EVENTS EXAMPLE
Recetas cocina-cubana
Webinar: Online Fundraising
sertifikat bhs inggris
Alternative Asset Markets - Ilija Murisic - UBS Global Warming Index, UBS Gre...
"Internationalisation with PHP and Intl" source code
Caballo de troya de descartes, de antonio hidalgo
Image Processing on Delta Lake
Findes der millioner i velfærdsteknologi?
CAR Emails 6.7.02 (b)
Uwp Constitution 1998 Edition
Rate3
Rate4
Cysts of the jaw 10
Ad

Viewers also liked (7)

PPTX
React - the origins, the present and the future
PPT
Hands On Drupal: Funny Name, Serious CMS
PDF
Driving Traffic to your Website with Paid Advertising - AMA UHD Conference
PDF
TACCM 2013 DIY Email Marketing
PDF
Trends in Communication Technology for Associations | ACCE 2013
PDF
Social Media Strategy - Presented to the Louisiana Food Processor's Conference
PDF
TACCM 2013 Web Marketing Tool Kit - Texas Association of Community College Ma...
React - the origins, the present and the future
Hands On Drupal: Funny Name, Serious CMS
Driving Traffic to your Website with Paid Advertising - AMA UHD Conference
TACCM 2013 DIY Email Marketing
Trends in Communication Technology for Associations | ACCE 2013
Social Media Strategy - Presented to the Louisiana Food Processor's Conference
TACCM 2013 Web Marketing Tool Kit - Texas Association of Community College Ma...
Ad

Similar to Building custom sections in Umbraco (20)

PDF
DUUG meetup Colours - Typescript
PPTX
pdf-road-map.pptx
PDF
Diy retailing a glimpse of the future - steve collinge
PDF
Tim Minshall Presentation For Nagano Techno Foundation 2010
PDF
Feedback gulele &shuro meda 2009
TXT
System programs in C language.
PDF
FULLTEXT01.pdf
PDF
BladeCenter Foundation For Cloud Models
PDF
ពុទ្ធកិច្ច ៤៥ ព្រះវស្សា
PDF
1 teste 5ano1
PDF
Preliminary DBA Thesis - Basic Social Math
PDF
Vampiro -a_mascara_-_compendi
PDF
The CV you'll have to compile
DOCX
Example syntax alv grid list
PDF
java-introduction.pdf
PDF
PDF
คู่มือส่วนการจัดการระบบSmss
PDF
How to Create Your Strategic Plan
PDF
T&H Credentials_May 23 (2).pdf
DUUG meetup Colours - Typescript
pdf-road-map.pptx
Diy retailing a glimpse of the future - steve collinge
Tim Minshall Presentation For Nagano Techno Foundation 2010
Feedback gulele &shuro meda 2009
System programs in C language.
FULLTEXT01.pdf
BladeCenter Foundation For Cloud Models
ពុទ្ធកិច្ច ៤៥ ព្រះវស្សា
1 teste 5ano1
Preliminary DBA Thesis - Basic Social Math
Vampiro -a_mascara_-_compendi
The CV you'll have to compile
Example syntax alv grid list
java-introduction.pdf
คู่มือส่วนการจัดการระบบSmss
How to Create Your Strategic Plan
T&H Credentials_May 23 (2).pdf

Recently uploaded (20)

PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Empathic Computing: Creating Shared Understanding
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
Big Data Technologies - Introduction.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
1. Introduction to Computer Programming.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Tartificialntelligence_presentation.pptx
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Getting Started with Data Integration: FME Form 101
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Encapsulation theory and applications.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Empathic Computing: Creating Shared Understanding
Building Integrated photovoltaic BIPV_UPV.pdf
Network Security Unit 5.pdf for BCA BBA.
“AI and Expert System Decision Support & Business Intelligence Systems”
Big Data Technologies - Introduction.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
1. Introduction to Computer Programming.pptx
MYSQL Presentation for SQL database connectivity
Tartificialntelligence_presentation.pptx
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Per capita expenditure prediction using model stacking based on satellite ima...
MIND Revenue Release Quarter 2 2025 Press Release
20250228 LYD VKU AI Blended-Learning.pptx
Getting Started with Data Integration: FME Form 101
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Encapsulation theory and applications.pdf
Assigned Numbers - 2025 - Bluetooth® Document
A comparative analysis of optical character recognition models for extracting...
SOPHOS-XG Firewall Administrator PPT.pptx

Building custom sections in Umbraco

  • 1. BUILDING CUSTOM SECTIONS IN UMBRACO THE DIFFERENCES BETWEEN V6 AND V7 4F1 F* ./ )*-#.F¥F´2* ut
  • 2. WHY USE CUSTOM SECTIONS 0./*(F. /$*).F- F$ 'F2# )F4*0F2)/F4*0-F $/*-.F/*F() ¨ 3/ -)'©F/F$)F/# F(-*F )
  • 3. TECHNOLOGY # F($)F$!! - ) F$)F0$'$)F0./*(F. /$*).F /2 )FyF) zF$.F/# F/ #)*'*4
  • 4. TECHNOLOGY UMBRACO 6 AND EARLIER ‡F !*-(. ‡F )0'- FF‡F +$
  • 5. TECHNOLOGY UMBRACO 7 )0'- FF‡F +$ ‡F ‡F !*-(. /$*).F0$'F!*-F1yF.#*0'F2*-F$)F1zF2$/#F.*( F($)*-F /2 $)‡
  • 6. CREATING A CUSTOM SECTION - /$)FF0./*(F. /$*)F$.F'(*./F$ )/$'F$)FyFFz - / FF'.. (+' ( )/Fumbraco.interfaces.IApplication *-/ F2$/# umbraco.businesslogic.ApplicationAttribute [Application(duug-customers, Customers, icon-people, 15)] public class Section: IApplication { }
  • 7. CREATING A CUSTOM TREE F/- F+-*1$ .FF)1$/$*)F!*-F4*0-F¨ 3/ -)'©F/ # F.*0- F*!F/# F/F)F F)4/#$) F. /$*)F)F#1 F(0'/$+' F/- .
  • 8. CREATING A CUSTOM TREE IN UMBRACO 6 - / FF'.. )# -$/F!-*(Fumbraco.cms.presentation.Trees.BaseTree *-/ F'..F2$/#Fumbraco.businesslogic.TreeAttribute
  • 9. CREATING A CUSTOM TREE IN UMBRACO 6 [Tree(duugcustomers, duugcustomerstree, Customers)] public class CustomerTree : BaseTree { public CustomerTree(string application) : base(application) { } public override void RenderJS(ref StringBuilder Javascript) { // render javascript for tree } public override void Render(ref XmlTree tree) { // render tree items } protected override void CreateRootNode(ref XmlTreeNode rootNode) { // create root node of tree } }
  • 10. CREATING A CUSTOM TREE IN UMBRACO 7 - / FF'..F¨'..F)( F.0!!$3 F2$/#F*)/-*'' -© )# -$/F!-*(FUmbraco.Web.Trees.TreeController *-/ F'..F2$/#Fumbraco.businesslogic.TreeAttribute *-/ F'..F2$/# Umbraco.Web.Mvc.PluginControllerAttribute
  • 11. CREATING A CUSTOM TREE IN UMBRACO 7 [Tree(duug-customers, duug-customers-tree, Customers)] [PluginController(DUUG)] public class CustomerTreeController : TreeController { protected override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings) { } protected override MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings) { } }
  • 12. TALK IS CHEAP. SHOW ME THE CODE.
  • 14. EDITING YOUR DATA *2F/#/F2 F#1 F- / F*0-F/- F2 F2)/F/# F $/*-.F/*F F' /*F $/F/# F/ )F(-*FyF2 F2$''F- / FF !*-(F+ )F(-*FzF2 F2$''F- / FF)0'-F1$ 2F¨+'$)F#/('Fá )0'-F*)/-*'' -©
  • 15. EDITING YOUR DATA IN UMBRACO 6 /F/# F/$*)F*!F4*0-F/- F)* F¨%.F!0)/$*)© )F ) - F( /#*F4*0F) F- / F/# F!0)/$*) - / F4*0-F $/F2 !*-( . Fumbraco.uicontrolsF¨/1$ 2ˆF+) .ˆF+-*+ -/4+) '.© /*F +F'**F)F! 'F*!F/# F ) '$/ F$)+0/F2$/#F‡F1'$/$*)F*)/-*'.
  • 16. EDITING YOUR DATA IN UMBRACO 7 /F/# F-*0/ F!*-F4*0-F/- F)* F¨$!F) © - / F4*0-F $/*-F1$ 2 - / F4*0-F $/*-F)0'-F*)/-*'' - - / ¥0+/ F+ F()$! ./ . F$- /$1 .F/*F +F'**F)F! 'F*!F/# F ) ¨0(ž+) ˆF0(ž/ˆ‡‡‡© '$/ F$)+0/F2$/#F)0'-F$- /$1 .
  • 17. EDITING YOUR DATA IN UMBRACO 7 : ANGULAR EDITOR ROUTES # F($)F)0'-F-*0/ F/*F'*F $/*-.F$. /:section/:tree/:method/:id (-*F2$''F'*F$)F/# F1$ 2F!*-F/#$.F-*0/ F. F*) *)1 )/$*). $ 2.F2$''F F'* F!-*(‰ /App_Plugins/{mypackage}/BackOffice/{treetype}/{method}.html 1 '*+ -.F)F.+ $!4FF0./*(FRoutePathF!*-F)4F/- F)* 2#$#F2$''F0. F0(-*F/*F-*0/ F/*F/#/F.+ $!$F'*/$*)‡
  • 18. EDITING YOUR DATA IN UMBRACO 7 : PACKAGE MANIFEST # F+ ‡()$! ./F$.FF%.*)F!$' F/#/F/ ''.F(-*F2#/F'$ )/ .$ F- .*0- .F/*F'*F2# )F/# F0./*(F/- F$.F'* { javascript : [ '~/App_Plugins/DUUG/scripts/customer.edit.controller.js', '~/App_Plugins/DUUG/scripts/customer.create.controller.js', '~/App_Plugins/DUUG/scripts/customer.delete.controller.js', '~/App_Plugins/DUUG/scripts/customer.resource.js' ] }
  • 19. REUSING EXISTING EDITORS )F(-*FyF4*0F)F#$ 1 F/#$.F$)F. 1 -'F24.ˆF0/ ''F! 'F'$ FF# )F(-*FzF4*0F)F0. F/# Fumb-editorF$- /$1
  • 20. TALK IS CHEAP. SHOW ME THE CODE.
  • 22. CREATING MENUS DIALOGS )0F$/ (.F++ -F$)F/# F*)/ 3/F( )0F*!F4*0-F/- )* #F)* F/4+ F)F#1 FF$!! - )/F*)/ 3/F( )0 '$$)F*)FF( )0F$/ (F)F*+ )FF$'*
  • 23. CREATING MENUS DIALOGS IN UMBRACO 6 F4*0-F( )0F$/ (F/*F4*0-F/- )* customerNode.Menu.Add(ActionDelete.Instance); !0'/F/$*).F)F F!*0)F$) umbraco.BusinessLogic.ActionsF)( .+ 0./*(F/$*).F)F F- / F4F$(+' ( )/$) umbraco.interfaces.IAction
  • 24. CREATING MENUS DIALOGS IN UMBRACO 6 - / FF0. -F*)/-*'F!*-F4*0-F- / F$'* - / FF'..F/#/F$(+' ( )/. umbraco.interfaces.ITaskReturnUrl $./ -F4*0-F$'*.FF/..F$) /umbraco/config/create/ui.xml nodetype alias=duugcustomerstree headerCustomer/header usercontrol/../App_Plugins/duugV6/CustomerCreateDialog.ascx/usercontrol tasks create assembly=Duug.CustomSectionV6.Core type=CustomerSection.CustomerTasks /create/tasks /nodetype
  • 25. CREATING MENUS DIALOGS IN UMBRACO 7 F4*0-F( )0F$/ (F/*F4*0-F/- )* F$)F/# FGetMenuForNode ( /#* # F'$.F*!F4*0-F( )0F)* F2$''F'.*F F/# F)0'-F-*0/ /$*) - / FF1$ 2F)F)0'-F*)/-*'' -F!*-F/# F$'* $'*.F2$''F F'* F!-*( /App_Plugins/{mypackage}/BackOffice/{treetype}/{action}.html
  • 26. TALK IS CHEAP. SHOW ME THE CODE.
  • 28. WRAP UP (-*FzF0. .F*)1 )/$*).F*1 -F* ¥*)!$
  • 29. ..F )F* -*)/ )FF )F* -.F)F2*-F/* /# - .$ -F/*F- 0. F 3$./$)F*(+*) )/. *0F*)Þ/F) F/*F FF)0'-F 3+ -/
  • 31. USEFULL LINKS (-*F*0( )//$*) $(F 4.. ).F'* ) '( $F'* 1$F- ) 'Þ.F'* *0- F* F!*-F/#$.F+- . )//$*)