Easy Ajax
I found this link mrkadin.com/blog/node/70 on Planet Drupal, and thought it was a helpful start to setting up Ajax the easy/lazy way using views. I extended it to a bit more generic as follows:
1. Make the ajax callback url used in the rewrite in the view 'common-ajax/nojs/{VIEWNAME}/{VIEW ARGUMENT}'
2. Create a module with the following code to handle the callback:
<?phpfunction common_menu() { $items['common-ajax/%/%'] = array( 'access arguments' => array('access content'), 'page callback' => 'common_ajax_callback', 'page arguments' => array(1,2), 'type' => MENU_CALLBACK, ); return $items;}function common_ajax_callback($js, $view_name, $param1) { $view = views_get_view($view_name); $view->set_display('default'); // Currently, only the 'default' display id is used here $view->set_arguments(array($param1)); // If the nojs didn't get changed to ajax, the user has no javascript. // Display as a normal (non-ajax) page if ($js == 'nojs') { $view->use_ajax = FALSE; $view->is_attachment = TRUE; return($view->render()); } //print the rendered version of your view $html = $view->render(); // Prepare an ajax command to insert the node html into our ajax wrapper. $commands = array(); $commands[] = ajax_command_html('#common-ajax-wrapper', $html); // Render the commands into JSON and print them. print ajax_render($commands); exit; // Exit so Drupal doesn't have a chance to build a whole page.}
3. Add a div with id common-ajax-wrapper to page.tpl.php for the theme
This creates a nice generic version which allows any view to be used, with one parameter (although this could be easily extended to cater for any number of parameters)
Tags: