Monday, February 28, 2011

Using open source software to design, develop, and deploy a collaborative Web site, Getting started with Drupal


Introduction
This article gives you an overview of the Drupal content management system. We describe the common building blocks and discuss some common assumptions of the Drupal approach. It is helpful to understand core concepts and basic Drupal terminology as you go through this article and beyond.

The Drupal content management system maintains its content in a database. Within the database, the content is stored as nodes and other high-level objects, such as users and comments. There are a variety of different, predefined node types including stories, blogs, and polls.
Drupal constructs pages that contain one or more pieces of information in the form of nodes, blocks, and other items. Each page is typically organized around a center column of content with left and right side-bars, and a header and footer. With the exception of the center column of content, the other areas are optional.
The center column is used to display the main site content; the optional areas are for additional content. Drupal uses blocks to fill the optional areas with small pieces of information. The optional areas typically hold navigation links (for example, most popular nodes) and other abbreviated content. Just like any content, blocks can be made dependent on the user's role, providing a customized view of the information.
One of the most important features of Drupal is the ability to extend the types of nodes available, such as your application-specific content, by writing custom node modules. Modules are extensions to Drupal that implement one or more hooks from a predefined interface. Hooks define user permissions, interact with the database, and provide an interface to edit the content.
In the next article in this series, you create a custom module to store and present announcements for our online community.
The menu system controls the navigation of the Web site and is fully customizable through the user interface. By contrast, the menu hook function controls how URLs are formed, how URLs are translated, and what function a specific URL will call. Newcomers to Drupal are frequently misled by the name of this hook function because it is not really about menus. So be aware that this is a possible point of confusion when dealing with "menus" in Drupal.
The separation of content from presentation is enabled by a system that themes the pages based on templates. Most content can easily be structured and styled by defining a set of template, or tpl, files and theme functions.
Nodes can be organized into categories or taxonomies. Forums are an example of hierarchical content within a taxonomy.
All the content is accessed through a permissions system to control the access and editing of content on the Web site.
It is important to understand that we are presenting the steps we took to implement the required functions for our online community site. This information should not be interpreted as a rigid set of development guidelines that must be followed to develop a successful or functional Drupal site. Instead, use this article as a point of comparison during the development of your site.
Nodes
An important concept in Drupal is that all content is stored as a node. They are the basic building blocks for the system, and provide a foundation from which content stored in Drupal can be extended. Creating new node modules allows developers to define and store additional fields in the database that are specific to your site's needs. Nodes are classified according to a type. Each type of node can be manipulated and rendered differently based on its use case. A few of the standard node types include:
Pages
Simple nodes for displaying content (By using PHP, the content can be dynamically updated. Any piece of content can be dynamic with the inclusion of PHP.)
Blog entry
A node for maintaining an online journal or weblog
Forums
Sets of nodes and their comments (These nodes are grouped by assigning a taxonomy term.)
Story
Generic pages that expire after a certain date (These are similar to normal pages but can be styled differently.)
Comment
Special type of content that lets users make comments about content defined by other nodes (Comments are not a type of node and are stored in a separate table in the database.)
The database records a basic set of information for a node, including a title, teaser (or abstract), and body. Information about the creator, creation time, and status are recorded. Any additional information that your application needs generally means that you need to create a new node type that writes to database tables specifically defined for that node type.
Drupal implements a revision system for changes made to node content. This allows a module developer to cut a new database record for each update of a node in a table specifically allocated to node revisions. You can read more at Drupal revisions overhaul.
Taxonomy
The Drupal taxonomy system allows the classification of nodes, which enables the organization of node content on a displayed Web page. This categorization can also be used to modify Web site navigation.
Categories are defined by tags, or terms, and sets of terms can be grouped into a vocabulary. Drupal can automatically classify node content with terms, or node content can be manually classified using associated vocabularies. Drupal also allows free tagging, letting users define their own terms for node content.
Module developers can take advantage of nodes classified with categorization terms by using various organizational functions that the taxonomy module provides. This module also supplies functions that allow developers to add navigation to a page based on node content classification.
Comments
The Comment system is another feature of Drupal. A node can be configured to accept the attachment of threaded comments by a user group with the appropriate permissions. This enables users to post their comments on particular content presented in a Web page. Typically, the posts might appear on a forum topic or a weblog entry.

Blocks
Blocks are small, self-contained units of information typically displayed in navigation areas or side areas of the page, but can be placed anywhere on the page. They provide small views of information that are embedded in the presentation of other nodes. Modules provide basic blocks used to display their content. Administrators can create new blocks based on existing blocks, or write PHP code to directly query and render content inside a block.
In the configuration page in Figure 1, you can:
  • Enable or disable a registered block.
  • Order the presentation of the information by assigning a weight (-10 to 10, with the lower numbered items presented higher in the group).
  • Place blocks in the left or right sidebar, header, or footer or content region.

Figure 1. Specifying different blocks defined for our fictitious Web site
Specification of blocks

Modules
Modules are the main mechanism to extend Drupal. They implement a well-defined interface that allows the new modules to interact with the system and the system to interact with the module. Drupal calls the functions in this interface hooks. Drupal hooks are grouped into three categories; they are used in modules that:
Authentication
Provide additional user authentication mechanisms
Core
Need to respond and interact with the core Drupal code
Node
Provide a new node type to the system
Typically, you create a new module if you need to extend Drupal in any way. A common use case for a module is when the standard node table in the database does not contain the information that your application needs. A module implementing the node hooks can easily utilize an extended database schema to store any information that it requires. It is important to understand that a module does not need to implement all of Drupal's hooks; it only needs to implement the hooks that are required to implement the extension.
Once a module is created, you have to enable that module and assign access privileges to the various roles that are defined. Figure 2 shows part of the administrator's screen that enables a module (administer > modules). Here we have enabled the announcement and comment modules. This administrator's interface uses check boxes to enable or disable individual modules, such as our custom announcement module and the system-supplied comment module.

Figure 2. Enabling a module
Enable or disable individual modules
Hooks
To programmatically define a module, you need to create specific functions that conform to the syntax of predefined functions. These hooks enable the system to call the appropriate PHP function when viewing a page or storing information in the database. Each hook has a defined set of parameters and a defined returned type. The syntax of a hook is to prepend the module name in front of the defined interfaces. For example, a hook to delete a node that is of the type announcement is in the form announcement_delete(...). This hook allows your custom module to delete any information in the database that your module creates and should be removed when a given node is deleted.
Another example for viewing a node of the same type, announcement_view(...), would allow the module to filter content based on access privileges for the current user. An example for presenting content on a page is announcement_block(...). This enables the module to return a small container of themed content used as a block on any Web page.
A few of the basic hooks for node access, database interaction, and theming are described briefly below. A more detailed discussion will be in the next article, where we'll describe our custom announcement module.
Node access hooks
In this section we'll cover a few of the typical hooks that will need to be written for a new node module. All the documentation for the hooks is in the API reference for the appropriate release of Drupal. The hooks we describe are taken from our example announcement module and should be used as a guide rather than a strict recipe for module development.
<module_name>_perm
The perm hook defines the types of access permission that can be assigned to each user. The node module defines a few standard types: Listing 1. Implementing the perm hook from the node module
function node_perm() {
return array('administer nodes', 'access content', 'view revisions',
'revert revisions');
}
The node module distinguishes between administering nodes, accessing content, and viewing and reverting revisions. These strings are used when assigning access privileges to different user roles (see Figure 4). Use the existing types if you can, but you can always create your own types if the semantics of your module differ. For example, if the announcement module needs to distinguish the create operation from the edit operation, you can supply a hook with create announcement and edit announcement values in the array.
The Drupal function user_access() makes it easy to check the current user's privileges against these string types. The function user_access('access content') returns TRUE if the current user has the "access content" privilege (that is, the user can view general content on the Web site). You will find this function commonly used in a module's menu hook, but feel free to use it wherever you need to evaluate a user's permissions before executing an action.
<module_name>_access
The access hook provides the ability to restrict access to particular operations on content. The node operation (view, create, update, delete, and so on) and node are passed in to help determine access privileges. By returning a Boolean value, you can enable or disable certain operations on the node. For instance, you might check to see if the current user is the author of the node to determine whether or not the user can carry out the current operation. To do this, you might use the following code shown in Listing 2. Listing 2. Example implementation for the access hook
function <module_name>_access($op, $node) {
if ($op == 'update' || $op == 'delete') {
if ($user->uid == $node->uid or user_access('edit <module_name>')) {
return true;
}
else {
return false;
}
}
}
The example access hook allows the update or delete operations to execute if the user initiating the request is the owner of the content, or if they have been explicitly granted permission to edit that type of content.
Node presentation hooks
<module_name>_form
The form hook defines the input widgets, like text fields, check boxes, and so on, used to add and edit a node for this module. Examples of this function are in the documentation for the appropriate release. The implementation of the form interface has changed between Drupal 4.6 and 4.7.
<module_name>_validate
The validate hook is used by modules to ensure that the data in the node is valid before posting to the Web site.
<module_name>_submit
The submit hook is used by modules to modify data in the node before posting to the Web site after the validate hook completes successfully.
<module_name>_view
The view hook provides the mechanism for the module to define the presentation of a node of this type. It first prepares the node by applying filters through the use of another hook, then generates the HTML through the theming process.
<module_name>_menu
The menu hook allows the module to define URL paths that it wants to handle. The return value is an array of items. Each item is an associative array that defines a unique URL. There are various options for the return values, ranging from normal items in a tree of paths to callback items that register a function to call for a particular path. An example of a menu hook function is shown in Listing 3. Listing 3. Example implementation of the menu hook
function <module_name>_menu() {
$items = array();
$items[] = array('path' => '<module_name>',
'title' => t('Module Name'),
'access' => user_access('access content'),
'type' => MENU_SUGGESTED_ITEM,
'callback' => '<module_name>_page');
return $items;
}
This example instructs Drupal to recognize the URL /<module_name>, use it in the default menu list, make sure only roles with "access content" permission can access it, and to use the <module_name>_page function when this URL is seen in the browser.
<module_name>_nodeapi
The nodeapi hook is a useful function if you need to interact with other modules in the system. For example, if the comment module is enabled, the comment_nodeapi() function would be called to extend the node object with data pertaining to any comment information associated with the node. The nodeapi hook can also be used for other events, including viewing, database access, searching, validating, and so on.
Node database hooks
The node and node_revisions tables in the database contain most of the information for a fragment of information stored in the system, such as title, teaser, body, creator, and creation time. This system allows many revisions of a node to be saved without sacrificing performance or scalability. When a new node module is written, typically one or more new tables are added to the database. The database hooks allow the module to create, modify, and delete data in the tables as new node content is created and modified in the system.
Drupal has a database abstraction layer that includes several functions that link the high-level Drupal database API to the low level PHP database module API for MySQL or PostgreSQL. Cross-database compatibility is achieved by implementing the database abstraction API for your database.
However, you need to consider one very important thing: To have a truly cross-database-compatible module, you must take great care to write SQL that works on all database platforms. Drupal does not provide a system or mechanism to handle those kinds of compatibility problems yet.
<module_name>_load
The load hook allows the module to load any additional information for a node of this type from additional tables in the database. The return value is an object containing the additional properties to be added. Drupal automatically merges them into the node being loaded. For example, the code might look like that shown in Listing 4. Listing 4. Example implementation of the load hook
function <module_name>_load($node) { 
$additions = db_fetch_object(db_query('SELECT * FROM {<module_name>} WHERE nid = %s',
$node->nid));
return $additions;
}
The $additions are then automatically merged by the system into the results of loading the node.
<module_name>_insert
The insert hook signals the module to add data into the database for the node argument. Typically, this is a call to a function in the database abstraction layer (for example, db_query) to insert data about the node into the tables defined for this module. The standard data stored in the node database table, such as body, creation date, and so on, is written into the database automatically.
<module_name>_update
The update hook provides the mechanism for our module to update data for an existing node in the database. The update hook is also the most likely location to implement the code necessary to support node revisions for your module.
<module_name>_delete
The delete hook allows the module to take additional action when a node is being deleted from the database. Any module specific tables can be cleaned up at this time.

URL design
Drupal uses its menu system to define the navigation for the Web site. When building custom modules, you can specify how you want your module to serve the content based on the URL. When a page request is received, the system finds the closest match based on a hierarchical structure of paths. If a path is registered, it uses the defined function as a callback to produce the content presented. Any portion of the path can be used to select how the content is presented. For instance, if the path is /announcement/15/edit, an edit page for the node with id = 15 will be presented, in contrast to the path /announcement/15/view where the content of the node will just be displayed. The callbacks are defined in the <module_name>_menu hook.
Drupal also has a mechanism for defining the use of a tabbed interface. These tabs are specified in the menu system as "local tasks." When defining local tasks you can designate one as the default. The default local task is the first task presented to the user when they view a piece of content. We recommend that you always designate a default local task when using this feature.
The <module_name>_menu returns an array of menu specifications. The code snippet in Listing 5, repeated from above, shows one such specification to define a simple callback for a typical custom module.

Listing 5. One item from a code snippet of the menu hook
$items[] = array('path'     => '<module_name>', 
'title' => t('Module Name'),
'access' => user_access('access content'),
'type' => MENU_SUGGESTED_ITEM,
'callback' => '<module_name>_page');

In the specification the attributes include:
Path
When this matches the URL request, this item is in use.
Title
The title of the menu item.
Access
The value of this attribute determines whether or not the current user can access the content specified by this item.
Type
The type of menu specification.
Callback
The function called to produce the displayed content when this item is in use.
There are several different types of menu specifications, including:
MENU_NORMAL_ITEM
The default type used for menu items, and they show up in the menu tree.
MENU_ITEM_GROUPING
Groupings of items that simply list sub-pages to visit.
MENU_CALLBACK
Registers a function that is invoked to generate the content to present when the URL is accessed.
MENU_SUGGESTED_ITEM
Suggested items from modules may be enabled by the administrator.
MENU_LOCAL_TASK
These pages are rendered as tabs. Other renderings are possible.
MENU_DEFAULT_LOCAL_TASK
Every set of local tasks should also provide a default task that links to the same path as its parent when clicked.

Users
Another top-level object in the system is the user object, which allows you to set up accounts for different users coming to your site. As an administrator you can also create different roles for different access privileges to the content. Users can then be assigned to one or more of these roles. Note that the first user created when you configure your Drupal installation is the only account to have permissions to change any setting within the system.
An administrator can assign users to different roles as defined in the access control section of the Drupal administrative interface. Figure 3 shows the roles created for our fictitious Web site. In addition to the standard ones, we have added roles for administrators, customers, operations, and workgroup leaders.

Figure 3. Define roles to specify the level of user access to the content
Define roles
Figure 4 shows the administrators screen to assign roles to access permissions within a module. The administrator's interface uses check boxes to enable or disable access privileges for actions related to modules for particular roles. The roles are listed across the top of the table while the permissions, grouped by module, are in the first column. The permissions are the strings specified in the <module_name>_perm hook. Classifying users into roles can segment the responsibility of tasks for different classes of users.

Figure 4. Administrator's interface to enable or disable access privileges
Interface to enable or disable access privilege

Customizing the look of your Web site
Drupal separates the content from the presentation using a theme system. You can theme your content using various theme engines within Drupal. While you can program a theme entirely with PHP, a theme engine provides a framework for development and can save time. Currently the PHPTemplate, XTemplate, and Smarty theme engines are available on the Drupal site. We chose to use the PHPTemplate engine because it is the default engine and offers a consistent use of PHP across the logic layer, the modules, and the presentation layer.
Standard theme functions
Understanding how the core theme code searches for the appropriate theme method is important for module developers. Modules should be written in a way that allows other system implementers to integrate the module's content into the look and feel of their site. Drupal currently searches for three PHP functions that build themed content, in the following order:
  1. <theme name>_<content name>
    This function is constructed from the current theme's name and the name of the content, or node type, that is being themed. If the current theme is named ibc, and we are theming the content announcement, then the theme function name would be ibc_announcement.
  2. <theme engine name>_<content name>
    This function is constructed from the current theme engine's name and the name of the content. We are using the PHPtemplate engine, so our theme function name for the content announcement would be phptemplate_announcement.
  3. theme_<content name>
    This is the last function and the simplest. If we are theming content announcement, the theme function name is simply theme_announcement.
A theme is defined using a collection of files within the Drupal themes directory. Drupal comes with the files you need for a theme and are dependent on your theme engine. You can customize your theme in many ways; we present our approach to altering the presentation of the data to get the xHTML structure, style, and layout we wanted for the Web site.
Template files
PHPTemplate allows you to map specific files, called template files, to specific functions and modules within Drupal. A template file, ending with .tpl.php, uses an array of data passed to it by its associated function or module. Using PHP and xHTML, this data can be manipulated to be presented on the Web page. There are generic templates for existing node types that Drupal provides to help you customize your theme. The page.tpl.php, node.tpl.php, and comment.tpl.php files are examples of the generic templates. They are within the theme directory. The page, defined by the page template, is used to contain the display of any node as defined by a node template.
page.tpl.php
This is probably where you would start customizing your own theme. This is the template that defines the structure of all pages of content displayed by Drupal. Here you can define your global structural elements of xHTML, such as the head and body elements, the include files for style sheets, the skeleton DIV elements that set up the semantics of your content layout, and so on.
node.tpl.php
This template is used to manipulate how to display node data. If you want to theme a node of a specific type, you make a copy the node.tpl.php file and change the filename to node-<type>.tpl.php, where <type> is the name of the node type. We changed the default layout of forum content by using a template called node-forum.tpl.php in the discussions section of the IBC Web site using this method.
comment.tpl.php
This template file controls the layout of a single comment. Comments can be added to pages using Drupal's Comment module.
Overriding existing theme functions
The PHPtemplate engine allows you to map templates to specific theme functions. Theme functions provide generic methods to build Web content that is used by modules providing core functions in Drupal, or by your own modules to extend Drupal.
One example is the theme_links function. Given an array of xHTML anchor elements (links), theme_links will return a string containing these links delimited by a given character. This is an example of a very simple building block. Listing 6 changes the output so that a DIV element with a class attribute of value links wraps the delimited list of links.
There is a special file you can use within an individual theme's directory called template.php. If this file exists, Drupal will use it to allow you to override default actions of the theme system. In the template.php file we can create a function as shown in Listing 6:

Listing 6. phptemplate_links function from the template.php file
function phptemplate_links($links, $delimiter = ' | ') {
if (!is_array($links)) {
return '';
}
$content = '<div class="links">';
$content .= implode($delimiter, $links);
$content .= '</div>';
return $content;
}

Creating the function phptemplate_links in the template.php file, we instruct Drupal to override the default theme_links function. In the overriding function, we are wrapping the DIV element around the delimited list of links and returning the resulting string.
Theming within new modules
If you create a new module to extend Drupal functions, you need to tell Drupal how you want to display the data generated by the module. To make this extensible it is wise to set up a default presentation of the data within the module that is easily overridden by whatever theming system you, or someone else, choose to use.
Creating the default presentation
To generate the default themed output, we created a function within the module. This manipulates the data passed to it and returns the themed content in a string. An example might be the theming of a list of items in a module called shopping_list_items. The themed output is an xHTML unordered list of the items, as shown in Listing 7:

Listing 7. Theming the output as an unordered list of items
function theme_shopping_list_items($list = array()) {
$content = '<ul>';
foreach ($list as $list_item) {
$content .= '<li>'.$list_item.'</li>';
}
$content .= '</ul>';
return $content;
}

Then, in the part of your module where you build the Web page, you use Drupal theme function to call the theme_shopping_list_items function to return the themed list. The sequence of execution, shown in Listing 8, is then:

Listing 8. Theming a list of items
$tools = array('hammer', 'drill', 'saw');
$content .= theme('shopping_list_items', $tools);

Overriding the output of a module with a theme
As explained earlier, we can use the template.php file in the theme directory to override theme functions. Given the example above, assume we want to change the default action of displaying a list of items generated by the shopping_list_items module from an xHTML unordered list to an xHTML definition list, shown in Listing 9. We create this function in the template.php file or in the node module file.

Listing 9. Theming the output as a definition list
function phptemplate_shopping_list_items($items = array()) {
$content = '<dl>';
foreach ($items as $list_item) {
$content .= '<dt>'.$list_item.'<dt>';
}
$content .= '</dl>';
return $content;
}

Since Drupal knows that our theme is using the PHPtemplate engine, it will automatically override the theme_shopping_list_items function in the shopping_list module with this new function. The result is an xHTML definition list of your tools. Taking this one step further, we can tell Drupal to use a template file to define the presentation of this list by defining the file name within this overriding function, as shown in Listing 10.

Listing 10. Function using a template file for theming
function phptemplate_shopping_list_items($items = array()) {
$template_file = 'shopping_list_items';
$content = _phptemplate_callback('shopping_list_items',
array('items' => $items), $template_file);
return $content;
}

Where the template file might contain the following code:

Listing 11. Code fragment from template file to present the list of items
<dl>
<?php foreach ($items as $list_item) : ?>
<dl><?php print $list_item; ?></dl>
<?php endforeach; ?>
</dl>

Here we are using our knowledge of the PHPtemplate engine. The _phptemplate_callback function connects our call to phptemplate_shopping_list_items to a template file called shopping_list_items.tpl.php with the variable named list_items set to the $items array. This method of theming content is preferred because it cleanly separates the bulk of the PHP code from the xHTML.
Content structure and style
We describe the mechanics of using Drupal's theming system to extend and modify the default presentation of content. An additional aspect is to consider the structure of the content generated by each node and the overall style applied to that structure. Using the PHPtemplate engine allows Web designers to maintain structured xHTML for the data generated by modules. This option also allows the use of Cascading Style Sheets (CSS) to alter the presentation or style of this structure. We found it helpful to keep the data production within the module and xHTML production within the templates to preserve the separation of data and presentation.
The structure of the overall Web page is shaped by the page.tpl.php file within the theme directory. In this file, xHTML can be used to define the basic layout of a Web page into which other node content is included. Since the location of the header, body, sidebar, and footer remain the same in our Web site, these structures are defined here.
We were careful to use the correct xHTML markup for our navigational elements, section headings, and so forth, so our Web site content is still presented in a reasonable format even if the styling is not available.
One of the variables presented to this template by the Drupal theme system can flag whether the front page is being displayed. With minimal PHP, we used this variable to help us structure the xHTML slightly differently than the sub-pages of the Web site.
Using the methods mentioned in the previous section, we used template files for all node generated output, therefore controlling the content structure in one theme directory. The output of each node template was structured consistently, usually contained within a DIV element whose class attribute value would describe the template being used. Not only did this help the styling of the content, but provided a debugging aid when looking at page source to determine which template generated what content.
In a future article, we'll go into greater detail about the techniques we used to structure and style our Drupal Web site.
We referenced the screen and print media style sheets in the Web page header as defined in the page.tpl.php file. To categorize and manage the style, we chose to break the CSS styling into separate files and include them into the main screen media style sheet file. The base styles of common xHTML elements were contained within one CSS style sheet, the layout in another, and the style modifications to the Web site sections in their own files. As with the template files, all of the style sheet files were contained within the theme directory.

Node-building sequence
In this section we'll explore how Drupal builds a node. It is useful to understand the sequence in which Drupal collects the information for a particular node, how the core system interacts with a module, and how this node is rendered before being presented within the Web page. This is intended as an overview, so some level of detail will remain outside the scope of this section. Figure 5 shows the flow of a node building sequence.

Figure 5. Summary flow of the node building sequence for a View operation
Summary of the node building sequence.
See a larger version of this figure.
The path in a URL request is structured so that /node/, or the node type, is followed by the node id and then the node operation. If the path is /node/15/edit, this tells Drupal that an edit form for node 15 should be displayed. The only exception to this structure is when the URL path is /node/add or /node/add/<node_type> and Drupal knows to apply the Add operation.
In this section you learn about the following four operations:
View
The default operation that builds a node page for viewing only.
Add
The operation that presents a form with which to add a new node.
Edit
The operation that presents a form to edit an existing node.
Delete
The operation that deletes the node from the Drupal system.
Remember that the menu system knows what function to call based on the URL given. We will start this explanation of the node building sequence at the point where the menu system calls the node_page() function in the node.module.
The first thing Drupal needs to do is determine the operation. If no operation is found following the node id in the URL, a default operation of view is assumed.
The View operation
Before any rendering of the node can proceed, a container for all the data associated with this node is created. This node object is populated with data from the database record in the node and node_revisions tables, whose primary key field value is the same as the node id in the URL. This data includes the node type, title, teaser, body, creator, and creation time.
Next, any extended data is applied to this node object. This is done through two hooks, load and nodeapi. The nodeapi hook provides another way for any module to extend Drupal's core operations: load, view, prepare, delete.
Since the node_type is already known, Drupal uses this to establish whether a <node_type>_load() function exists. For example, if the node type is announcement, then the announcement_load() function is called, where it might extend the default node information with a publish and expiration date for the announcement.
Now, Drupal invokes any nodeapi hooks in all the available modules. This function call includes an argument signifying that Drupal is loading the node object and allows the insertion of extra data into this object from any module.
Drupal then stores the node title, which it can use for inclusion in the Web page title later in the request life cycle.
Drupal now starts the process of rendering the node object data into content. The default action is to create and store the themed output for the node body and teaser. If Drupal finds a <node_type>_view() hook, then this will be called to override the theming of these content fragments. For example, if the node type is announcement, then the announcement_view() function might return a themed content fragment for the publish and expiration dates of an announcement, in addition to the body and teaser content.
As with the load section of this sequence, Drupal now looks for any nodeapi hooks in all the available modules. This function call includes an argument signifying that Drupal is theming the node object data and allows any module to change or extend the content in the themed body fragment. This is then stored in the node object.
Links are another type of content that can be added to the node object. They offer additional themed Web links to the node content, and Drupal allows any module to add these through the link hook.
Drupal then checks if comments should be rendered for this node. It uses any comment data stored in the node object to theme the content fragments required before storing these back in the node object.
Finally, the node object, with all its data and themed content, is passed to the Theming system for rendering as a themed node. At this point our node is fully built and ready for display.
The Add operation
When the URL path tells Drupal to add a node, the node building sequence is significantly different from the View operation. First, Drupal checks to determine whether the node type in the URL path exists and, if it exists, if the user making this request has the authority to create a new node. If these conditions are met, Drupal starts to assemble a form required to add a node of this node type. If not, a page is presented listing the available node types.
As with the View operation, Drupal creates a node object that stores any data that may be used to render the form. As part of the preparation of the data for this node object, Drupal invokes the <node_type>_prepare() hook, if it exists. This provides the opportunity for the associated module to preprocess any data that requires inclusion into the node object.
To allow any other modules the ability to append or modify the node object, all nodeapi hooks are called with an argument signifying that Drupal is preparing to show the add form.
The way that Drupal processes a form is not described here, but will be covered in a future article.
Now Drupal constructs the data structure that describes the form widgets given the node object data. Before rendering the form, the <module_name>_form_alter() hook is invoked in any modules, allowing the modification of the form data structure. For example, the taxonomy module can use its form_alter hook to insert a form to select classification terms defined for this node type.
Finally, the form data structure is used to render the resulting node presenting the form.
The Edit operation
The Edit operation is similar to the Add operation except a node id is provided in the URL path.
When building a node using the Edit operation, Drupal once again creates a node object to store the data it uses to render the resulting page. As described in View operation, the <module_name>_load and <module_name>_nodeapi hooks are called to allow modules to append or modify the node object data. Of course, if the given node id is not found in the database or the access permissions to edit this node are forbidden, then an appropriate response is presented on the Web page through the Drupal message system.
In the situation where the node id is found and access to Edit is allowed, Drupal follows a process similar to the one described in the Add operation. However, since the node object contains data associated with the given node, the form data structure presents that data within the form widgets when they are rendered.
The Delete operation
Drupal handles the Delete operation in a slightly different way compared to the other operations. While the process creates and populates the node object like the View and Edit operations do, this data is not used in the same way to render the node or form to edit the node data. Instead, the access permissions to delete a node are checked. Drupal then creates a simple form that is rendered to a Web page asking the user to confirm this delete operation.
While the point of this section is not to describe the Drupal form submission process, it is useful to know that the <module_name>_delete and <module_name>_nodeapi hooks are invoked to allow modules to clean up any extended database tables or variables associated with this node type.

Summary
In this article you are introduced to the concepts, terminology, and techniques used in Drupal. These building blocks form the core of the Drupal approach. You learned about:
  • Nodes
  • Blocks
  • Modules and the hook interface
  • URL design and the menu system
  • Users and permissions
  • Theming the look of your Web site
  • The node building sequence
Even though this is a partial introduction, these concepts are key to your understanding the inner workings of Drupal. As soon as you know the basics, it is easier to move forward customizing your environment and Web site.
The next article in this series, Part 6, extends Drupal with a custom module to create announcements for our Web site. You'll get more details about our module, including specific examples of code.

Resources
Learn
Get products and technologies
Discuss

No comments:

Post a Comment

Labels

$100 1 GHz processor 1.2 GHz quad-core Processor 1.6 GHz Quad-core CPU 10 inches 10000 to 20000 1080p 11 inches 12 inches 16GB Transcend MicroSDHC Card 2 GB RAM 20 Inch Led Monitor 2013 idea valentineday 2013 Promise Day Poems 2013 Top 10 Valentines Day Ideas 2013 VALENTINES DAY 308 32 MP camera phablet 32GB MicroSD Card 3809 3D Games 3G 3g tablet 4.5-inch qHD display 4.65-inch Super AMOLED Plus display 400Gbps 4G 4G LTE 5-inch 5-inch phablet 5.7-inch phablet 5000 To 10000 596 7 inch android tab 7 inches 7-inch capacitive touchscreen 8 inches 9 inches A1000 A116 Canvas HD a58 A6X processor AC/ Coolers Accessories Accessories for her Accessories for him according Ace Acer Acer Aspire S3-951 Acer Aspire S3-951 India Acer Aspire S3-951 price in india Acer Ferrari Motion Wireless Laser Mouse Acer Laptops Acer Laser Mouse Acer Liquid C1 Acer Liquid C1 India Acer Liquid C1 price in india Acer Liquid E1 Acer Liquid E1 India Acer Liquid E1 price in india Acer Mobiles Actilife Malt Flavour Daily Nutrition Ad Addons AdexMart Adidas Floters Adidas l39472 Floters Advantages of flexible batteries Advik 2.0 Desktop Speaker AD-SP1510 afp Ainol Ainol Novo 10 Hero II 10 inch tablet Ainol Novo 10 Hero II Price Ainol Novo 10 Hero II price In India Ainol Novo 10 Hero II Review Ainol Novo 7 Venus Features Ainol Novo 7 Venus Price Ainol Novo 7 Venus price in india Ainol Novo 7 Venus Review Ainol Novo 8 Dream 8 Inch Tab Ainol Novo 8 Dream Features Ainol Novo 8 Dream Price In India Ainol Novo 8 Dream Review Ainol Novo 9 Spark 9 Inch Tablet Ainol Novo 9 Spark Price Ainol Novo 9 Spark price In India Ainol Novo 9 Spark Review Ainol Novo 9 Spark Tablet Airtel DTH Recharge Airtel Offers Airtyme Diego 3G Calling Tablet Airtyme Diego 3G Calling Tablet Price Airtyme Diego 3G Calling Tablet Price In India Airtyme Diego 3G Calling Tablet Review Ajax alcatel alcatel lucent Alcatel Mobiles Alcatel One Touch Fire Alcatel OT 4005D Alcatel OT 4005D India Alcatel OT 4005D price in india Alcatel OT 4010E Alcatel OT 4010E India Alcatel OT 4010E price in india Alcatel OT 5020E Alcatel OT 5020E India Alcatel OT 5020E price in india Alcatel specifications All Allschoolstuff AllSchoolStuff Coupons alpha Alpha A58 Amazon Amazon 10 percent discount on phones Amazon 15 percent discount on cameras Ambrane Ambrane Power Bank Amtrak Andorid 4.0 Ice Cream Sandwich Android Android 2.3 android 4.0 Android 4.0 (ICS) smartphone Android 4.0 ICS android 4.1 android 4.1 jelly bean Android 4.2 Android 4.2.2 Android 4.3 Android 4.3 for Google's edition of Samsung Galaxy S4 Android 4.3 leaked screenshots Android Apps Android Basics Android Emulator Android Examples Android ICS Android ICS budget smartphone Android jelly bean Android Native Apps Android SDK Android Security Android Smartphones Android Tips Android Tutorials Anklets Announcement Antivirus anytimeretail AOC LE19A1221/61 AOC LE19A1221/61 LED Monitor AOC LE19A1221/61 Price AOC LE19A1221/61 Price In India app App News Apparels Apparels for her Apparels for him Apple apple competitor Apple iPhone Apple iPhone 5 Apple Mac OS X Apple Mobile Phones appliances Applications APPS Appstore Archos Archos 35 Archos 35 India Archos 35 price in india Archos 48 Platinum Archos 48 Platinum India Archos 48 Platinum price in india Archos 52 Titanium Archos 52 Titanium India Archos 52 Titanium price in india Archos Mobiles Aryan Organic White Chick Peas Ascend Mate ASP.NET ASP.NET Grid View Aspen Asus Asus MeMO Pad Asus MeMo Pad 10 Asus MeMo Pad 10 India Asus MeMo Pad 10 price in india Asus MeMo Pad 10 Tablets Asus MeMO Pad full specifications Asus MeMo Pad ME172V Asus MeMo Pad ME172V India Asus MeMo Pad ME172V price in india Asus MeMo Pad ME172V Tablets Asus MeMO Pad price ATamp;T ativ samsung smart pc Audi A7 AutoCompleteTextView Avast Antivirus Azafran Extra Virgin Sunflower Oil Baby Carrier Baby Clothing Baby Diapers Baby stuffs Baby Toys Babyoye Coupons Backpacks Bags for her Bagskart balaji-motion Basicslife Basicslife Coupons Bata Footin Sandals Battery Life Batting Gloves beats audio Beauty Beetel Beginner Developers Belkin Compact Keyboard K100 Below 5000 below 5000 tablet BenQ BL2201PT 22 Inch LED Monitor BenQ BL2201PT Features BenQ BL2201PT Price BenQ BL2201PT Price In India BenQ BL2201PT Review BenQ BL2411PT 24 INch Led Monitor BenQ BL2411PT Features BenQ BL2411PT Price BenQ BL2411PT Price In India BenQ BL2411PT Review best Best Android Apps Best Mobile Phones Best of the web best online price Best Poem for Promise Day 2013 Best Websites bestonlinedeals Bestylish Bestylish Coupons Beverages Big Bazaar April Utsav Bikes BlackBerry BlackBerry Mobile Phones BlackBerry Z10 block Blogger Bloging blogspot BLU Mobiles BLU Quattro 4.5 HD BLU Quattro 4.5 HD India BLU Quattro 4.5 HD price in india BLU Quattro 5.7 HD BLU Quattro 5.7 HD India BLU Quattro 5.7 HD price in india Bluetooth headsets board Bollywood Bombay Dyeing Bath Towels Book/ Papers books Books amp; CDs Books amp; Music Bracelets brand Brazil breaking Broad Band browser BSNL Data Card BSNL TTA Practice Workbook budget phone budget phones in India budget smartphone budget smartphones budget tablet budget tablets Bus Tickets Business business phone buy buy online Buy Samsung Galaxy Core online Buying Guides Byond B51 Byond B54 Byond B63 Byond B65 Byond B65 specification byond mobiles Byond Tech Phablet PIII Cabana Bath Towels Cabana Hand Towels Cabarelli Premium Wallets CakePHP Calendar Plugins Camcoders Camera Camera Accessories camera app camera quality cameras Canon Canon A2300 Digital Camera Canon Digital Cameras Canon EOS 70D 20 Megapixel DSLR Canon EOS 70D Price Canon EOS 70D Price in India Canon EOS 70D Review Canon IXUS 135 India Canon IXUS 135 Price Canon IXUS 135 Price in INDIA Canon PowerShot A2500 India Canon PowerShot A2500 Price Canon PowerShot A2500 Price in INDIA canonical canvas Canvas 3 Canvas 3 Features Canvas 3 Micromax Canvas 3 price Canvas 3 Specifications Car Parking Reverse Sensors Carrier amp; Education cars Casual Cross Pockets Woven Cargo Shorts Cavallini Deodorants CCIT CDN Celkon Celkon A119Q Signature HD price in India Celkon A79 Celkon A79 India Celkon A79 price in india Celkon A8+ Celkon A8+ Price Celkon A8+ Price In India Celkon A8+ Review Celkon A87 Celkon A87 India Celkon A87 price in india Celkon A9+ price in India Celkon CT910 Tab Celkon CT910 Tab India Celkon CT910 Tab price in india Celkon CT910 Tab Tablets Celkon Mobiles Celkon Signature A107 One price in India Celkon Signature HD A118 Celkon Signature HD A118 price Celkon Signature HD A118 price in India Celkon Signature HD A118 specifications Cenizas Hand Towels censor Chaining Champion cheating Chicco Aftersun Milk Lotion china chinese leak chrome + chrome os Chromebook chromebook pixel Classmate Octane Gel Pens Client Side Validation Clothing CMS CodeIgniter CodeProject CoffeeScript college Colorfly CT132 13.3quot; Tablet Colorfly CT132 Price Colorfly CT132 Price In India Colorfly CT132 Review common compact companion handset company Comparision Comparisions compass Computer Accessories Computer Parts computers Concept Confectionery Contacts Contacts API 2.0 Content Provider ContentResolver CONTESTS Context Menu control Cool Tips and Tricks Coolpix Coolpix A Coolpix P330 Corning Cosmetics Cosmetics amp;Accessories Costa Coffee Cotton Designer Bed Sheets Cotton Double Bedsheets Cotton Stretch Briefs could country coverage.ec cPanel Craftsvilla crazeal Cre Loaded Create Collage Cricket Bails Cricket Bats Cricket Soft Balls Cricket Stumps cromaretail Crystal Nonstick Cookwares Crystal Premium Nonstick Cookware css CSS Selectors Cubic Zircon Mangalsutra curl Curved Glass customer Cute Valentine’s Day Ideas Cute Walk Clogs Daily Deal Sites Daily Meals Daily Use Products dailydeals Dalvik error format Data Card Data storage Database Datacard Datacards Date Picker Dating sites Davidoff Cool Water EDT De Deal of Day deals delhi Dell Dell Inspiron Ultra N5423 core i3 Laptop Dell Inspiron Ultra N5423 Price Dell Inspiron Ultra N5423 Price In India Dell Inspiron Ultra N5423 Review Dell XPS Denim EDT 100ml Deodrants amp; Perfume design designer Designer Analog Watch Designer Wine Glass Devante Developer Tutorial Developers Development device Digisol DG-BA3370 Digisol DG-BA3370 3G datacard Price In India Digisol DG-BA3370 3g Datacard Review Digisol DG-BA3370 Price Digital Camera Pouch Digital Camers and Camcorders Digital Clock Digital Photography Digital SLR Camera director Discount Coupons Dish Network DishaPublication Coupons Disney School Bags Disney Shoes Disney Toddler School Bags display displays Diva Designer Kurtis DMCA DNA DNA Base Sequence DNA Fingerprinting DNA structure DogSpot Domain Domestic Flights Dominos Pizza Coupons Downloads Dr. Gene Digital Thermometer DropDown DropDownList Drupal DSLRs dual core dual sim phone Dual SIM tablet dual-core processor dual-core processor phablet dual-core processor smartphone dual-sim Dynamic UI e choice E-Commerce Plugins Earn Money Earrings ebay eBay Coupons Ebooks Eclipse Eclipse Configuration Edu-Slide i1017 educational egypt egypt protest Electronics Electronics amp; Appliances Email Marketing engineering jobs english Envy Half Sleeves Blue Shirt Equipments Error Etab Connect etab connect price Etab Connect specifications Eureka Forbes Aquasure Xtra Tuff Water Purifier Eureka Forbes Water Purifier Event namespacing Events ExerPedal Mini Bike Exmor RS External Hard Disks exynos 5410 exynos octa eye tracking ezoneonline eZoneOnline Coupons Fabiano Appliances Induction Cooker Fablet F2 Fablet F2 specs Fablet F3 Fablet F3 specs FabLooms Carpets FabLooms Reversible Bath Mat facebook Facebook Phone facebook tool bar faculty FAEA F1 Features FAEA F1 Price FAEA F1 Price In India FAEA F1 Review fashion Fashion Accessories Fashion Garments fashionandyou Fashionara Fashionara Coupons Fast Foods featimg feature phone featured Featured Pots featurephone features february Feed button forms Fermai Men 80265 Fermai Men 80625 Fermani Men 1524 Fermani Men 6046 Fermani Men 7731 Fermani Men 7847 Fermani Men 882 Fermani Men 991 Fermani Men SURVIVOR Fevikwik Instant Adhesive Fiat Linea film Fire Fox Firefos OS Firefox Firefox OS Firefox OS based smartphone Firefox OS features Firstcry FirstCry Coupons Flexible batteries Flexible Glass flipkart Flipkart Coupons Floating Touch Floyd Opulent Sunglasses Fly fonepad Food amp; Drinks Food Deals Footwear Footwears for her Footwears for him Frameworks france telecom FREE Free Antivirus Free Driver Download Freebie Freebies Freecharge Coupons Freecultr Freeware friday fuel charger FujiFilm FujiFilm Digital Cameras Fujifilm FinePix S6800 India Fujifilm FinePix S6800 Price Fujifilm FinePix S6800 Price in INDIA Fujifilm X-M1 Fujifilm X-M1 Price Fujifilm X-M1 Price In India Fujifilm X-M1 Revealed Fujifilm X-M1 Review Full HD display smartphone full specifications Furniture and Accesories futurebazar Gadget Reviews gadgets galaxy Galaxy Ace Galaxy core Galaxy Note 8.0 galaxy s 4 galaxy s flagship Galaxy S IV Galaxy S4 Gallery game errors gamestick console kickstarter Gamestick features gamestick kickstarter gamestick price Gaming Garnier Deodorants Gas Saver Nets General Geo Location Gesture Control gesture recognition Gifts and Choclates Gingerbread Gionee Gionee CTRL V4 Gionee CTRL V4 price Gionee CTRL V4 Price In India Gionee CTRL V4 Review Gionee CTRL V4 specifications Gionee CTRL V4 Specs Gionee Dream D1 Gionee Dream D1 full specifications Gionee Dream D1 India Gionee Dream D1 price in india Gionee Elife E6 Gionee Elife E6 price Gionee Elife E6 specifications Gionee launch in India Gionee Mobiles Gmail good graphic design Goodlife Coupons goodslife Google Google Ads Google Adsense Google Analytics Google Chrome Google Chrome Extensions Google Docs google drive Google Glass Google Play Google Play Books google play store Google Plus Google Services Google Site Clinic Google Stores Google Traffic Gorilla Glass gradiente eletronica Grand Memo Graphic Design graphics Green PHOLED Green Tech Greendust Coupons GridView Hackintosh halo value Handloomwala Sofa Covers hands-on Hang Designer Door Curtain happy Happy Promise Day 2013 Poem Happy Promise Day 2013 Poems Happy Promise Day Poems in English Hardware harvard harvard-university HCL HD HD A119Q HD display Head Headphones Health Accesories Health amp; Beauty Health amp; Fitness Here Maps Home Home amp; Accessories Home amp; Kitchen Home Appliances Home Decor Home Furnitures Home Supplies HomeShop18 Homeshop18 Coupons hotdeals How flexible batteries work How to How to use jQuery HP HP Laptops HP Optical Mouses HP Pavilion 14 Chromebook HP Pavilion 14 Chromebook India HP Pavilion 14 Chromebook price in india htaccess HTC HTC Butterfly HTC desire 200 HTC desire 200 price HTC desire 200 specifications HTC Desire 600 dual SIM HTC Desire 600 features HTC Desire 600 launched in India HTC desire 600 online availability HTC Desire 600 price in India 2013 4th July HTC Desire 600 specifications HTC Desire XC HTC Desire XC Price HTC Desire XC Price IN India HTC Desire XC Review HTC Mobiles HTC Myst HTC One htc one x HTC Sense HTC Tiara HTC Tiara India HTC Tiara price in india Html Huawei Huawei Ascend G330 Huawei Ascend G600 Huawei Ascend Mate Huawei Ascend Mate online Huawei Ascend Mate price Huawei Ascend Mate specifications Huawei Ascend P2 Huawei Ascend P2 India Huawei Ascend P2 price in india Huawei Ascend P6 Huawei Ascend P6 release date Huawei Ascend P6 specifications Huawei Ascend P6 videos Huawei Ascend Y300 Huawei Ascend Y300 India Huawei Ascend Y300 price in india Huawei Mobiles Hushbabies HushBabies Coupons Hyperlink Hyundai T7 Hyundai T7 India Hyundai T7 price in india Hyundai T7 Tablets iBall iBall Slide 7334i iBall Slide 7334i Price iBall Slide 7334i Price In India iBall Slide 7334i Review iBall Slide i6012 iBall Slide i6012 India iBall Slide i6012 price in india iBall Slide i6012 Tablets ice Idea Mobiles Idea Zeal 3G Idea Zeal 3G India Idea Zeal 3G price in india Image Effects Image Gallery Image Map Plugins Image Plugins Images ImageSwitcher ImageView imei Improved Camera App Inco Mirror Inco Mirror India Inco Mirror price in india Inco Mobiles india india-wide IndiaTimes Indiatimes Midnight Sale Indiatimes Shopping Coupons infibeam Infibeam Coupons Infibeam Magic Box Deals INFO information informative Infrared Forehead Thermometer Inkfruit Inspiration Instagram Plugins Instal Stock Android on HTC One Instal Stock Android on Samsung Galaxy S4 INTEL intel atom Intel Atom Z2420 Intel Atom Z2580 Intel Inside Intel Xolo X910 Mobile Phone Interchangeable Lens internet internet marketing Internet Updates interview Interview Questions Intex Intex Aqua i5 Intex Aqua i5 lowest price Intex Aqua i5 price Intex Aqua i5 price in India Intex Aqua i5 specifications Intex Aqua Style Intex Aqua Style full specifications Intex Aqua Style India Intex Aqua Style price in india Intex iTab Intex Mobiles Intex phablet Investors iOS iOS 6.1 IP Address IP address information using jQuery iPad iPad 4 iPad 4 price and availability in India iPad 4 with 128GB iPad 4 with Retina Display iPads Iphone iPhone 5 iphone apps ipods Iris 430 budget smartphone Iris 430 price in india Iris 430 specifications Iris 502 Italian Optical Frames iWatch Jabong Jaipan Mango Shaker Jaipur Kurtis Jaipuri Printed Summer Blanket Japan Java Based OS Javascript jdk1.6.0_21 jeetendra Jeggings Jelly Bean jelly bean tablet JellyBean JellyBean 4.2 Jewellery Jewellery and Gold coins Jiayu Jiayu G4 Jiayu G4 online availability Jiayu G4 price in Inda Jiayu G4 specifications job Jockey Briefs Jockey Innerwears Jockey Physical Man EDT 100ml John Carry Trousers Joomla Joomla Customization Josh Fortune HD Josh Fortune HD Price Josh Fortune HD Price In India Josh Fortune HD Review jquery jQuery 1.7 jQuery 1.9 jQuery 2.0 jQuery Ajax jQuery and Ajax jQuery Array jQuery Calendar Plugins jQuery CDN jQuery Chaining jQuery Clock Plugin jQuery Code Examples Jquery Code Snippets jQuery Codes jQuery DatePicker jQuery Debugging jQuery Digital Clock jQuery Error jQuery Events jQuery For Beginners jQuery Instagram Plugins jQuery is not defined jQuery Mistakes jQuery Modal Plugins jQuery News jQuery News ticker plugin jQuery Plugin 2013 jQuery Plugins jQuery Popup Plugins jQuery Selectors jQuery Source Map jQuery Tips jQuery Training jQuery UI jQuery UI DatePicker jQuery Validation jQuery webticker plugin jQuery With Ajax jQuery With ASP.NET jQuery YouTube jUnit Just For Men Shampoo Karbonn Karbonn A1 Plus Karbonn A12 Karbonn A12 full specifications Karbonn A12 online Karbonn A30 Karbonn K75 Karbonn K75 India Karbonn K75 price in india Karbonn Mobile Phones karbonn Mobiles Karbonn Smart Tab 8 Velox Karbonn Titanium Karbonn Titanium S6 Karbonn Titanium S6 india Karbonn Titanium S6 Price Karbonn Titanium S6 Price In india Karbonn Titanium S6 Review Karbonn Titanium S6 specifications Karbonn Titanium S9 Karbonn Titanium S9 Features Karbonn Titanium S9 launch in India Karbonn Titanium S9 Price Karbonn Titanium S9 price in India Karbonn Titanium S9 Review Karbonn Titanium S9 specifications Karbonn Titanium S9 vs Karbonn Titanium S5 Katrina Kaif Kids Kids amp; Baby Kids amp; Teens Kids/Teens king kitchen Kitchenware kobian Kobian Mercury mTAB Lite Kobian Mercury mTAB Lite price Kobian Mercury mTAB Lite specifications Kobo Arc Kobo Arc India Kobo Arc price in india Kobo Arc Tablets Konex Chess Board Konka Expose Konka Tango Konka Tuxedo Konka Viva Korean Kurtas Landmark Gift Vouchers Language Translate Plugins laptop Laptop / Tablet Hybrid Laptop Accessories Laptop Bags Laptop Sleeves laptops Laser Printer launch launch in India lava Lava E-Tab Connect Lava E-Tab Connect India Lava E-Tab Connect price in india Lava E-Tab Connect Tablets Lava E-tab Z7S EDGE Lava E-tab Z7S EDGE India Lava E-tab Z7S EDGE price in india Lava E-tab Z7S EDGE Tablets lava Etab Connect lava Iris 430 Lava Iris 430 India Lava Iris 430 price in india Lava Iris 502 Lava Iris 502 India Lava Iris 502 price in india Lava Iris 504Q Lava Iris 504Q availability Lava Iris 504Q online Lava Iris 504Q price Lava Iris 504Q Price in India Lava Iris 504Q review Lava Iris 504Q specifications LAVA Mobiles LCD Televisions leak Learn jQuery Leather Wallets Lemon Lemon Mobiles Lemon P100 Note Lemon P100 Note India Lemon P100 Note price in india Lenovo Lenovo A1000 Lenovo A1000 India Lenovo A1000 price in india Lenovo A1000 Tablets Lenovo A3000 Lenovo A3000 India Lenovo A3000 price in india Lenovo A3000 Tablets Lenovo IdeaPhone S890 Lenovo IdeaPhone S890 India Lenovo IdeaPhone S890 price in india Lenovo Mobiles Lenovo S6000 Lenovo S6000 India Lenovo S6000 price in india Lenovo S6000 Tablets Lenovo S820 Lenovo S920 Lens and Sunglasses Lenskart Leonardo Mango Premium Pickle LG LG 20EN33TS 19.5 INch LED Monitor LG 20EN33TS Price LG 20EN33TS Price In India LG 20EN33TS Review LG 22EN33T LG 22EN33T 21.5 Inch LED Monitor LG 22EN33T Price LG 22EN33T price In India LG Google Nexus 4 Mobile Phone LG MH2042DW 20 Litre Stylish Grill Microwave Oven LG MH2042DW Price LG MH2042DW Price In India LG MH2042DW Review LG Mobile Phones LG Mobiles LG Nexus 4 Mobile Phone LG Optimus LG Optimus F5 LG Optimus F5 India LG Optimus F5 price in india LG Optimus G Pro LG Optimus G Pro india LG Optimus G Pro launch in India LG Optimus G Pro price in India LG Optimus G Pro review LG Optimus G Pro specifications LG Optimus L3 II LG Optimus L3 II India LG Optimus L3 II price in india LG Optimus L4 II Dual LG Optimus L4 II Dual launch in India LG Optimus L4 II Dual price in India LG Optimus L4 II Dual specifications LG Optimus L5 II LG Optimus L5 II India LG Optimus L5 II price in india LG Optimus L7 II Dual LG Optimus L7 II Dual India LG Optimus L7 II Dual price in india LG Optimus L9 P765 lightest link error linux ListView LiveSight Localhost Logitech Universal Remote Harmony 200 low cost phablet lowest price in indai LTE Lumia Lumia 520 Lumia 520 price Lumia 520 specifications Luxury mac Mac on Windows madhya pradesh Magazine magento maharashtra Makemytrip Coupons MakeMyTrip Travel Vouchers Mango Premium Pickle Map Marker Plugins March 14 Galaxy S4 launch March 14 XOLO launch Market Cap Market leader Masticart Masticart Coupons Matrix Maxtouuch Maybelline Baby Lips Maybelline BB Cream Maybelline Colossal Kajal medical MeMO Pad full specifications MeMO Pad ME172V MeMO Pad price in India MemoryCards Men Mens Apparel Mice and Keyboards Micromax Micromax A35 Bolt Micromax A35 Bolt full specifications Micromax A35 Bolt price in india Micromax A89 Ninja full specifications Micromax A89 Ninja launch date Micromax A89 Ninja price in indai Micromax Bolt series Micromax Canvas Micromax Canvas 3 Micromax Canvas 3 Features Micromax Canvas 3 Price Micromax Canvas 3 Price In India Micromax Canvas 4 Micromax Canvas 4 expected price Micromax canvas 4 images Micromax Canvas 4 leaked pictures Micromax Canvas 4 leaked specifications Micromax Canvas 4 preorder Micromax Canvas 4 price Micromax canvas 4 release date Micromax Canvas 4 specifications Micromax Canvas A92 Lite Micromax Canvas A92 Lite online Micromax Canvas A92 Lite pre-order Micromax Canvas A92 Lite price Micromax Canvas A92 Lite specifications Micromax Canvas HD A116 Micromax Canvas HD A116 Mobile Phone Micromax Funbook P600 Micromax Mobile Phones Micromax Mobiles micromax ninja Micromax Ninja A89 Micromax tablet microsoft Microsoft Bluetooth Keyboards Microsoft Bluetooth Mobile 5000 Keyboard Microsoft Office 2013 Microsoft Stores in India Microsoft Surface Microsoft Windows Microsoft windows stores in India Microwave Oven midc Middaysale Coupons Middaysales Milleramp;Schweizer Shirts minister Mirchimart Coupons Miscellaneous Mobile Mobile Accesories Mobile Accessories mobile charge Mobile Phones Mobile Prices in india Mobile Recharge mobile roaming charges Mobile World Congress Mobilephones Mobiles mobilestore Modal Window Modal Window Plugin Money Making Monitors Morphy Richards Hand Blender HB-05 Morphy Richards Hand Blenders Mortein Power Gard Power Booster motion Motorola MP3 Players MSI mtk Multiple Categories Music Players muslim mwc MWC 2013 mwc2013 Myntra Myntra Coupons Myntra Mid Season Sale Mysore Rose Soap Mysql Myst naaptol Nabi Nakshatra Style Nose Rings NameCheap ncert Necklace Sets Necklaces netherlands network New Project new technologies in gaming News nex-3n nexus Nikon Nikon Coolpix Nikon Coolpix L27 India Nikon Coolpix L27 Price Nikon Coolpix L27 Price in INDIA Nikon D3100 14MP Digital SLR Camera Nikon D7100 India Nikon D7100 Price Nikon D7100 Price in INDIA Nikon Digital Cameras Nilkamal Computer Table Nilkamal Leo Computer Table Nissan Nissan Micra Active Ex Showroom Nissan Micra Active Hatchback Nissan Micra Active INdia Nissan Micra Active Price Nissan Micra Active price In India Nissan Micra Active Review Nokia Nokia 105 Nokia 105 India Nokia 105 price in india Nokia 301 Nokia 301 India Nokia 301 price in india Nokia Asha Nokia Asha 210 Nokia Asha 210 features Nokia Asha 210 pre-order Nokia Asha 210 price in India Nokia Asha 210 specifications Nokia Asha 210 video Nokia Asha 311 Mobile Phone nokia asha 501 Nokia Asha 501 critic review Nokia Asha 501 full specifications Nokia Asha 501 launch in India Nokia Asha 501 online Nokia Asha 501 online availabily Samsung Galaxy Star Duos Nokia Asha 501 pre-order Nokia Asha 501 preorder Nokia Asha 501 price Nokia Asha 501 price in India Nokia Asha 501 specifications Nokia Lumia 520 Nokia Lumia 520 price Nokia Lumia 520 specifications Nokia Lumia 720 Mobile Phone Nokia Lumia 920 Mobile Phone Nokia Maps Nokia Mobile Phones Nokia Mobiles Nonstick Cookwares Nostra Casual Polo T-Shirt Note 510 note II Notebook Novels Nugen AND 5 Nugen AND 5 Price Nugen AND 5 Price In India Nugen AND 5 Review nVidia Nvidia GeForce 302.82 nvidia tegra 4 nvidia tegra 4 chimera computational photography nvidia tegra 4i NXI Offers on Amazon India official Olympus Olympus Digital Cameras Olympus Stylus XZ-10 India Olympus Stylus XZ-10 Price Olympus Stylus XZ-10 Price in INDIA One Touch Snap One Touch Snap LTE Onida ONIDA KYT005 Dual Sim ONIDA KYT005 Price ONIDA KYT005 Price In India ONIDA KYT005 Review Online Online Air Ticket Sites Online Business online collaboration tool Online Tips open source operating system Oppo Find 5 Oppo Find 5 mini Oppo Find 5 price in India Oppo Find 6 Oppo FInd 7 Oppo Find 7 launch Oppo FInd 7 specifications optical link' OptiContrast Optimus Optimus F Optimus F5 Optimus F7 Optimus L7 II Dual features Optimus L7 II Dual launch date Optimus L7 II Dual price Optimus L7 II Dual specifications Options Menu orange Orkia MP3 Player Orpat Steam Iron OEI-607 Orpat Steam Irons OS Osia Italia Shirts Other Others Outdoor outlook Palm Panasonic Panasonic Digital Cameras Panasonic Hair Dryer EH-ND13 Panasonic Ivory Split AC Panasonic Lumix DMC-F5 14 Megapixel Camera Panasonic Lumix DMC-F5 price Panasonic Lumix DMC-F5 Price In India Panasonic Lumix DMC-F5 Review Panasonic Lumix DMC-LZ20 Digital Camera Pantech Discover Pantech Discover India Pantech Discover price in india Pantech Mobiles Park Avenue Grooming Kit Parse HTML Parse JSON Parse XML Payment Module Paypal PC/CONSOLE PCBC Duffle Bags Pebble Smartwatch Pebble Smartwatch Price Pebble Smartwatch Price In India Pebble Smartwatch Review Pendants PenDrives Pens/Pencils pepperfry Pepperfry Coupons Pepsodent Whitening Toothpaste Performance Perfumes personal care Personalized Products phablet phablets Philips Bluetooth Mono Headset SHB1400 Philips Computer Speakers Philips Hair Dryer HP4940 Philips Hair Dryers Philips Home Theater HTS2400 Philips Micro Hi-Fi System DCD132 phone strap phone strap 2 phone strap 2 wx06a Photo Gallery Photo Gallery Plugins Photo Slideshow photos Photoshop PHP PHP Developers PHP Interview Questions physical Picker Views Pilot run Pinterest Layout Plugin Pinterest Plugins Pizza Hut Coupon Codes Pizza Hut Coupons PL/SQL plastic Play Store Poem for Valentine Promise Day poems Poems on Promise Day Point-and-Shoot Polaroid Police Men Deodorants Polo Club Travel Bags pop portable charger portable mobile charger portable usb charger Power Bank AP4000A PowerTrekk portable charger ppi pradesh Precious Metals Premium Nonstick Cookwares Premium Tab Maya-81 Price Premium Tab Maya-81 Price In India Premium Tab Maya-81 Review Presentation Tools president PressReader price price in India price Micromax Canvas 3 Prices in india Princeware Jumbo Storage Set Priya Envy Tiffin Box Problem Fixes Processor Product Guides Profits promise day 2013 promise day 2013 poems Promise day 2013 Poems in Hindi promise day 2013 quotes promise day best quotes pros n cons published Qr codes quad core quad core phablets quad-core phablet quad-core processor quad-core Tegra 3 Nvidia phablet Qualcomm qualcomm snapdragon 800 qualcomm snapdragon 800 clock speed quote Promise day 2013 quotes quotes for Promise day 2013 quotes Promise day 2013 ram Ramos Rating Plugins Ratings amp; Reviews RealEstate Sites recent Recharge Recharge Deals Recron Pillows Red Rose rediff Rediff Coupons Reebok Mobile Runner Shoes release Releases Reliance Reliance Industries Reliance Industries Limited Renater Research resolution resources Resturants Retail review reviews REX REX 60 REX 70 REX 80 REX 90 REX Series Reynolds Trigger Pens right RIL Rings ringtones Ritz Canisters Roadster Jeans Roadster Men Blue Indigo Dyed Jeans Roadster Women Electric Blue Slim Fit Jeans Roundups rs-i-clinician-medical Rss Feed Ruby rumor rumors Rumour s4 S820 S920 saholic Saint Gobain Sale Salora Salora Mobiles Salora POWER Maxx Z1 Salora POWER Maxx Z1 India Salora POWER Maxx Z1 price in india Sample Code Download Samsung Samsung ATIV Book 9 Lite Samsung ATIV Book 9 Lite Price Samsung ATIV Book 9 Lite price In INdia Samsung ATIV Book 9 Lite Review Samsung ATIV One 5 Style Features Samsung ATIV One 5 Style Price Samsung ATIV One 5 Style Price In India Samsung ATIV One 5 Style Review Samsung ATIV Q Samsung ATIV Q specs Samsung Ativ Smart PC buy online in India Samsung Ativ Smart PC lowest price in india Samsung Ativ Smart PC reviews Samsung Bluetooth Headset HM1200 Samsung Bluetooth Headsets Samsung Galaxy Samsung Galaxy Core Duos Features Samsung Galaxy Core Duos Price Samsung Galaxy Core Duos Price In India Samsung Galaxy Core Duos Review Samsung Galaxy core price Samsung Galaxy Core specifications Samsung Galaxy Grand Samsung Galaxy Nexus Samsung Galaxy Note Samsung Galaxy Note 2 Samsung Galaxy Note 8.0 full specifications Samsung Galaxy Note Mobile Phone Samsung Galaxy NX Camera Features Samsung Galaxy NX Camera Price Samsung Galaxy NX Camera Price In India Samsung Galaxy NX Camera Review Samsung Galaxy S IV Mini Samsung Galaxy S IV Mini India Samsung Galaxy S IV Mini price in india Samsung Galaxy S3 samsung galaxy s4 Samsung Galaxy Star Samsung Galaxy Star Duos online availability Samsung Galaxy Star Duos price in India Samsung Galaxy Star Duos specifications Samsung Galaxy Star India Samsung Galaxy Star price in india Samsung Galaxy Tab 2 311 Samsung Galaxy Tab 2 311 Features Samsung Galaxy Tab 2 311 Price Samsung Galaxy Tab 2 311 Price In India Samsung Galaxy Tab 2 P3110 Samsung Galaxy Tab 3 Samsung Galaxy Tab 3 India Samsung Galaxy Tab 3 price in india Samsung Galaxy Tab 3 Tablets Samsung Mobile Phones Samsung Mobiles Samsung S20C300BL Led Monitor Samsung S20C300BL Price Samsung S20C300BL Price In India Samsung S4 Samsung Tab 2 311 tablet samsung vs apple Samsung WB110 20 megapixel Samsung WB110 Price Samsung WB110 Price In India Samsung WB110 Review saturday satvikshop Satvikshop Coupons scandal School Stationery Scomp Techno Tab Plus Scratch Guards Screen size scrolling seagate central seagate central availability in India seagate central price in India seagate wireless plus seagate wireless plus availability in India seagate wireless plus price in India Search engine optimization Selectors SEM Tips SEO SEO tips Server Virtualization Sesa Hair Care Seventymm Coupon shares Sheets amp; Bedding Sets Shoes/ Socks shopclues ShopClues Coupons Shopping Cart Plugins Signature HD A118 Silver Coins Sim Card Slot Simmtronics Skott Ahn Sleeveless Frocks SLT-A58 Small Business smallest Smart PC Pro buy online in India Smart PC Pro lowest price in india Smart PC Pro reviews smart tv smartphone Smartphones SmartWatch Smarty Smatphone SMO Snap View function snapdeal Snapdeal Coupons SnapDragon snapdragon 200 snapdragon 400 snapdragon 600 Snapdragon 800 Snapdragon Battery Guru Social Media Optimization Social Networking Softrax Battery Operated Hummer Software softwares Softwear T-Shirts Sonata Ecstatic Watch Sony Sony Cybershot DSC - W610 Digital Camera Sony Cybershot DSC-S5000 India Sony Cybershot DSC-S5000 Price Sony Cybershot DSC-S5000 Price in INDIA Sony Digital Cameras Sony DSC-S5000 Digital Camera Sony Ericsson Sony Mobile Phones Sony Mobiles SONY VAIO VPCF223FX Sony Xperia Sony Xperia C670X Sony Xperia C670X India Sony Xperia C670X price in india Sony Xperia Honami Sony Xperia i1 Honami Sony Xperia i1 Honami leak Sony Xperia i1 Honami specifications Sony Xperia T Sony Xperia T Jelly Bean update Sony Xperia Tablet Z Sony Xperia Tipo Sony Xperia Z Sony Xperia Z Ultra Sony Xperia Z Ultra launch date Sony Xperia Z Ultra launch in India Sony Xperia Z Ultra leaked pictures Sony Xperia Z Ultra price Sony Xperia Z Ultra specifications Sony Xperia Z Ultra specs Sony Xperia ZL Source Map SPC Speakers specifications specs spend valentines day Spice Spice Coolpad Mi-515 Features Spice Coolpad Mi-515 Price Spice Coolpad Mi-515 Price In India Spice Coolpad Mi-515 Review Spice Coolpad Mi-515 specifications Spice Coolpad Mi515 online Spice Coolpad Mi515 price in India Spice Coolpad Mi515 specifications Spice Mi-435 Stellar Nhance Spice Mi-530 Spice Mi-530 India Spice Mi-530 price in india Spice Mobiles Spice Stellar Nhance Mi-435 Spice Stellar Nhance Mi-435 India Spice Stellar Nhance Mi-435 price in india Spice Stellar Virtuoso Pro Spice Stellar Virtuoso Pro launched Spice Stellar Virtuoso Pro price in India Spice Stellar Virtuoso Pro specfications Spinner SQL SQLIte DB starcj Start Menu state state government jobs Stationery Stellar Prime Mi-510 specifications Stock Android Stocks store Stores stylus sulekha Sunglasses Sunpad Super Max Ultimate Shave Foam Supplements Surface Surface smartphone Suzuki Intruder M800 SWIPE Swipe Halo Value Swipe Halo Value India Swipe Halo Value price in india Swipe Halo Value Tablets Symfony Syntax Highlighters sysprobs System Updates TabActivity TabHost TabLayout Table of Contents Tablet Tablet Kiosk Tablet PC Tablets Tablets In tablets in india Tabs TabWidget TastyKhana Coupons Tata DOCOMO Tata Tea Gold TCL Idol X Features TCL Idol X Price In India TCL Idol X Review TCL Idol X Specs Team Collaboration Teaser tech amp; sci Tech News tech specs Tech Updates Technopedia Television Test Coverage Tickets tips Tips and Tricks Tips To Get Traffic Titan Men Watches Titan Women Watches tool toolkit Top Top 10 Top 10 Valentines Day Top 10 Valentines Day Ideas Top 10 Valentines Day Ideas 2013 Top 5 3D TVs Top 5 Games Top 5 Netbooks top 5 tablets Toshiba Toshiba 32quot; LED Television touchscreen Tourist Destinations Towels and Bedsheets Toys Toys amp; Games trademark tradus Tradus Coupons Training Travel Travel Accessories Travel amp; Tour TravelDeals Tresorit Tricks Triluminous Try jQuery Tutorials TV TV and Monitors TV/LCD TVC Mobiles TVC Nuclear SX 5.3i TVC Nuclear SX 5.3i India TVC Nuclear SX 5.3i price in india Twitter Ubislate UBUNDU Ubuntu UI Programmatically UI through Code Umi Mobiles Umi X1 Umi X1 India Umi X1 price in india UMI X2 UMI X2 delivery UMI X2 delivery date UMI X2 full specifications UMI X2 Status India united states Upcoming update Upgrade Upgrade ICS to Jely Bean upgrade Xperia T to Jelly Bean US USB Mobile Phone Charger usefull User Interface Vacuum Cleaners valentine valentine day Valentine Day 2013 Valentine Day 2013 idea Valentine Day 2013 ideas Valentine Day 2013 ideas for London Valentine’s Day Valentine’s Day 2013 idea valentines Valentines Day 2013 Valentines Day 2013 ideas valentines day dinner Valentines Day idea 2013 valentines day ideas Valentines Day Ideas 2013 Valentines Day Ideas unique.Valentines Day 2013 Valentines Promise Day 2013 Poems Validation Varun Stainless Steel CB Tope Veede Vega Rechargeable Vacuum Cleaner Vega Vacuum Cleaners Vertu Vertu Mobiles Vertu Ti Vertu Ti India Vertu Ti price in india Video Slideshow Videocon Videocon A26 Videocon A26 Dual Sim Videocon A26 Price Videocon A26 Price In India Videocon A26 Review Videocon A27 Videocon A27 India Videocon A27 price in india Videocon A55HD Videocon A55HD features Videocon A55HD launched Videocon A55HD price Videocon A55HD specifications Videocon Mobiles videocon tablet videos Views ViewSonic violence VIP Elite Vests VIP Frenchie Briefs VirtualBox Vizio Vizio MT11X-A1 Features Vizio MT11X-A1 Price Vizio MT11X-A1 Price In India Vizio MT11X-A1 Review vlc player VMware Vodafone voice calling tablet W3C Wall papers Wallets for him Wammy Mobiles Wammy Passion Y HD Wammy Passion Y HD India Wammy Passion Y HD price in india Watch Watches Watches for her Watches for him Waterproof Web app web bugs Web Design Web Development web development tools Web Hosting Web Server web SSL Certificate Web Tools web-design web-development Webcams webmaster tools webOS Website Advice from Google Website Design Mistakes websites WebView What is jQuery WickedLeak WickedLeak Wammy Passion Y HD WiFi tablet WikiPad willcom Willow Glass Window 8 style notification windows Windows 7 windows 7 Genuine Advantage Notification Windows 7 Tricks Windows 8 windows 8 based hybrids windows 8.1 Windows and Android hybrid windows phone windows phone 8 Windows Stores in India Windows Tricks Wireless Charger DT-900 wireless phone wishes Women Women Body Shapers Women's Apparel Women's Nightwears Womens Capris Wood-O-Plast Dart Board Wordpress wordpress Calendar plugins Wordpress Fix Wordpress Plugins Wordpress queries words words-quotes world wx06a Wynncom G51 Wynncom G51 India Wynncom G51 price in india Wynncom Mobiles X-Reality Xbox Music Redesigned Xiam Technologies Limited XML XML Inflate xolo XOLO 1000 XOLO Clover Trail+ smartphone XOLO Intel dual-core smartphone XOLO Intel smartphone Xolo Mobiles XOLO new smartphone XOLO new smartphone launch XOLO new smartphone launch March 14 Xolo Q600 Xolo Q600 price in India Xolo q600 released in India Xolo Q600 specification review Xolo Q600 specifications Xolo Q800 Xolo Q800 full specifications Xolo Q800 India Xolo Q800 price in india XOLO smartphones XOLO X500 XOLO X900 XPERIA Xperia E/E dual xperia tablet z Xperia Z xperia zl years-published yebhi Yebhi Coupons Yepme youtube Yumdeals YumeDeals Coupons Zebronics Zebronics H-Vivo Wireless Headphone Zebronics Node MP3 Player Zen Zend Zend Framework Zero Gravity Deodorants Zivame Coupons zoomin Zoomin Coupons Zoop Boys Cars P3H Watch Zopo Zopo 810 Zopo 810 India Zopo 810 price in india Zopo 910 Zopo 910 IndiA Zopo 910 price in india ZOPO 950+ ZOPO 950+ India ZOPO 950+ price in india Zopo C2 Zopo C2 Price Zopo C2 Price In india Zopo C2 Review Zopo Mobiles zopo phablet zopo quad-core Tegra 3 Nvidia Zopo ZP600 Libero 3D Zopo ZP600 Libero 3D India Zopo ZP600 Libero 3D price in india ZOPO ZP810 ZOPO ZP910 Zopo ZP950+ Zopo ZP960 Zopo ZP960 India Zopo ZP960 price in india zte ZTE Blade C ZTE Blade C India ZTE Blade C price in india ZTE Grand Memo ZTE Grand Memo India ZTE Grand Memo price in india ZTE MF190 3g Datacard price ZTE MF190 Datacard Review ZTE MF190 India ZTE MF190 Price In India ZTE Mobiles ZTE Open ZTE Open goes on sale ZTE Open India ZTE Open price ZTE Open price in india Zync Dual 7.0 Zync Dual 7.0 India Zync Dual 7.0 price in india Zync Dual 7.0 Tablets Zync Quad 8.0 Zync Quad 8.0 India Zync Quad 8.0 price in india Zync Quad 8.0 Tablets Zync Quad 9.7 Zync Quad 9.7 India Zync Quad 9.7 price in india Zync Quad 9.7 Tablets