Double the number of visits to your site with Liferay 5.2

Company Blogs 13 de noviembre de 2009 Por Jorge Ferrer Staff

Here I am once again, I still don't blog as much as I would like too but there are so many things happening around Liferay that it's hard to sit down and write. Our office in Madrid keeps growing with more customers, partners and new hires, we open new offices around the world, Gartner seems to like us even more every year :) and of course we have the Symposiums... 3 in a row this year in US (West Coast), Germany and India!

For the last few weeks I've been wanting to blog about one of the talks given by one of our customers during the European Symposium. Out of all the good calks during the event the one presented by Mark De Lange, from Reed Business. Among other things, Mark presented some numbers about the growth in number of visits that their Liferay based sites had experienced since they upgraded from 5.1 to 5.2. Their sites are fed mainly from search engine searches and their statistics showed that the visits had already doubled after they had very recently updated to 5.2. I visited Mark a couple of weeks after the retreat and he told me that their new statistics were showing an even larger increase in the number of visits and it seemed to be still growing. Here are some numbers from their presentations:

Of course, this is not a coincidence. While Liferay 5.1 already had several features to improve Search Engine Optimization (SEO), version 5.2 has included quite a few new improvements in terms of SEO that makes this task much easier or even automatic for sites with lots of dynamic content. Reed Business was in fact an sponsor for many of these features. Here is an screenshot from their presentation showing some of the mentioned improvements in one of their sites, www.construarea.com:

Here is a summary of all the main features added in 5.2:

  • Friendlier URLs by default: Now the friendly URLs generated for pages, communities and organizations will be based by default in its names. No more friendly URLs with numbers!
  • Automatic generation of META tags in Asset Publisher:
    • Keywords: Whenever a content is being shown its categories and tags will be added to the keyworkds meta tag.
    • Description: Whenever a content is being shown its description will be added to the keyworkds meta tag.
  • Unique titles for all pages: The title now has information about the portal, the community/org, the page and the portlet. Note that this has required a change to the default themes, custom themes will need to be updated accordingly.
  • Framework to set the title and meta tags values from custom portlets
  • Friendly URLs in Asset Publisher when viewing an specific asset (for assets that support it)

And here is a complete description of the SEO features provided by Liferay in the form of a wiki article:

http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Search+Engine+Optimization

Liferay visits Mallorca

Company Blogs 17 de septiembre de 2009 Por Jorge Ferrer Staff

Mallorca is one of those places in the world that you have to visit. Like most places next to the the sea it provides a sense of calm that is very appreciated when you come from the busy Madrid. I had the pleasure of being there last week thanks to an invitation by one of our partners, IN2, who had organized an event about "Mission Critical Open Source Platforms".

My talk was about Liferay Portal 5.2 and I made a demo showing how to build a multi-site portal using a organizations to achieve hierarchical delegation of the administration activities. I also showed the Control Panel, tags, web content, scheduling, ...

Out of all the presentations, the one I enjoyed most was done by Jose Carrasco, from IN2 (in the picture below), who went through quite a few case studies of Liferay Portal installations in mission critical environments with strict high availability requirements.

Some of the case studies presented were:

  • CASS - Caixa Andorrana Seguretat Social
  • Área Metropolitana de Barcelona
  • Agencia Tributaria Catalana
  • Departamento de Bienestar - Generalitat de Catalunya
  • Departamento de nuevas tecnologías-  Generalitat de Catalunya

I also had the pleasure to meet some of the engineers from IN2 who had worked in these projects:

 

After all the presentations were finished, we had some time for a snack in the beautiful gardens within the building.

This is one of the parts that I enjoy most about this type of events, being able to chat with real users of Liferay as well as people who are considering to start using it. This is when you learn what they like most about the platform and also to ask for feedback about what we can improve in future versions. The event was very succesful which gave me a chance to have many very interesting conversations.

After lunch we still had some short time to walk around downtown. I must say that while I had seen the cathedral before, this time it seemed to me even more beautiful (I have a huge respect for all gothic cathedrals since I read Ken Follet's "The Pillars of Earth"):

And this was the view just turning around 90º:

Feeling like going to Mallorca?

After the success of this event I'm really looking forward to meeting so many new people and old friends at the European Symposium in a couple of weeks. See you there!

 

Using the JSON service APIs to reduce the need for page refreshes

Company Blogs 10 de julio de 2009 Por Jorge Ferrer Staff

We've been working in the last few days with our partner VASS defining the best design for a very large customer who had the requirement of avoiding full page reloads when the users interact with a given application.

The team at VASS had already decided to use Service Builder to save time developing the persistance layer and was looking for the best way to implement the frontend of the application. In this situation using the JSON API that is automatically generated for Service Builder is a perfect solution. It provides a ready-to-use JavaScript API that you can use as if it was local to the browser and it handles all the AJAX calls and serialization and deserialization. The implementation is in the server which allows you to use the full power of Java and associated technologies to implement any business requirement needed.

For those who have heard about DWR, this follows a similar strategy but if you are already using Service Builder everything is done for you and you just have to use the js API.

While thinking about this we realized that this is one of those little gems that Liferay has that is not very well known because it's not properly documented. So we decided to change that and let the world know about it. As an introduction here is a quick example.

Assuming you have the following method in the remote service:

public class ReportsEntryServiceImpl extends ReportsEntryServiceBaseImpl {
    public void print(String msg) {
        System.out.println("ReportsEntryService: " + msg);
    }
    ....
}

The method could be invoked from a JSP using the following method (to make it simpler we are linking to the js file directly):

<script src="/html/js/liferay/ext_service.js" language="JavaScript"> </script>

<script language="JavaScript">
    Liferay.Service.Reports.ReportsEntry.print(
        {
            msg: "Invoking a Liferay service via JavaScript",
        },
        function(message) {
            var exception = message.exception;

            if (!exception) {
                // Process Success
            }
            else {
                // Process Exception
            }
        }
    );
</script>

For more detailed information check the new wiki article: JSON Service API

Have fun!

 

 

New in Liferay 5.2: Support for many independent message boards, blogs, wiki, ... per community

Company Blogs 20 de febrero de 2009 Por Jorge Ferrer Staff

As most readers will probably know, one of the most powerful characteristics of Liferay's portlets is the fact that when they are added to different communities or organizations (whenever I use the word community from now on it also applies to organizations) they act as completely independent portlets, each with it's own data. For example, if you have two communities, one called "Soccer lovers" and another one called "Soccer haters", which have the message boards portlet added to their pages, each of them will effectively have their own independent forum. As you can guess from this example that's very important because otherwise the results would be unpredictable. The following diagram shows how the data from each forum is stored separately in the database:



This is one of the reasons why many people use Liferay's tools instead of specific purpose tools, because that way a single installation can hold tens, hundreeths or even thousands of forums, blogs, wikis, etc. One per community of the system. But apparently many people thought that wasn't enough and they started asking for the ability to have several independent instances of those tools per community.

That's one of the things I love about Open Source, there is always people pushing you to go one step further. Not only that, but sometimes one community member not only asks for the functionality but steps ahead and offers to help. In this case, that community member was [url=http://www.liferay.com/web/jesperw/profile]Jesper[/url] and the people from Kanal5. Jesper discussed with us the best approach to implement this possibility and some time later provided a working implementation for it. From there on Brian and I worked on some improvements but most of the hard work has already done. Thanks a lot Jesper!

Back to the functionality, it works by allowing each community to have several scopes of data. 'scope' is just the term we've decided to use to mean a set of data (for example forum categories and threads) that is isolated from other data of the same portlet. Any community has a default scope (what Liferay already had in all versions prior to 5.1) and it's also possible to create [b]an additional scope per page[/b] (either public or private).

Let's use the message boards portlet again as an example to explain how to create an additional scope. When the portlet is added to any page of the "Soccer lovers" community it will use the default scope. If they add the portlet to a second page, it will show the same data as in the first page (see note 1) To make this portlet use a different data scope you have to follow this simple steps:

1) Go to the configuration of the portlet
2) Click the tab called scoping
3) Using the select box choose "Current page (forum)" and save
4) Go back and use the portlet to add any data that will now be specific to this page.


Repeat for as many pages as desired, with any portlet that supports scoping. All of Liferay's core portlets where it makes sense to use this feature have been modified to support it. Furthermore, it's been implemented in a way that it's quite easy to add support for it for custom portlets too (I can write another blog entry about how to do it if there is enough interest).

That's it, enjoy the feature and I hope you like it.


Note 1: We've decided to keep the previous behavior so that any portlet added uses the default scope of the community. This way if you don't need more than one scope per community (which we think is going to be the most common case) things just work as they've always worked. If you do need several scopes you just have to follow a few extra steps as outlined above.

Liferay Portal v5.2 is out, why is everybody so excited?

Company Blogs 4 de febrero de 2009 Por Jorge Ferrer Staff

The new release of Liferay Portal is out and I think this is its best release ever. All of us who have been working hard within Liferay and the community to get it out are super excited, everybody we show it too also gets excited, and what is more important, the feedback from the very early adopters has been awesome. What is so special about this release?

I think one of the key aspects of v5.2 is that has improvements in may different aspects including lots of new functionalities, new and improved plugins, significant speed improvements, better packaging and improved usability, specially in the administration UI.

Ok, enough bragging, let's get to the details.

New features and improvements

The administration UI has been completely redesigned, not only with the introduction of the Control Panel, mentioned later, but also with a redesign of the individual administration tools. The main goals of this redesign were:

  • Usability: do more quicker, more intuitively and in less clicks.
  • Adaptability: adapt it to your own needs. For example you can now define your own types of organizations, such as Department, Customer, School, etc.
  • Extensibility: previously if you needed, for example, a very custom user profile you had to build your own tool. Now you can define custom attributes by using the UI and perform any changes desired by adding JSP-based templates.

But this is just the tip of the iceberg. Some other very significant additions are:

  • Support for taxonomies: create your own tree of categories and assign them to web content, wiki articles or your custom portlets. Includes support for multiple vocabularies
  • Improvements to the web content management system
  • Microsoft Office Integration with the Document Library
  • Support for inheritance of web content structures
  • Support for having many independent message boards, blogs, wikis, document libraries, ... per community or organization.
  • Siteminder SSO integration
  • Restricted permission search: the results from a search will now exclude any entries that the user does not have the rights to view.
  • Export of published web contents to PDF, DOC, TXT and RTF.
  • Improved translations: Liferay Portal v5.2 comes with the most polished translations ever, thanks to the awesome work of the Liferay Translation Team.

New and improved plugins

The list of officially supported plugins keeps increasing, and this release contains significant improvements to the ones available and introduces several new ones. The most significants are:

  • Chat portlet improvements:


     
  • New WSRP implementation thanks to our friends from SUN
  • Knowledge Base
  • Wiki Navigation portlets
  • Web Form configuration: the Web Form is now available as a plugin and comes with a much improved configuration UI including drag & drop to reorder fields:
  • New Mail portlet
  • Private message portlet

 

Note: Several of these plugins are included out of the box in the new bundles and all of them will be available in the next few days in Liferay's official plugins page.

Speed and scalability improvements

On the front end there have been lots of speed improvements that provide a much faster user experience. You can read more about them in Nate's and Eduardo's blog posts.

On the back end side v5.2 includes support for distributed read /write operations between two separate applications which provides support for massively scaled installations. Also data-bound applications will benefit from increased database throughput. Finally v5.2 provides terracota DSO integration.

Better packaging

  • Improved structure: the structure of the bundle has been significantly improved so that it's completely selfcontained (including its data) and thus makes life easier for administrators. It also comes with a readme file with information to get started quickly.
  • Sample data: When you first run the bundle the database is populated with a sample portal (The portal of a ficticious company called 7 Cogs)  that showcases many of Liferay Portal's functionalities and those of the bundled plugins. That way it's much easier to understand the new features and the most common usage patterns for Liferay. Check it out and let us know what you think.
    Important note: if you have an existing database don't point the bundle to it since it will substitute your data with the sample data. Check the readme file for more information on how to remove the sample data.

     

Improved usability

The most significant changes in usability are:

  • Control Panel: all the administration tools have been unified into the Control Panel. Through this UI users can administer the whole portal with ease regardless of whether they have 1 single community or website or they have thousands. The Control Panel includes tools for managing contents, portal users, orgs, roles, ... and the server itself. Also it's very extensible so that you can add your own tools to it.
  • User Administration: streamlined profile form with an intuitive organization of fields that can be navigated without refreshing the page. It also allows administrating all the organizations, communities or roles a user is assigned within the same form (see image below):

     
  • Permissions assignment: assigning permissions for a specific entity such as a blog entry has a brand new UI which is much easier to understand and use. (see image below):

     
  • Usage of UniForm for more usable forms: if you were able to attend Nate's talk in Liferay's Symposium in Frankfurt last year you know how the usability of forms can be improved following certain rules. These rules have already been applied to Liferay's portal administration forms.

You can read more about this and other new features in the page: New Features in Liferay Portal 5.2. And we surely hope you also get as excited as we are :)

New in Liferay: The Control Panel, an administration UI to rule them all

Company Blogs 16 de diciembre de 2008 Por Jorge Ferrer Staff

If you've been working with Liferay for a while this is probably an improvement that you will be excited about. If you are new to Liferay then this is a change you'll be even more excited about. So, what is it? In a few words it's a UI that allows administrating the complete portal, from 1 community to thousands of them, from users and organizations to documents, images, articles, ... all together in one single place.

Goals

The whole process of developing the Control Panel started around a year ago when we started to find solutions to some of the issues people where finding when administering very simple or very complex portals. Also, we wanted to use it as a way to teach people about the possibilities of Liferay. The goals of the Control Panel where:

  • To provide a preconfigured UI with all the administration tools provided by Liferay.
  • To allow for automatic delegation of administration. For example, if a user is assigned the Organization Admin role he should be able to administer that organization automatically.
  • To add support for disabling those parts of the administration not being used in a given installation. For example, if you don't use User Groups you should be able to hide that option.
  • To Support adding custom administration tools in a consistent and integrated way.
  • To provide an easy to use UI for portal installations having only 1 or a few websites, but also valid for installations with hundreths or thousands of websites.

And I'm happy to say that we've been able to achieve all of these goals and even implement some other ideas we came up with during the process. You want to see how it ended up like? Here are some screenshots to get you started:

My Account - Every user will have access to the Control Panel and will have at least access to edit his account details

Polls - From the Control Panel you can edit any type of content that might be published through community or organization pages. For example poll questions.

Users - And of course you can manage the users of the portal. The users than an administrator can manage are filtered by his permissions.

 

Server - This section allows checking system resources and perform server administration actions.

Do you like it? keep reading to find out more about how it works.

How it works

All users will have access to the Control Panel by following a link in the top right menu (aka the dock). Once accessed the left menu of the Control Panel will automatically show only the sections that make sense based on the permissions of the user. The bar minimum would be to show the ability to edit his account details.

For the portal administrator all four sections of the menu will be shown:

  • Personal section: provides accessign to edit account details and to manage personal pages.
  • Content: provides access to manage all types of contents: web content (aka Journal), documents, images, blogs etc. (even including content from custom portlets). Since in Liferay all content must belong to a community or an organization, whenever the administration selects a tool to manage content the title of the Control panel shows for which community/org he's administering the content (by default the one you came from) and allows him to select a different one. This way if only have one community (or can only administer one) the UI will be very simple, but if you have many you still have a fast way to move around them.
  • Portal: provides access to manage users, organizations, communities, ... and all portal wide elements.
  • Server: provides access to server related administration tasks, such as checking the memory usage, installing plugins, etc.

Now the cool thing is that as a developer you can actually decide which of the items on the left menu are shown. In fact each of those items is a portlet, so all you have to do is to disable the portlet you don't want to be shown either through the UI (Plugins Configuration in the left menu) or through the liferay-portlet-ext.xml file.

Furthermore you can add any custom portlet to the desired place in that menu and make it part of the Control Panel!! We will add all the details soon in the wiki but in short you just need to add a few new elements in the liferay-portlet.xml file that would look similar to this:

        <control-panel-entry-category>portal</control-panel-entry-category>
        <control-panel-entry-weight>1.0</control-panel-entry-weight>
        <control-panel-entry-class>com.liferay.portlet.enterpriseadmin.UsersControlPanelEntry</control-panel-entry-class>

The first element determines to which section of the menu will the portlet be added, the second one determines the position and the last one is optonal and allows deciding under which conditions the item will be shown or not.

Availability and next steps

The Control Panel is already available in our source control repository and will be availabled packed in the upcoming Liferay v5.2. Also for enterprises needing long term support it will be available in Liferay v5.3 which will be our next LTS release.

As you may have identified in the screenshots above, besides the development of the development of the Control Panel itself we've also added many other improvements to several specific administration tools. For example the user administration has been completely redesigned to allow for a much faster and more usable administration. For example, now when editing a user it's possible to see and change it's roles, communities, organizations and user groups along with all other user details. Also you can change all his details and save them at one time. Other cool features are the custom attributes, permissions assignements, reminder queries, improvements to roles and to login configuration,etc. We'll be blogging and writting wiki entries about all of these in the next days.

And, of course, we are already thinking about how to improve the Control Panel even further. As soon as we release 5.2 we'll start working the make it even better for 5.3. And for that we need your help, we'd love to hear what you think about the Control Panel (both the good and the bad) and specially keep coming the ideas about how to improve it.

Finally, I'd like to send a special thanks to Julio, Nate and Ray who did an amazing job to make the Control Panel a reality. Also to everyone else that helped during development and providing feedback. Thanks guys, you rock! emoticon

Liferay Developer Mode: optimizing Liferay for development

Company Blogs 11 de diciembre de 2008 Por Jorge Ferrer Staff

It's been a very long time since my last post but I promise I'll make up for it with a series of posts about the latest features we've been working on for the next releases of Liferay Portal. But first, I want to blog about a topic that I think will be of a lot of interest for Portal developers: how to optimize Liferay to make development faster.

In other words how to put Liferay in what we might call a "developer mode". What would this mode do?

  • Disable all caches to reduce the need to reboot after making changes to CSS files, JavaScript files, Velocity templates in themes and Journal, etc.
  • Increase the amount of information output in case of error (very limited for now)
  • Disable features meant for production servers or evaluators

How have we achieved this? In a very simple and extensible way, by creating a new configuration file called portal-developer.properties. In order to turn on the developer mode you just have to modify the installation of Liferay you use for development to make sure the new file is loaded. The exact instructions and more details about what are its effects can be found in the wiki article Liferay Developer Mode

I've been working in this mode for several weeks now and it really makes a developer's life much easier :) But still I think this is just the beginning there are probably more optimizations we can do to this mode. So if you know of an existing property in portal.properties that should have a different value than the default during developer let me know and I'll add it. Also, if you can think of a new property that we could create to switch on or off certain behavior I'm all ears :)

New in 5.1: Much more flexible default configuration for personal user pages

Company Blogs 20 de julio de 2008 Por Jorge Ferrer Staff

Many of you probably already know how it's possible to preconfigure the personal pages of users by using some properties of the portal.properties file:

default.user.private.layout.template.id=2_columns_ii
default.user.private.layout.column-1=71_INSTANCE_OY0d,82,23,61
default.user.private.layout.column-2=11,29,8,19

Some versions ago Ray also added the possibility of specifying a LAR file, which increased the flexibility considerably as now you could create as many pages as desired and also include default contents.

But there was still a limitation, all users had the same default configuration. Not any more. In Liferay 5.1 it's possible to apply different page configurations to different types of users. Furthermore, such configurations can be applied dynamically during the life of the portal.

To learn more about this new functionality read the wiki article How to use User Group Page Templates.

Liferay eats its own dog food again! Now with a wiki taste

Company Blogs 16 de julio de 2008 Por Jorge Ferrer Staff

Yes, we've finally done it!! Liferay's community wiki has been migrated from MediaWiki to Liferay's own wiki portlet.

We are pretty excited about this because it brings a lot of benefits. To name a few:

  • The wiki is now fully integrated in the liferay.com website, so it's easier for community members to navigate through all the sources of information. For example, visitors that are directed to the wiki from Google can also navigate easily to the official documentation, forums, etc.
  • The wiki now generates activities, which then show in the the profile page of each user. That way if you are an active contributor to the wiki you will receive the credit you deserve. It's also easier to keep track of the wiki contributions of your favorite developers and friends using the activies RSS feed.
  • There is no longer a need for a separate user account to edit the wiki. Use the same account that you already have for the forums.
  • Some nice new features: copy page, attachments per page, add several attachments at once, child pages, a syntax that is familiar but easier to remember ... and more to come.
  • We can much more easily add any new feature that the community finds helpful for the wiki.
  • By using the wiki portlet so extensively the developers and the user community will come up with great new ideas for improvements. This will help our end goal of making the wiki portlet the best wiki out there :)

Screenshot of the new wiki

This has been the result of a lot of work first on improving the wiki and next to prepare the migration. I'd like to thank the help from Alex, Brian, Alvaro, Rich, Jon, JR, Mike, Sam, ...

Now to be fully honest, this is also a little bit scary. While we've tried our best to make the migration as smooth as possible we know there'll be some glitches. For that reason I've created a JIRA issue as an umbrella for any problem that you may find. So if you hit some bug with either the wiki or the migration itself, please create a subtask of LEP-6726 and let us know.

So, what are you waiting for? Go ahead and enjoy the new Liferay Wiki! If you haven't done it yet, now there is no excuse for not participating ;)

PS: If there is interest I can write a second post about the details of the migration and how you can do the same.

Inter Portlet Communication: One size does not fit all

Company Blogs 3 de julio de 2008 Por Jorge Ferrer Staff

Inter Portlet Communication (IPC) is a hot topic nowadays. This was probably the most missed feature of the first version of the portlet spec (JSR-168), but has made it to the second version (JSR-286, supported since Liferay 5.0). Maybe this is the reason why more and more people are becoming interestind in IPC, and even in portlets in General.

As I've mentioned in previous posts, JSR-286 provides two very good methods for communicating portlets: shared render parameters and events. But this post is not about them, it's about the fact that while having standards is very good, it should not inhibit us from using other solutions when they fit. In particular, I think IPC is a very broad topic. There are lots of different scenarios and communication needs for a single solution to be the best for all IPC problems.

If the solutions provided by JSR-286 fit your needs, by all means use them. But it's also good to know other alternatives. In particular I'd like to highlight today a method provided by Liferay to communication portlets using a super-lightweigth JavaScript events system that runs completely in the browser. This method has been available for some time, and it's now documented in Client-side Inter-Portlet Communication. Take a look and let us know how it works for you.

Yes, web applications can also have progress bars

Company Blogs 21 de junio de 2008 Por Jorge Ferrer Staff

A progress bar is one of the most useful widgets for a user interface when the user can perform lengthy tasks. Unfortunately, while it's a widget very often found in desktop applications it's not so common in web applications. The reason for this is that it's not so obvious how to implement them.

In fact, not so many years ago I remember saying to a customer that it was not possible to show a bar to show the progress of a file upload, and shortly after that Brian added that functionality to the Liferay's Document Library. When I looked at the implementation I felt really dumb, because it's actually super simple.

So the answer is yes, web applications can have progress bars. Not only for file uploads but for any task that might take more than a few seconds. And if used in a smart way they can be a very important factor to improve the usability of a web application. As an example look at a screenshot of one of the tools I'm working on lately, an importer of a whole wiki from MediaWiki to Liferay's new wiki:

Screenshot of the MediaWiki importer with two progress bar

As you can see in this case I've chosen to have two different progress bar. One for the upload and one for the actual importing process. That way the user is always up to date on the status of this operation which might take a while to complete.

If you are interested in knowing how this works or would like to add it to your own portlets don't miss the wiki article How to add a progres bar to my portlet.

The JSR-286, Portlet 2.0 specification is Final!!

Company Blogs 16 de junio de 2008 Por Jorge Ferrer Staff

Several weeks ago we announced the compatibility of Liferay 5 with the final draft of the spec. and now it's been declared officially final. Thanks go to Stefan, the spec lead, for all his hard work during the last weeks dealing with legal and administrative stuff to make this possible.

I recommend you all to download and read the spec, because it has many interesting additions: Inter-Portlet Communication, resouce serving (very useful for AJAX apps among other things), filters, and more.

Brian just passed the TCK once again and .... yes we are still 100% compliant :)

TCK tests

New in 5.0: Customized login pages... even per community

Company Blogs 23 de mayo de 2008 Por Jorge Ferrer Staff

Until now when the user was in any place of the portal  clicked the "Sign in" link he was shown a default portal login page. Of course it was already possible to create your own customized login page using the available portlets, but the user was not redirected there when clicking the "Sign in" button.

After this improvement it is possible to let the portal know that a given page should act as the portal login page by setting a property in portal(-ext).properties. For example to set the home page of the guest community:

auth.login.url=/web/guest/home

 

But that's not all. It's also possible to have a customized login page per community. That will allow  users that are navigating a give community site to log in without going to a portal wide page. The way to achieve it is super simple and doesn't even require modifying a properties file. The community administrator can do it himself by just creating a regular community page and giving it the /login friendly URL. That's it, the portal will automatically detect such a page and will make it the login page for that community. Of course, don't forget to put the actual login portlet there :)

I'm trying to keep my blog posts short, so I've created a wiki page with more details about this functionality. Also a wiki page is better to document this feature since it can grow if more features are added. You can find it here: Customizing the portal login page.

 

New in 5.0: Support for Archived Setups

Company Blogs 4 de mayo de 2008 Por Jorge Ferrer Staff

This is a new feature I've been wanting to blog about for a while. It was inspired by a request from a customer who wanted to be able to store the different configurations of web forms and be able to later reuse them. For example, at some point there could be a form for "Contact Us", another for "Request for detailed information", another for "Inscription for event X", etc. Not all of these forms would be active at all times so it was needed to be able to hide the portlet but keep the configuration available for future occasions. Also some form configuration

This was clearly a feature that many people could benefit from so it would fit into the product itself. Furthermore we realized that the idea could be useful to several other portlets such as navigation, asset publisher, etc. So welcome to "Archived Setups". This feature is available  through a new tab called "Archived Setups" within the configuration UI as shown in the following screenshot:

Archived setups tab

Within that tab you can save the current setup by giving it a name or restore any of the previously archived setups:

List of archived setups

The archived setups are community wide and are included in the LAR files when exporting or exporting either the whole community or the data of an specific portlet. Access to this functionality can be controlled through the permission system by giving or removing from users the  "Manage Archived Setups"  permission. By default only the community administrators have access to it.
 

Better integration of FCKEditor and themes

Company Blogs 7 de marzo de 2008 Por Jorge Ferrer Staff

Up until now the editor area of FCKEditor did not always correctly reflect the look&feel that the contents were going to have when published. The reason was that the theme CSS was not being applied within the editor area. With the help of Nate I've just fixed that so from now on, what you see will really be what you get.

But this is just the beginning of a better integration. The next step has been to make it possible to select styles within the editor (substituting the old and not so useful font select box). With the new select box it's possible to select different headers and other useful element types:



These are all HTML elements so it's very easy for a theme to define the desired look and feel for them. The content authors will be able to just select them and have that nice look be applied automatically.

But the fun just starts here. What is truly powerful is that FCKEditor allows defining custom styles. To test this out I've defined three styles that are mapped to the existing classes to show informative, alert and error messages. The look and feel of these messages is defined within the theme. The next screenshot shows 3 paragraphs each with one of these styles:



What is very cool is that the styles can be applied as a CSS class so all the power remains for the theme. For example the above screenshot has the following HTML source:



These 3 styles are just nice looking examples, but they are probably not so useful. What I'd like to do is define a few standard very useful styles, provide a default look & feel for them and, of course, let theme developers provide custom appearances. Which styles would you define? I can think of:

  • highlighted: to highlight text for example with a yellow background
  • javacode, htmlcode: to format the paragraph according to java or html code rules (with some javascript this could look very good, although probably we wouldn't add it by default to avoid having even more js libs).
  • other?? I'm not feeling that creative today so I'd appreciate your thoughts and suggestions here. You can win a default style available for you and your content authors in the next release of Liferay!! :)

For TinyMCE users: you are using TinyMCE instead of FCKEditor? Do you know how the same thing could be done? Let me know, or better, send me a patch and I'll happily apply it :)


The Portlet 2.0 spec has been approved!!... and Liferay is already 100% compliant with the final draft

Company Blogs 4 de marzo de 2008 Por Jorge Ferrer Staff

We've been waiting for this moment for a long time. I've received this question by email, in person and through the message boards, lots of times... when will the Portlet 2.0 spec be ready?.

Finally we have the good news, I just got an email from Stefan Hepper to the JSR-286 expert group mailing list announcing that the Portlet 2.0 specification has been approved (so it's very close to be final). First of all I'd like to congratulate Stefan for all his hard work to get this spec done. I'd like to thank also the work of the rest of the expert group members, it's been a pleasure to meet them all and be able to discuss with them about the new features of the spec.

What's new in portlet 2.0?

The new spec has a lot of new features, I won't make an attempt to list them all but will highlight those that I consider to be most important:

  • Inter-portlet communication (aka IPC): there are two new mechanisms to achieve this. The first is called shared render parameters and allows portlets to set params that can be read by other portlets. This rather simple mechanism will probably be enough for all but the most complex communication needs. For those complex ones there is a second method based on events. The main advantage of this second method is that it allows a fully uncoupled communication. A portlet issues an event and doesn't have to care if there is anyone listening for it.
  • Resource serving: this is very useful not only to serve binary content such as files but also to improve drastically the support for AJAX in portlets. Through the new serveResource() method it's possible to serve HTML fragments, XML, JSON, anything that your AJAX based app can consume in the client side.
  • Portlet filters: Add filters to execute code before or after a request to a portlet. While this was already possible by using a solution provided by Apache Portals it's now part of the standard. This makes it easier to use and will fortunately foster the development of reusable filters.
  • Better compatibility with existing frameworks: Several minor improvements to ease the usage of regular web app frameworks to develop portlets.
  • Other: Easier development by using annotations, setting and reading of HTTP headers, access to the portlet window id, setting markup HEAD elements (specially useful when producing HTML, which is the most common output), etc.

And all of this while maintaining backwards binary compatibility!

Does Liferay support it? Already?

Yes! Last week Brian announced that with his last commits to subversion Liferay now passes all of the TCK tests for the final draft submitted to the JCP. Here is the image to prove it:

[Edit (March 6th): Image removed since we should not show TCK results until the final spec and TCK are publicly available (which should happen in the following days). Sorry for the inconveniences]
The next major release, 5.0 will include this support and is planned to be released in the following weeks. We'll try to get a release candidate ready ASAP for those that can't wait to test it.

Note (March 11th): I received a clarification from Stefan saying that even though the final draft is approved it's not published yet and thus it cannot be considered final. For that reason I've moderated the language to make that clear. I would expect the publication of the spec to happen in the following next days.


I want to learn more. What do I do?

There are already several introductory articles published and a quick google search will show them. But we've thought that it's not enough, so we are preparing several sample portlets to showcase the new functionalities.

Furthermore I plan to be adding a blog entry for each of the main new features as we prepare the sample portlets.

So stay tunned to Liferay's blogs.

Easy and robust Drag & Drop with jQuery UI

Company Blogs 2 de marzo de 2008 Por Jorge Ferrer Staff

I just came across a blog post with an example on how to create a drag & drop effect using jQuery UI.

Looking at the code it surprises how easy it is. The whole JavaScript is around 17 lines of code, but but only around 9-10 of them are directly related to the drag functionality.

But after hearing Paul talk about all the casuistics he was considering when implementing this functionality I would say that the most important characteristic is not simplicity but robustness.

Ever build a drag & drop effect but fails when the user moves the mouse out of the browser window? what happens if the mouse button is released in another app? etc, etc. That's the real hard part of drag & drop and is great to see Paul and the jQuery UI guys pay so much attention to these details.

Introducing the amazing new Liferay wiki (part 2)

Company Blogs 24 de febrero de 2008 Por Jorge Ferrer Staff

As promised, I want to finish the review of the new features of the wiki portlet. This time I'm not going to write much and will let the screenshots speak for themselves:

Diff view of changes betweeen versions.

Here goes a feature that we've waited for for a long time:

Click the button and you get:




Nice, right? You have to thank Bruno for it.

Subscriptions to changes

It's now very easy to keep up to date of changes made to the wiki either by subscribing to a single page or to a all the pages of a wiki (aka node). You can subscribe to a page from the pages Properties table and to the node from the Recent Changes page:



Showing images

You can include images published anywhere in the Internet by using the URL. Note how simple and easy to remember is Creole's syntax specially when compared to WikiPedia's syntax:


And here is the result:



Attachments

Some times you want to include an image that is not yet published somewhere else. Or you may want to attach some other type of file to the wiki page. Welcome attachments!


No images yet. Let's upload some:



There you go:


When editing a page you get a list of all files attached to the page (with links to preview the image if desired), so showing an image is as easy as copying the image name between {{ and }} signs.



Table of contents, inclusion of pages and other JSPWiki plugins

One of the nice characteristics of JSPWiki is that it has lots of plugins. While I haven't  tested them all and can't ensure they work, I've tested two of the most useful ones, including pages and table of contents. Note that Creole has a defined syntax to include plugins which is quite easy to type and does not conflict with other constructs. For example:

<<TableOfContents>>
 

Here is the result:


To include a page, it's necessary to use JSPWiki's InsertPage plugin (although I plan to support an easier syntax in the future):

<<InsertPage page='IncludedPage'>>

Regarding plugins, if you test a JSPWiki and it fails, please let me know.

Optimistic locking

Have you ever spent some time writing some text and for some reason lost it? Isn't very very annoying?. How about if you don't notice and someone overwrites your wiki changes. That can't happen anymore in Liferay's wiki:



Children pages

This is one of the last features added and is one of my favorites. In wiki.liferay.com we often have to create related content that spans several pages. Wouldn't it be nice for the wiki itself to handle these relationships? Here you go:

A nice detail is that when visiting a children page you get a breadcrumb showing its parents above the title:



Tag based navigation

The last feature is very simple, but nevertheless very useful. Whenever a page has several tags, these tags are shown as links that can be clicked to see a list of all pages with the same tag:

And when clicking, for example, the "creole" tag you get:


Future

My plans for the future of the wiki are to make it as robust and easy to use as possible. I'm sure there are lots of features that could be added (I have lots of ideas myself), but sometimes adding more features makes an application harder to use in general. So I want to be cautious and spend the time doing little improvements to make sure it's a pleasure to use the current functionalities rather than making it become a fat bag of features :)

Having said so, keep the suggestions coming :)

Introducing the amazing new Liferay Wiki

Company Blogs 17 de febrero de 2008 Por Jorge Ferrer Staff

Ok, maybe the title is a bit pretentious but I have to say that I'm really excited with the results. I'm surprised myself with how much we've been able to do in so little time. IMHO after these improvements Liferay Wiki can be compared to the most known wiki products out there (proprietary or Open Source). Not only it's comparable to them in terms of wiki related functionalities but it also inherits the great features of Liferay Portal such as user managment, permissions, the ability to have several different wikis in one single installation (several per community) and of course the ability to mix and match with all the other Liferay tools such as blogs, forums, content managment, etc.

Let's get to the new features. But first, for those that can't wait here is a screenshot that shows several of the new features:

Summary of wiki features


Nice UI with emphasis in usability

A wiki is a tool used to publish information and often becomes part of public websites, so it has to look good. This includes having a clear visual hierarchy that highlights the title of the page among everything else and makes it easy to read the page text.

One of the nice things of Liferay's wiki is that it lives inside a portal. That is, it doesn't have to care about navigation or look & feel issues. Those features come for granted and the wiki just has to care about it's own content and the portal will give its users great flexibility through all other CMS portlets.

The most important peace of information in a wiki page is its title. In order to make it clearly visible it's bean put the first visible thing in the upper left corner. For those using the wiki in 4.4 note how the tabs that used to be there have been removed. Also the search box have been aligned to the right so that it doesn't interfere with the visual hierarchy. Here is the result comparing what it used to be and what it's now:

Node tabs before

(Before)


Node tabs after

(After)


If you've noticed an icon in the upper left corner, note that it only appears for administrators and allows them to create several wikis within the same community. They used to be called nodes (and still are called nodes in the code), but the UI have been renamed to match what most people would expect. 

Hovering the manage wikis icon

When there is more than one wiki in a single community they show as links that allow navigation in a typical way that people would expect:

Links to two wikis in the same community

Also, as the wiki kept increasing in number of functionalities we've had to deal with how to keep it easy to use. In fact, with how to make it easier to use than it was with less functionalities. We wanted to make the "Edit" option clearly visible and not hidden among lots of options. The new "Print" functionality also had to be in every page. All other functionalities were moved to a second screen to keep the the page's screen clean. That second screen is called "Properties" and not only provides useful information about the page but also offers advanced operations to the user. Here is a screenshot of it:

Page properties and advanced operations

You may have already noticed some new cool functionalities in these images, but be patient I'll get to them.

Print, Preview, Delete and Move

The first new feature added was the ability to cleanly print wiki pages. This has been added as an new icon next to the edit icon and when clicked opens a pop-up which only shows the current page, excluding any other portlet as well as buttons and controls that should not appear in the printed version. Following is a screenshot which shows the original page, the pop-up that appears as a preview of what will be printed and a printer dialog that is automatically open for the user.

Print windows

Another very useful functionality that was added is the ability to preview changes when editing an article or even before creating it in the first place. To that end a new button has been added next to save and when clicked the current content in the textarea is submitted to the server to generate a preview. The returned page contains the preview in an area with a light yellow background (as shown in the screenshot) to prevent the user from thinking that the page has been saved. Below the preview is a textarea so that the user can continue the edition. Related to this, a new button called "Save and continue" has been added so that editors can save the content from time to time while writing long pages but maintain the edit screen to keep writing.

Preview

The delete page functionality is a quite simple operation that wasn't available before. It allows editors to completely delete a page. This option is also available through the Actions menu.

Finally the most advanced functionality added in this group is "Move". This functionality allows changing the title of a page without breaking existing links to that page. To that end, when the page is moved, a "reminder page" is left with the new title that redirects the user to the new one. Note that this redirection is logical, inspired by the way WikiPedia works, which means that the user is informed that he's been redirected so that any potential confusion is prevented. It's also worth noting that when a page is moved all of its history is moved with it and that when a page is deleted any "reminder pages" that it may have left behind after renamings are also deleted.

Renaming a page
And here is the result when a link to the old page is used. Note the message under the title:

Result after moving

Call for comments: I called this operation 'move' because it's how MediaWiki calls it. But now I'm thinking of calling it "Rename" which is what it really does, and leave the word 'move' for future operations such as moving across wikis. Thoughts?

Creole syntax support

One of the drawbacks of the world of wiki products is that each have an slightly (or completely) different syntax. To solve this problem a group of smart people, including the inventor of the original Wiki, Ward Cunningham, have sat together and designed the Wiki Creole syntax. The goals were to create a syntax that was as similar as possible to the ones already in use, consistent and easy to type and remember. And after implementing it for Liferay and using it for some weeks I have to say that they've done a very good job. For those fans of WikiPedia's syntax, a quote that I read recently is that "Creole is like WikiPedia's syntax but without its inconsistencies".

wikicreole.org website

It's worth noting that the support for Creole in Liferay has been possible thanks to the integration of JSPWiki and specifically using the CreoleFilter developed by the i3G institute. Thanks a lot to all of them.

Here is a cheatsheat of the main syntax elements of creole:

WikiCreole cheatsheet

Note for current users of JSPWiki: you can also use JSPWiki's native syntax if you want.
Note for developers: you can also add support for any desired syntax or your favorite wiki engine by implementing an interface is for some reason you don't like Creole or JSPWiki.

More

Wow. I've only started and this blog entry is already quite long. In next posts I'll describe some other features that have been added such as watches (by email and RSS), images, attachments, table of contents, inclusion of pages (using JSPWiki's syntax), optimistic locking, diff view of changes betweeen versions.

And don't be shy, keep the comments coming!

--
Jorge Ferrer
Software Architect
Liferay, Inc.
Enterprise. Open Source. For Life.

My first book bought at Lulu.com .... and it was a great experience!

Company Blogs 13 de febrero de 2008 Por Jorge Ferrer Staff

Yesterday I received my first book bought at Lulu.com and I have to say that the whole process has been great. The price has been lower than the usual technical books I buy and I've had to wait much less than I usually wait when buying a book in on-line shops. Note that I have no relationship with Lulu.com at all, but I think when people do a good job they deserve being recognized for it.

For those that don't know about it, Lulu.com is the new project of Bob Young, the Redhat co-founder and has as its vision allowing everybody to become a writer and a publisher of their own works. The book that I wanted to buy is "Getting Real" by 37 Signals. I had already read some chapters of it and wanted to read the whole book. Actually it's available for reading online, but as I know it's a good book I prefer to have a nicely printed copy (specially since the price is quite good). So I went ahead to lulu.com (following the link from 37 Signals' site) and added the book to my Shopping Cart. The first doubt that comes at this point is, how much is the delivery going to cost? how long does it take? The guys at Lulu.com have done a good job identifying the questions that people have and my view of a shopping cart had an easy to find link to a page that gave me the answers I was looking for.


But what is even nicer is that they actually delivered in the time they promised (actually very early within that range).

So here I am right now with my nicely printed book:

Mostrando el intervalo 41 - 60 de 68 resultados.
Elementos por página 20
de 4