Showing posts with label liferay templates. Show all posts
Showing posts with label liferay templates. Show all posts

Thursday, June 26, 2014

Liferay 6.2 Web Content AUI Carousel Structure and Template / Image Slide Show

Introduction:

Liferay have very good content management system we can design and publish content in the web page very easy.

Along with that it’s also have structures and templates feature so that we can design common designs as structures and templates then we can reuse it many places with different data.

Same design if we want uses many places with different data then we will use structures and templates.

Liferay 6.2 structure templates have very user-friendly design to create structures and templates rather than liferay 6.1

But conceptually basic idea is same for liferay 6.2 and Liferay 6.1 but way of using they make simpler in Liferay 6.2 with very good User Interface.

Liferay 6.1 we have used velocity for coding in templates but in liferay 6.2 they have used free marker templates in addition velocity while designing templates and they have given very good UI and Template editor so that we can see all variables with respect to Structure which we have used for template.


Follow above tutorial then you can understand more about Structures and Templates in liferay web content. Same thing but way of usage is different in Liferay 6.2.


Objective:

We are going to create Carousel Image Slide show in website.

We will use AUI Carousel to design image slide show in liferay and we will use Web content 
Structures and templates feature to implement Image Slide Show


Assumptions:
  • In the image slide show we have many images so we able to upload or use many images
  • We need Slide show width and Height it should be configurable.
  • We need to specify time interval to change images so it should be configurable.
  • Each slide image have hyperlink when we click it should go to respective page and links should be configurable.

To consider all above now we will design structure and template to design web content.

Steps
  1. Create Structure
  2. Create Template and associate with Respective Structure
  3. Create web content by using Template
  4. Using Web content

Before start this we need to login as Admin

Liferay have default super admin so we need to login into liferay portal by following credentials


User Name:  test@liferay.com
Password:     test


Following is login screen




Once login as Admin go to Admin >> Site Administration


Once you go to Site Administration select Content Panel there you can click on web content



Create Structure

In the web content top navigation Manu you can see manage option menu there you can select 
structure link as follows




Once click on Structures then window pop up will be launch there you can enter your structure name and description


The following is Structure Creation Screen


In the bottom of pop up window you can see User Interface Design to Design Structure as follows



We have many controls so we can use all elements and we can design. Now we already have code for Image Slide show Structure so you simply click on source and in editor use following source code.


<root available-locales="en_US" default-locale="en_US">
<dynamic-element dataType="image" fieldNamespace="wcm" indexType="keyword" name="images" readOnly="false" repeatable="true" required="false" showLabel="true" type="wcm-image" width="">
<dynamic-element dataType="link-to-page" fieldNamespace="ddm" indexType="keyword" name="imagelink" readOnly="false" repeatable="false" required="false" showLabel="true" type="ddm-link-to-page" width="small">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Link to Page]]>
</entry>
<entry name="predefinedValue">
<![CDATA[]]>
</entry>
<entry name="tip">
<![CDATA[]]>
</entry>
</meta-data>
</dynamic-element>
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Image]]>
</entry>
<entry name="predefinedValue">
<![CDATA[]]>
</entry>
<entry name="tip">
<![CDATA[]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element dataType="number" fieldNamespace="ddm" indexType="keyword" name="containerwidth" readOnly="false" repeatable="false" required="false" showLabel="true" type="ddm-number" width="small">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Container Width]]>
</entry>
<entry name="predefinedValue">
<![CDATA[]]>
</entry>
<entry name="tip">
<![CDATA[]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element dataType="number" fieldNamespace="ddm" indexType="keyword" name="containerhight" readOnly="false" repeatable="false" required="false" showLabel="true" type="ddm-number" width="small">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Container Hight]]>
</entry>
<entry name="predefinedValue">
<![CDATA[]]>
</entry>
<entry name="tip">
<![CDATA[]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element dataType="number" fieldNamespace="ddm" indexType="keyword" name="intervaltime" readOnly="false" repeatable="false" required="false" showLabel="true" type="ddm-number" width="small">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Interval Time]]>
</entry>
<entry name="predefinedValue">
<![CDATA[]]>
</entry>
<entry name="tip">
<![CDATA[]]>
</entry>
</meta-data>
</dynamic-element>
</root>

The following screen after use source in editor



The following is Graphical view of Structure



Finally click on save button then your structure will be created


Finally close pop up window and go back to Web content Manage Screen

Create Template and associate with Respective Structure

Now we need create template and it will use above created structure. In the web content screen top navigation goes manage option menu there you can find Templates Link



Once we click on template then pop window will be open there we can see +Add to create new template.

Now we need to fill the name and description along with that we need select respective structure. In our case we already create structure i.e. Image Slide Show Structure we need to select that.

We already know we are using free market template so we need to select Language as Free Marker (ftl) and its default language, apart from that we can use velocity and XSLT



In the bottom of pop up you can see Template editor and its respective Structure variables /fields and other available variables was shown in left side.

In the structure we have used some fields all fields you can see left side as follows



We already have Free Marker Template code for Image Slide Show please use following code in Editor and save then template will be created.


<script>
AUI({ filter: 'raw' }).use('aui-carousel', function(A) {
new A.Carousel({
intervalTime:${intervaltime.getData()},
contentBox: '#myCarousel',
activeIndex:0,
height:${containerhight.getData()},
width:${containerwidth.getData()}
}).render();

});
</script>
<#if images.getSiblings()?has_content>
<div id="myCarousel">
<#list images.getSiblings() as cur_images>

<#if cur_images_index==0>
<a href="${cur_images.imagelink.getData()}">
<div class="carousel-item" style="background: url(${cur_images.getData()})width:${containerwidth.getData()}px; height:${containerhight.getData()}px;" class="carousel-item carousel-item-active";">
</div>
</a>
</#if>
<a href="${cur_images.imagelink.getData()}"> <div class="carousel-item" style="background: url(${cur_images.getData()});width:${containerwidth.getData()}px; height:${containerhight.getData()}px;" class="carousel-item""></div></a>
</#list>

</div>
</#if>



In the Template Design we use html and AUI Script to design template. And we will use stricture variable or fields to fill with dynamic content. These all design was made using Free Market Templates (FTL)

However use above template code in editor and finally save it then template will be create and it will be associated with one structure that is we created previously.

Note:

When we click in fields and variables in left side those will be added in the editor automatically where your cursor point in the editor. Templates editor is every flexible to code or design free marker templates in editor.

Each template should be associated with one structure and based in structure we need to code free market template to use structure variables and based on template design we will get input elements to design web content with dynamic data.

The following free marker template code in editor




Now finally save then your template will be created and it will be in the templates list as follows.



Now close pop up window and go back to web content screen.

Create web content by using Template

Well we are ready with Template and Structure and we will create web content using above template.

In the web content screen you can see +Add button option menu in the top navigation there you can see newly created template name that is Image Slide Show Template


Now you will get web content creation screen with selected template. We need to fill name for web content.

Based on template we need to fill the content and in our scenario we are using images element as repeatable so we can add more images by click + icon apposite to images file input element.

And we are using Height, Width and Interval we need to fill those values and it should be numbers and we can also select hyper link for each image


Once we fill the content in the web content template finally click on publish button then content will be available to use and it will be shown in web content list.


Using Web Content

We have done all steps now the content will be available to use. We will use web content display portlet to display web content in the pages.

Navigate to desirable page where you simply drag and drop web content display portlet in the page.

In the admin mode you can see left side + Icon click on the you can get the toggle there in the applications tab you can select Web content Display Portlet simply click on Add Link then blank web content display portlet will be added to page.


In the blank web content display portlet you can see toggle control in the bottom.


You can click on Select Web content there you can see list of web content articles.



You can select and click on respective web content and finally save it then web content will be displayed in portlet.


For better look and feel remove border for portlet then you can see image slide show as follows.


When we login as admin bottom of web content display portlet you can see edit controls to edit content and template. We can add more images, change height, width of slide show and we change slide interval time.


Download Image Slide Show Structure and Template Source 


Environment:

Liferay IDE 2.x+Eclipse (Kepler) +Liferay Plugins SDK 6.2+Tomcat 7.x Liferay Portal Bundle

Deployment and its Working.

You can source code in the template and Structure as said above in your portal.

I also given web content export file as lar. You simply drag and drop web content display portlet in the portlet configuration you can see export/import option and import downloaded lar file using file browses then web content will be created in your portal.

When we import lar file respective used template and structure will be created automatically.

Related Links



Author

Monday, March 10, 2014

Introduction to Liferay Structures and Templates

Introduction:

Structures and Templates is elegant feature in liferay web content management system. When we design web content some time we need same type of design in several places. Whenever we need such type of design and data multiple times in the web content then we will make that design as template.

Whenever we need in web content simple we will select template and we will fill with data then we can see new web content with fresh data.

Liferay have implemented this concept with two key points
  1. Structure
  2. Template

Structure:

Structure is simple xml data source which will provide dynamic data to template. This will decide what kind of data you need and what is the data design.

Let us assume I want to display image, when I want display image I need image source, width and height. So here our structure will provide required data to display image. Each time we will fill dynamic data in this structure.

Here structure is like skeleton of our body. Here skeleton have skull, chest and so on.

Note:

 Here skeleton structure may be same but for each human there is different appearance we can get different appearance based on the things we filled in skeleton.

Template:

Template will decide look and feel for structure. We can append multiple look and feel design for one structure.

We can develop template in different ways and we can use Velocity and XSLT.

Note:

Simple assume each human appearance is different even though every human skeleton structure is same.

In single word we can say structure will decide what kind of data we are going to use and template will decide look and feel for data.

Well we understand what is structure and template.

Liferay WCM management system has User Interface to create structures and templates so that we can use that to design web content with structures and templates.

When we design structure we have many options to input the data like we have text box, text, document and media and image.

We can say structure is simple xml tags which consist of predefined tags according to DTD.

Example for simple structure

<?xml version="1.0"?>
<root>
<dynamic-element name="image" type="document_library" index-type="" repeatable="false"/>
<dynamic-element name="width" type="text" index-type="" repeatable="false"/>
<dynamic-element name="height" type="text" index-type="" repeatable="false"/>
</root>

Structure View in Liferay Web content Portlet



Note:

When you see the type it will have different types (document_library,text ..)

Use Structure data in Velocity Template


<h1> simple WCM with Sturcures and Templates</h1>
<img src="$image.getData()" width="$width.getData()" height="$height.getData()"/>



Note:

Here we use getData() method on each element name to get the input data for element and in the velocity each variable start with $ symbol.


If the structure have following element

<?xml version="1.0"?>
<root>
<dynamic-element name="title" type="text" index-type="" repeatable="false"/>
</root>

Then get the title value in  templates as follows

<h1>$title.getData() </h1>




Important points:

When we design structure we have different types of elements like text, document-media, image and many

Example:


 We have option called element repeatable when we enable repeatable then we can use same element for multiples times

Example:

Assume I am going to design slide show then I may need multiple images for sidle show then I will use repeatable option for element.


In the structure we can use different levels for elements for parent element means we can define child elements.

Example:

Assume I want display image then image have some properties like width and height then we can design structure so that I will use width and height properties as child element to the image element i.e.  we can say parent element

The following is example structure with child elements



Xml Structure code for Parent and Childs

<?xml version="1.0"?>
<root>
<dynamic-element name="image" type="image" index-type="" repeatable="false">
 <dynamic-element name="height" type="text" index-type=""   repeatable="false"></dynamic-element>
 <dynamic-element name="width" type="text" index-type="" repeatable="false"/>
</dynamic-element>
</root>

Access data in Velocity (VM) Template

Get child element data

Get root element data

$image.getData()

Get image element child element

$image.height.getData()

$image.width.getData()


The final template to display Image

<img src="$image.getData()" width="$image.height.getData()" height="$image. width.getData()" alt="No Image"/>


We already know each element have repeatable option then we can add multiple data example assume I want display multiple images 

Repeatable feature



In the above image element will be repeatable so that we can add multiple images and when we use repeatable for root tag then subsequent Childs also repeated.

The following is Structure XML

<?xml version="1.0"?>
<root>
<dynamic-element name="image" type="image" index-type="" repeatable="true">
                        <dynamic-element name="height" type="text" index-type="" repeatable="false"></dynamic-element>
                        <dynamic-element name="width" type="text" index-type="" repeatable="false"/>
</dynamic-element>
</root>

When the element have repeatable feature then we will use some methods in Velocity template to access structure data


The following method  give all image elements means it collected all same level repeatable elements

$image.getSiblings()

Iterate All image elements

#foreach($currentElement in $image.getSiblings())
##write code here
#end


The following is complete Velocity Templates to display all Images


#foreach($currentImage in $image.getSiblings())

<img src="$currentImage.getData()" width="$currentImage.height.getData()" height="$currentImage. width.getData()" alt="No Image"/>

#end


When we design velocity template we can use all HTML tags and css styles to make better look and feel

The following is example

<style>
#image-container{
padding-left:10px;
font-size: 12px;
font-family: "Myriad Pro","Verdana","Arial","sans-serif";
font-size: small;
color: gray;
}
#image-container list{
list-style:none;
border:1px solid red;
}

</style>

<div "image- container " >
<ul>
#foreach($currentImage in $image.getSiblings())
<li><img src="$currentImage.getData()" width="$ currentImage.height.getData()" height="$ currentImage. width.getData()" alt="No Image"/>
</li>
#end
</ul>
<div>


The final out line


Access Structure data for elements

$elementName.getData()

Access Child element of  parent element

$parentElementName.ChidElementName.getData()

Get All siblings like when we use repeatable to element

$elementName.getSiblings()

Iterate Elements

#foreach($currentElement in $elementName.getSiblings())

##access data of current data
$currentImage.getData()

##access data of child element
$ currentElement.childElementName.getData()

#end



Use HTML and CSS in Templates

We can also use CSS styles in velocity templates so that we can give better look and feel for content.

We can use all HTML tags in velocity templates

Example Velocity Templates that contains CSS styles and HTML

<style>
#image-container{
padding-left:10px;
font-size: 12px;
font-family: "Myriad Pro","Verdana","Arial","sans-serif";
font-size: small;
color: gray;
}
#image-container list{
list-style:none;
border:1px solid red;
}

</style>

<div "image- container " >
<ul>
#foreach($currentImage in $docdowloadlinks.getSiblings())
<li><img src="$currentImage.getData()" width="$currentImage.height.getData()" height="$ currentImage. width.getData()" alt="No Image"/>
</li>
#end
</ul>
<div>

We can use styles in following ways

Tag level CSS as follows

<li><img src="$currentImage.getData()" width="$currentImage.height.getData()" height="$currentImage. width.getData()" alt="No Image" style=”border:1px solid red;”/>


Use style tag in Template

<style>
##write your styles here
</style>
<div "image- container " >
<ul>
#foreach($currentImage in $docdowloadlinks.getSiblings())
<li><img src="$currentImage.getData()" width="$currentImage.height.getData()" height="$currentImage.width.getData()" alt="No Image"/>
</li>
#end
</ul>
<div>

Use CSS link tag to load CSS

<link rel="stylesheet" type="text/css" href="/themeName/html/css/theme.css">

You can also directly use Liferay Theme level CSS classes


<div class=”custom-div”>$title.getData() </div>

Note:

We generally  define custom-div class CSS in theme custom.css file

Example:

. custom-div{
color:red;
border:1px solid red;
}


Use Java Script in Templates

We can also use java script in velocity template to perform some action or events/effects to the data.

Liferay have inbuilt Java Script library i.e. AUI so we can directly use. Simple we will use AUI use method to load required modules so that we can write java script

Whenever we write java script we will use <script> tag to place java script in templates.
Example As follows

Assume I want make alert message when I click on image

<script>
AUI().use('aui-base',function(A){
A.one("#myTemplateImage").on('click',function(){
 alert("Hi You have clicked on Template Image");
});
});
</script>
<div "image- container " >
<img src="$image.getData()" width="$image.height.getData()" height="$image. width.getData()" alt="No Image" id=”myTemplateImage”/>
<div>

We can also Load script form script src tag as follows

Assume I want use JQuery Script in Velocity Template


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> </script>
<script>
$(document).ready(function(){
  $("#myTemplateImage ").click(function(){
  alert("Hi You have clicked on Template Image");
  });
});
</script>
<div "image- container " >
<img src="$image.getData()" width="$image.height.getData()" height="$image. width.getData()" alt="No Image" id=”myTemplateImage”/>
<div>

Use Structures and Templates in Liferay WCM

Login as Admin and go to control panel there we can web content link in lift side panel

Create Structure

Click Structure Button and give name and description
In the structure screen you can find launch editor option select that and place following xml in editor then update.

<?xml version="1.0"?>
<root>
<dynamic-element name="image" type="image" index-type="" repeatable="true">
                        <dynamic-element name="height" type="text" index-type="" repeatable="false"></dynamic-element>
                        <dynamic-element name="width" type="text" index-type="" repeatable="false"/>
</dynamic-element>
</root>

Once you add above xml then save the structure using save button

Create Velocity Template For Structure

Now create Template using add template button enterer template name and description.

Now select required Structure using Select structure button

Now click on launch editor button and place the following velocity code in editor then click on update finally save the template.

<div "image- container " >
<ul>
#foreach($currentImage in $docdowloadlinks.getSiblings())
<li><img src="$currentImage.getData()" width="$currentImage.height.getData()" height="$currentImage. width.getData()" alt="No Image"/>
</li>
#end
</ul>
<div>

Create Web content Using Structures and Templates

Now create new web content for this click on Web content tag and select add button there you can see your template then select template

Once you select template then it will ask web content name and then based on your structure you need fill data in input fields finally save web content.

Using Web content

Now we have done all we can use that web content on web content display portlet to display images.

Note:

Whenever we need same template with different data or images then simple create another web content article so that you can see new web content with different images.

Author

Recent Posts

Recent Posts Widget

Popular Posts