Randell's Tech Blog

Randell's Tech Blog

Show recent Google Reader shared items in your Facebook Wall

Posted: 25 Apr 2009 06:18 AM PDT

  1. Login to your Google Reader account.
  2. On the left side of Google Reader, click Shared Items (see screen capture).  Screenshot - Google Reader - Shared ItemsYou should now see your shared items.
  3. At the topmost part of the shared items, you should see this (see screen capture)
    Screenshot - Google Reader - At This Web Page
  4. Hover over the ‘at this web page‘ link and copy the link location.
  5. Now login to your Facebook account.
  6. Under the Wall tab, click Settings.
  7. Under Stories Posted by You > Imported Stories > Available Sites, click Google Reader.
  8. Enter the Public URL of your Google Reader shared items.
  9. Click Import.

All done.

CodeIgniter: AJAX Pagination

Posted: 25 Apr 2009 05:03 AM PDT

I extended CodeIgniter’s Pagination Class to add a function that creates ajaxified pagination links that, unlike its create_links() function, whose links load the entire page, loads a specific target element instead.

First, I created a file named application/libraries/MY_Pagination.php and declared it with

class MY_Pagination extends CI_Pagination {   }

You’ll notice that I extended the parent class CI_Pagination. The class name and the file name are both prefixed with ‘MY_’, which is the default sub-class prefix. Note that you can change this sub-class prefix in application/config/config.php. Look for the line that says

$config['subclass_prefix'] = 'MY_';

DO NOT use ‘CI_’ as your prefix because all native CodeIgniter libraries use it.

I simply copied the create_links() function and renamed it to create_ajax_links(). I also added one required parameter for the function, which is the desired target element of the links.

Then I modified the lines that render the links:

Modified the “First” link from

188 
$output .= $this->first_tag_open.'<a href="'.$this->base_url.'">'.$this->first_link.'</a>'.$this->first_tag_close;

to

188 
$output .= $this->first_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.'');">'.$this->first_link.'</a>'.$this->first_tag_close;

Modified the “Previous” link from

196 
$output .= $this->prev_tag_open.'<a href="'.$this->base_url.$i.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;

to

196 
$output .= $this->prev_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.$i.'');">'.$this->prev_link.'</a>'.$this->prev_tag_close;

Modified the digit links from

213 
$output .= $this->num_tag_open.'<a href="'.$this->base_url.$n.'">'.$loop.'</a>'.$this->num_tag_close;

to

213 
$output .= $this->num_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.$n.'');">'.$loop.'</a>'.$this->num_tag_close;

Modified the “Next” link from

221 
$output .= $this->next_tag_open.'<a href="'.$this->base_url.($this->cur_page * $this->per_page).'">'.$this->next_link.'</a>'.$this->next_tag_close;

to

221 
$output .= $this->next_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.($this->cur_page * $this->per_page).'');">'.$this->next_link.'</a>'.$this->next_tag_close;

Modified the “Last” link from

228 
$output .= $this->last_tag_open.'<a href="'.$this->base_url.$i.'">'.$this->last_link.'</a>'.$this->last_tag_close;

to

228 
$output .= $this->last_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.$i.'');">'.$this->last_link.'</a>'.$this->last_tag_close;

Load the library in your Controller similar to how you load other libraries. Note that you’re NOT supposed to include the prefix.

$this->load->library('pagination');

Once loaded, you can call your new function like

$this->pagination->create_ajax_links('targetElement');

You’ll notice that I used jQuery here (see the $('#'.$target.'').load(''); parts? That’s jQuery). So make sure to add the jQuery library to your View. You can download jQuery here.

For the benefit of the lazy, here’s the entire MY_Pagination library:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /**  * @author  Randell Benavidez  */ class MY_Pagination extends CI_Pagination {           /** 	 * Generate the pagination links that load pages asynchronously 	 *          * @param   string  $target 	 * @access  public 	 * @return     string 	 */ 	function create_ajax_links($target) 	{ 		// If our item count or per-page total is zero there is no need to continue. 		if ($this->total_rows == 0 OR $this->per_page == 0) 		{ 		   return ''; 		}   		// Calculate the total number of pages 		$num_pages = ceil($this->total_rows / $this->per_page);   		// Is there only one page? Hm... nothing more to do here then. 		if ($num_pages == 1) 		{ 			return ''; 		}   		// Determine the current page number. 		$CI =& get_instance();   		if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE) 		{ 			if ($CI->input->get($this->query_string_segment) != 0) 			{ 				$this->cur_page = $CI->input->get($this->query_string_segment);   				// Prep the current page - no funny business! 				$this->cur_page = (int) $this->cur_page; 			} 		} 		else 		{ 			if ($CI->uri->segment($this->uri_segment) != 0) 			{ 				$this->cur_page = $CI->uri->segment($this->uri_segment);   				// Prep the current page - no funny business! 				$this->cur_page = (int) $this->cur_page; 			} 		}   		$this->num_links = (int)$this->num_links;   		if ($this->num_links < 1) 		{ 			show_error('Your number of links must be a positive number.'); 		}   		if ( ! is_numeric($this->cur_page)) 		{ 			$this->cur_page = 0; 		}   		// Is the page number beyond the result range? 		// If so we show the last page 		if ($this->cur_page > $this->total_rows) 		{ 			$this->cur_page = ($num_pages - 1) * $this->per_page; 		}   		$uri_page_number = $this->cur_page; 		$this->cur_page = floor(($this->cur_page/$this->per_page) + 1);   		// Calculate the start and end numbers. These determine 		// which number to start and end the digit links with 		$start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1; 		$end   = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;   		// Is pagination being used over GET or POST?  If get, add a per_page query 		// string. If post, add a trailing slash to the base URL if needed 		if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE) 		{ 			$this->base_url = rtrim($this->base_url).'&amp;'.$this->query_string_segment.'='; 		} 		else 		{ 			$this->base_url = rtrim($this->base_url, '/') .'/'; 		}     		// And here we go... 		$output = '';   		// Render the "First" link 		if  ($this->cur_page > ($this->num_links + 1)) 		{ 			$output .= $this->first_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.'');">'.$this->first_link.'</a>'.$this->first_tag_close; 		}   		// Render the "previous" link 		if  ($this->cur_page != 1) 		{ 			$i = $uri_page_number - $this->per_page; 			if ($i == 0) $i = ''; 			$output .= $this->prev_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.$i.'');">'.$this->prev_link.'</a>'.$this->prev_tag_close; 		}   		// Write the digit links 		for ($loop = $start -1; $loop <= $end; $loop++) 		{ 			$i = ($loop * $this->per_page) - $this->per_page;   			if ($i >= 0) 			{ 				if ($this->cur_page == $loop) 				{ 					$output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page 				} 				else 				{ 					$n = ($i == 0) ? '' : $i; 					$output .= $this->num_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.$n.'');">'.$loop.'</a>'.$this->num_tag_close; 				} 			} 		}   		// Render the "next" link 		if ($this->cur_page < $num_pages) 		{ 			$output .= $this->next_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.($this->cur_page * $this->per_page).'');">'.$this->next_link.'</a>'.$this->next_tag_close; 		}   		// Render the "Last" link 		if (($this->cur_page + $this->num_links) < $num_pages) 		{ 			$i = (($num_pages * $this->per_page) - $this->per_page); 			$output .= $this->last_tag_open.'<a href="#" onclick="$('#'.$target.'').load(''.$this->base_url.$i.'');">'.$this->last_link.'</a>'.$this->last_tag_close; 		}   		// Kill double slashes.  Note: Sometimes we can end up with a double slash 		// in the penultimate link so we'll kill all double slashes. 		$output = preg_replace("#([^:])//+#", "1/", $output);   		// Add the wrapper HTML if exists 		$output = $this->full_tag_open.$output.$this->full_tag_close;   		return $output; 	} }   // END MY_Pagination Class   /* End of file MY_Pagination.php */ /* Location: ./system/application/libraries/MY_Pagination.php */

0 comments: