Tuesday, October 13, 2009

Views Bulk Operations (VBO)

This module augments Views by allowing bulk operations to be executed on the nodes displayed by a view. It does so by showing a checkbox in front of each node, and adding a select box containing operations that can be applied on the selected nodes.
If you feel VBO is useful to your business, please consider making a donation through PayPal or contact me directly for paid work. Thanks!


  • Install and enable Views and VBO
  • Click Site building > Views > Add
  • View name = "users", View type = "User"
  • Click "Add display" to create a new page
  • Click Style: Unformatted and select "Bulk Operations", then click "Update"
  • In Page: Style options > Selected operations, select a few operations then click "Update default display"
  • In Fields, press +, then select User: Name, then click "Add" then "Update default display"
  • In Page settings, click Path: None and type "users", then click "Update"
  • Click "Save", then "View Page" (top-right corner)
  • Enjoy your first VBO!


  • Install and enable Views and VBO
  • Click Site building > Views > Add
  • Name = "test"
  • In the Page section, check Provide Page View
  • URL = "test"
  • Select View Type = "Bulk Operations View"
  • In the Fields section, select "Node: Title" then click Add Field
  • Click Save
  • You get a message "No operations are enabled. You must enable one or more operations in order to use Views Bulk Operations."
  • Check a few available operations in the Operations section, then click Save configuration
  • Enjoy your first VBO!


The module works by exposing a new Views 2 Style plugin called "Bulk Operations". The settings for this plugin allow to choose the operations that should appear on the view. Operations are gathered from two sources: 1) Action API 2) hook_node_operations and hook_user_operations. The module also allows to use Batch API or the Job queue module to process the selected nodes, in order to avoid timeouts.
VBO can support all object types supported by Views. Natively, VBO comes with support for nodes, users and comments. Through the new VBO-defined hook_views_bulk_operations_object_info(), other modules can help VBO handle arbitrary object types. Refer to function views_bulk_operations_views_bulk_operations_object_info() (you'll have to search for it on the page sorry) for information.


I am no longer actively updating VBO for D5, but I will still fix bugs. Most of the features on this page are only available in D6. If you have a specific request, I can offer help and advice, but no coding. Of course, I am open to paid work :-)
The module works by exposing a new Views style plugin called "Bulk Operations View". Creating a view with this style displays a wizard-like form with the following elements:
  • A table view containing the queried nodes, with a checkbox in front of each. Exposed filters and pager are supported.
  • A drop-down with available operations. Operations are gathered from two sources: 1) actions defined with the Actions API having type {'Node', 'Workflow', 'Email'} and attribute 'batchable'; 2) operations returned by modules that implement hook_node_operations. In addition, each Bulk Operations view allows the selection of one or more such operations to be shown in the drop-down, through the "Operations" tab that appears next to "View", "Edit", "Clone", "Export" tabs. NOTE: By default, no operations are selected for a new Bulk Operations view. It is necessary to explicitly select one or more operations from the "Settings" tab for the view to be functional.
  • In case only one operation is selected from the "Settings" tab, no drop-down will be shown. Instead, the submit button label will be modified to reflect the chosen operation's name.
  • Some actions from the Action API provide a form to gather user parameters before the action is executed. If such an action is chosen from the drop-down list, the user will be shown the action parameters form as a second step. In case only one operation is selected from the "Settings" tab *and* this operation has a parameters form, this form will be shown on the first page for more intuitive usability.
  • Finally, a confirmation page is displayed with the chosen operation and the selected nodes.


If you want to modify the VBO theme, you should call your theme overriding function:

phptemplate_views_bulk_operations_view_VIEW_NAME($view, $nodes, $type)

and place it in your theme's template.php file. This will require you to recode the whole form. If you just want to change the look of the nodes table but leave everything else as is, just override the function


As an example, the module comes with a re-implementation of the Content admin page. To access it, just go to the URL admin/content/node2.


A module called actions_permissions is included in the package. This module generates a permission for each action, and VBO honors those permissions before showing or executing the corresponding actions. This is useful if you want to provide your VBO to several groups of users with different privileges: the same view will accommodate those different groups, showing to each the actions that they are permitted to see.


Modify node taxonomy terms

The module comes with a new action to manipulate nodes' taxonomy terms. Unlike Taxonomy Node Operations, which creates a new action for each single term, this module exposes a single configurable action that allows the user to choose which term(s) should be added to the selected nodes. The user can also choose to keep existing terms or to erase them.

Delete node, user, comment

Actions to delete these objects.

Rulesets -> actions

Detect rulesets created with the Rules module and expose them as actions that VBO can invoke.

Arbitrary PHP script

Write PHP code that is applied to each node in VBO. This action requires the 'administer site configuration' permission - even if actions_permissions.module says otherwise.

Modify node fields

Bulk-modify CCK and other fields (still experimental).

Modify profile fields

Bulk-modify user profile fields.

Modify user roles

Assign and unassign roles to users.

Managing blocks

The Views Block module exposes block data to Views, allowing VBO to manage blocks just as nodes or users. Try it out!



Even though the action gets called on my selected nodes, these nodes still retain their old values! What's going on?

Actions in D6 use a flag called 'changes_node_property' to give a hint to Drupal whether this action modifies node contents or performs a read-only operation on the node. VBO uses that flag to determine whether node_save() should be called or not after executing the action. Actions that modify node contents but don't expose this flag in hook_action_info() will not be properly handled by VBO! Checkout node.module's node_action_info() implementation for an example.

How can I write an action that performs a function on all selected nodes AT ONCE?

You need to write a node operation instead of an action. Whereas actions get called *once for every selected node*, node operations are called once only, and they are passed an array of selected nodes. Check out sirkitree's article for the same concept applied to user operations.

I need VBO to modify thousands of nodes at once! Help!

VBO is designed to handle large numbers of nodes, without causing memory errors or timeouts. When you select thousands of nodes, you can choose to execute the operations using Batch API, which provides visual feedback on VBO's progress. To select Batch API, edit your view, open the "Bulk Operation" style settings and in the section "To execute operations:", select "Use Batch API". You can also choose to execute the operations during cron runs via the Job queue module if you have it enabled.

How can I use VBO to copy values from one field to another?

You will need to write simple PHP code.
  • Install Devel, and open the "Dev load" tab on a node of the type you want to manipulate. Write down the name of the source field, as well as the array key that contains the field value. E.g.
    'field_contact' => array(
      0 => array('value' => 'Some value'),
  • Use the stock VBO at /admin/content/node2 and filter the nodes by the desired type. Then choose the action "Modify node fields" and press "Execute".
  • On the "Set parameters for 'Modify node fields'" page, locate the destination field and check it ON.
  • In the "Code" area of that field, write the script needed to copy the value from the source field. The help text below the code area shows you the expected format, and you can access the node being manipulated using the variable $node. E.g.
    return array(
      0 => array('value' => $node->field_contact[0]['value']),
  • Press "Next" then "Confirm"

How can I make sure that unauthorized users are prevented from destroying nodes or any other parts of my Drupal installation?

VBO gives a lot of power to admins, so it's important that security measures be enforced. There are currently 3 different ways to restrict access to VBO:
  1. Using the bundled actions_permissions module, the admin can set permissions on each individual action. VBO honors those permissions by hiding the unauthorized actions *and* checking permissions again when it is about to execute an action.
  2. VBO also calls node_access on each node that is about to be acted upon. Nodes for which the user does not have appropriate permissions are discarded from the execution list. The action flag changes_node_property is mapped to node_access('update'). There are other mappings as well described in the VBO development guide.
  3. The author of actions can specify additional permissions in hook_action_info under the attribute 'permissions' => array(perm1, perm2, ...).



Official releasesDateSizeLinksStatus
6.x-1.82009-Sep-1034.59 KBRecommended for 6.xThis is currently the recommended release for 6.x.
5.x-1.42009-May-2018.16 KBRecommended for 5.xThis is currently the recommended release for 5.x.
Development snapshotsDateSizeLinksStatus
6.x-1.x-dev2009-Oct-0938.39 KBDevelopment snapshotDevelopment snapshots are automatically regenerated and their contents can frequently change, so they are not recommended for production use.
5.x-1.x-dev2009-Jun-3018.19 KBDevelopment snapshotDevelopment snapshots are automatically regenerated and their contents can frequently change, so they are not recommended for production use.

No comments:

Post a Comment