Making a category based menu with posts in wordpress 2.9.2

Sunday, May 23rd, 2010

I was not entirely happy with the way wordpress handles menus for this (my own) website. I like the idea of making all the content posts so they’re bound to a date and such. Then I’d like to see them in the menu based on the category they’re in. There are category menus, and even nice folding ones, but I couldn’t find one that displays all the posts per category in a nice way.

So I decided to hack one in myself. It’s a very nasty hack… and I just put a bunch of code in the sidebar.php of my template. But that said… it works and I now have a menu that does what I want.

If you’d like to use this… just remember it’s a great big bad hack and very inefficient!

Here’s the html/php code I added to my template’s sidebar.php:

  1. // Get the id of the current post so we can give it a "current" class later.
  2. $postid = $post->ID;
  3.  
  4. // Arguments for getting all the categories
  5. $args = array(
  6. 'show_option_all'    => '',
  7. 'orderby'            => 'name',
  8. 'order'              => 'ASC',
  9. 'show_last_update'   => 0,
  10. 'style'              => 'list',
  11. 'show_count'         => 0,
  12. 'hide_empty'         => 1,
  13. 'use_desc_for_title' => 0,
  14. 'child_of'           => 0,
  15. 'feed'               => '',
  16. 'feed_type'          => '',
  17. 'feed_image'         => '',
  18. 'exclude'            => '',
  19. 'exclude_tree'       => '',
  20. 'include'            => '',
  21. 'hierarchical'       => true,
  22. 'title_li'           => '',
  23. 'number'             => NULL,
  24. 'echo'               => 0,
  25. 'depth'              => 0,
  26. 'current_category'   => 1,
  27. 'pad_counts'         => 0,
  28. 'taxonomy'           => 'category' );
  29.  
  30. // Get all categories (in a silly html menu)
  31. $catmenu = wp_list_categories( $args );
  32.  
  33. // Split the menu to get all categories sepparately
  34. $cats = split('
  35. <li class="cat-item cat-item-', $catmenu);
  36.  
  37. $catmenu = '';
  38.  
  39. // Loop through the categories.
  40. foreach($cats as $key => $cat){
  41.  
  42.         $current = '';
  43.  
  44.         // Get the code and html sepparately
  45.         list($id, $code) = split('"><a', $cat);
  46.  
  47.         // Make sure they're there.
  48.         if($id && $code){
  49.  
  50.                 // If this is the current category, then remove that text and remember for later
  51.                 if(strpos($id, ' current-cat') !== False){
  52.                         $current = ' current-cat';
  53.                         $id = str_replace(' current-cat', '', $id);
  54.                 }
  55.  
  56.                 // In case we got an id... and this category doesn't have sub categories.
  57.                 if(is_numeric($id) && strpos($code, "
  58. <ul class='children'>") === False){
  59.  
  60.                         // Arguments for getting the categorie's posts
  61.                         $args = array(
  62.                                 'post_type' => 'post',
  63.                                 'post_status' => 'published',
  64.                                 'numberposts' => -1,
  65.                                 'category' => $id
  66.                                 );
  67.  
  68.                         // Get the posts
  69.                          $myposts = get_posts($args);
  70.  
  71.                          // If we got any posts returned
  72.                          if(count($myposts)){
  73.  
  74.                                 // Start a nice html post list
  75.                                 $postlist = "\n".'
  76. <ul class="posts">';
  77.  
  78.                                 // Check east post to see if it's current and add to the html
  79.                                  foreach($myposts as $post) {
  80.                                         $current_post = '';
  81.                                         if($postid == $post->ID){
  82.                                                 $current_post = ' class="current-post"';
  83.                                                 $current = ' current-cat';
  84.                                         }
  85.                                         $postlist .= "\n".'
  86. <li'.$current_post.'><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a></li>
  87.  
  88. ';
  89.                                  }
  90.  
  91.                                  $postlist .= "\n".'</ul>
  92.  
  93. ';
  94.  
  95.                                 // Add the post list to the code of the current category
  96.                                 $code = str_replace('</a>', '</a>'.$postlist, $code);
  97.  
  98.                         }
  99.  
  100.                 }
  101.  
  102.                 // Put everything that was split before back together
  103.                 $cat = '
  104. <li class="cat-item cat-item-'.$id.$current.'"><a'.$code;
  105.  
  106.         }
  107.  
  108.         // Add back into the complete category menu
  109.         $catmenu .= $cat;
  110. }
  111.  
  112. // Print out the category menu
  113. echo '
  114. <li id="menu">
  115. <ul>'.$catmenu.'</ul>
  116. </li>
  117.  
  118. ';

Display clean php code for copying

// Get the id of the current post so we can give it a "current" class later.
$postid = $post->ID;

// Arguments for getting all the categories
$args = array(
'show_option_all'    => '',
'orderby'            => 'name',
'order'              => 'ASC',
'show_last_update'   => 0,
'style'              => 'list',
'show_count'         => 0,
'hide_empty'         => 1,
'use_desc_for_title' => 0,
'child_of'           => 0,
'feed'               => '',
'feed_type'          => '',
'feed_image'         => '',
'exclude'            => '',
'exclude_tree'       => '',
'include'            => '',
'hierarchical'       => true,
'title_li'           => '',
'number'             => NULL,
'echo'               => 0,
'depth'              => 0,
'current_category'   => 1,
'pad_counts'         => 0,
'taxonomy'           => 'category' );

// Get all categories (in a silly html menu)
$catmenu = wp_list_categories( $args );

// Split the menu to get all categories sepparately
$cats = split('
  • ") === False){ // Arguments for getting the categorie's posts $args = array( 'post_type' => 'post', 'post_status' => 'published', 'numberposts' => -1, 'category' => $id ); // Get the posts $myposts = get_posts($args); // If we got any posts returned if(count($myposts)){ // Start a nice html post list $postlist = "\n".'
      '; // Check east post to see if it's current and add to the html foreach($myposts as $post) { $current_post = ''; if($postid == $post->ID){ $current_post = ' class="current-post"'; $current = ' current-cat'; } $postlist .= "\n".' '.$post->post_title.' '; } $postlist .= "\n".'
    '; // Add the post list to the code of the current category $code = str_replace('', ''.$postlist, $code); } } // Put everything that was split before back together $cat = '
    • '.$catmenu.'
  • ';

    And here is the javascript code I added to my template’s header.php:

    1. // Initialise javascript functions using jquery
    2. jQuery(document).ready(function(){
    3.  
    4.         initMenu();
    5.  
    6. });
    7.  
    8. // Start the menu functionality
    9. function initMenu(){
    10.         // Hide all the submenus by default
    11.         jQuery('#menu ul ul').hide();
    12.  
    13.         // Find the current post and make sure all the categories it's in are also "current", then show their kids.
    14.         jQuery('#menu .current-post').parents('li[id!=menu]').addClass('current-cat').children('ul').show();
    15.  
    16.         // Replace the click event of all category menu items except for "news"
    17.         // In stead make them fold down and up the sub menu
    18.         jQuery('#menu a').click(function(event){
    19.  
    20.                 thisItem = jQuery(this);
    21.  
    22.                 childList = thisItem.siblings('ul');
    23.  
    24.                 if(childList.length){
    25.  
    26.                         if(!(thisItem.html() == 'News' && childList.is(':hidden'))){
    27.  
    28.                                 event.preventDefault();
    29.  
    30.                                 if(childList.is(':hidden')){
    31.  
    32.                                         thisItem.addClass('clicked');
    33.  
    34.                                         childList.slideDown('fast');
    35.  
    36.                                         jQuery('#menu ul:visible').each(function(){
    37.  
    38.                                                 if(!(jQuery('.clicked', this).length || jQuery(this).siblings('.clicked').length)){
    39.                                                         jQuery(this).slideUp('fast');
    40.                                                 }
    41.  
    42.                                         });
    43.  
    44.                                         thisItem.removeClass('clicked');
    45.  
    46.                                 }else{
    47.                                         childList.slideUp('fast');
    48.                                 }
    49.                         }
    50.  
    51.                 }
    52.  
    53.         });
    54. }

    Display clean javascript code for copying

    // Initialise javascript functions using jquery
    jQuery(document).ready(function(){
    
    	initMenu();
    
    });
    
    // Start the menu functionality
    function initMenu(){
    	// Hide all the submenus by default
    	jQuery('#menu ul ul').hide();
    
    	// Find the current post and make sure all the categories it's in are also "current", then show their kids.
    	jQuery('#menu .current-post').parents('li[id!=menu]').addClass('current-cat').children('ul').show();
    
    	// Replace the click event of all category menu items except for "news"
    	// In stead make them fold down and up the sub menu
    	jQuery('#menu a').click(function(event){
    
    		thisItem = jQuery(this);
    
    		childList = thisItem.siblings('ul');
    
    		if(childList.length){
    
    			if(!(thisItem.html() == 'News' && childList.is(':hidden'))){
    
    				event.preventDefault();
    
    				if(childList.is(':hidden')){
    
    					thisItem.addClass('clicked');
    
    					childList.slideDown('fast');
    
    					jQuery('#menu ul:visible').each(function(){
    
    						if(!(jQuery('.clicked', this).length || jQuery(this).siblings('.clicked').length)){
    							jQuery(this).slideUp('fast');
    						}
    
    					});
    
    					thisItem.removeClass('clicked');
    
    				}else{
    					childList.slideUp('fast');
    				}
    			}
    
    		}
    
    	});
    }

    Shorten text

    Wednesday, March 17th, 2010

    This is a small function that shortens a string.
    It looks if the string is longer than a preset length, and if so cuts the text there.
    Then it removes the last word from the string (so your string ends neatly at a space), and adds three dots.

    1. // Shorten a text if nessecary
    2. function shortenText($txt='', $len=0){
    3.  
    4.         if(strlen($txt) > $len){
    5.  
    6.                 $txt = substr($txt, 0, $len);
    7.  
    8.                 $t = split("[\n\r\t ]+", $txt);
    9.                 $t = array_slice($t, 0, -1);
    10.                 $txt = join(' ', $t);
    11.  
    12.                 $txt .= '...';
    13.  
    14.         }
    15.  
    16.         return $txt;
    17. }

    Display clean php code for copying

    // Shorten a text if nessecary
    function shortenText($txt='', $len=0){
    
    	if(strlen($txt) > $len){
    
    		$txt = substr($txt, 0, $len);
    
    		$t = split("[\n\r\t ]+", $txt);
    		$t = array_slice($t, 0, -1);
    		$txt = join(' ', $t);
    
    		$txt .= '...';
    
    	}
    
    	return $txt;
    }

    Rot13

    Wednesday, March 17th, 2010

    Basic rot13 function for PHP (remember that this is NOT secure encryption!).
    It’s built into php nowadays, but if you have an old version you may not.

    1. // Rot 13 function for older php versions
    2. function rot13($text){
    3.         $length = strlen($text);
    4.         $newtext = '';
    5.          for($i = 0; $i < $length; $i++){
    6.                  $index = ord($text[$i]);
    7.                  // Rotate upper case.
    8.                  if($index > 64 && $index < 91){
    9.                          $index += 13;
    10.                          if($index > 90) $index -= 26;
    11.                          $newtext .= chr($index);
    12.                 // Rotate lower case.
    13.                 }elseif($index > 96 && $index < 123){
    14.                         $index += 13;
    15.                         if($index > 122) $index -= 26;
    16.                         $newtext .= chr($index);
    17.                  }else{ $newtext .= $text[$i]; }
    18.          }
    19.          return $newtext;
    20. }

    Display clean php code for copying

    // Rot 13 function for older php versions
    function rot13($text){
    	$length = strlen($text);
    	$newtext = '';
    	 for($i = 0; $i < $length; $i++){
    		 $index = ord($text[$i]);
    		 // Rotate upper case.
    		 if($index > 64 && $index < 91){
    			 $index += 13;
    			 if($index > 90) $index -= 26;
    			 $newtext .= chr($index);
    		// Rotate lower case.
    		}elseif($index > 96 && $index < 123){
    			$index += 13;
    			if($index > 122) $index -= 26;
    			$newtext .= chr($index);
    		 }else{ $newtext .= $text[$i]; }
    	 }
    	 return $newtext;
    }

    Make a random string

    Wednesday, March 17th, 2010

    This is a tiny function that makes a random string of predefined length.
    It does not use letters and numbers that could be confusing, like O and 0.

    1. // Make a random string
    2. function makeRandomString($length){
    3.         $str = array('a', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', 'Y', 'Z', '2', '4', '5', '6', '7', '8', '9');
    4.         $nkeys = array_rand($str, $length);
    5.         $nstr = '';
    6.         foreach($nkeys as $key){ $nstr .= $str[$key]; }
    7.         return $nstr;
    8. }

    Display clean php code for copying

    // Make a random string
    function makeRandomString($length){
    	$str = array('a', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', 'Y', 'Z', '2', '4', '5', '6', '7', '8', '9');
    	$nkeys = array_rand($str, $length);
    	$nstr = '';
    	foreach($nkeys as $key){ $nstr .= $str[$key]; }
    	return $nstr;
    }

    Make image version

    Wednesday, March 17th, 2010

    This is a function I use to make multiple versions such as thumbnails of uploaded images.
    There’s three methods for resizing available in it (mask, fit & limit).

    1. // Function for making a new resized copy of a file
    2. // mask makes the shortest edge match the mask, so it will be bigger than the mask, always resizes!
    3. // fit makes the longest edge match, always resizes!
    4. // limit makes the image fit, but won't stretch if it's smaller.
    5. function makeImageVersion($newWidth, $newHeight, $filePath, $newName, $fileExtension, $method){
    6.  
    7.         // Find out the original size of the image
    8.         list($wO, $hO) = getimagesize($filePath);
    9.  
    10.         // Get the ratios it would take to resize
    11.         $wR = $newWidth / $wO;
    12.         $hR = $newHeight / $hO;
    13.  
    14.         // Figure out which ratio we need
    15.         switch($method){
    16.                 case 'mask':
    17.                         if($wR > $hR){ $ratio = $wR; }
    18.                         else{ $ratio = $hR; }
    19.                         break;
    20.                 case 'limit':
    21.                         if($wR < 1 && $wR < $hR){ $ratio = $wR; }
    22.                         elseif($hR < 1){ $ratio = $hR; }
    23.                         else{ $ratio = 1; }
    24.                         break;
    25.                 case 'fit':
    26.                 default:
    27.                         if($wR > $hR){ $ratio = $hR; }
    28.                         else{ $ratio = $wR; }
    29.                         break;
    30.         }
    31.  
    32.         $wN = round($wO * $ratio);
    33.         $hN = round($hO * $ratio);
    34.  
    35.         $iP = imagecreatetruecolor($wN, $hN);
    36.         imageAlphaBlending($iP, false);
    37.         imageSaveAlpha($iP, true);
    38.  
    39.         if($fileExtension == 'jpg'){ $iI = imagecreatefromjpeg($filePath); }
    40.         elseif($fileExtension == 'png'){        $iI = imagecreatefrompng($filePath); }
    41.         else{ $iI = imagecreatefromgif($filePath); }
    42.  
    43.         imagecopyresampled($iP, $iI, 0, 0, 0, 0, $wN, $hN, $wO, $hO);
    44.  
    45.         if($fileExtension == 'jpg'){ imagejpeg($iP, $newName, 90); }
    46.         elseif($fileExtension == 'png'){ imagepng($iP, $newName); }
    47.         else{ imagegif($iP, $newName); }
    48. }

    Display clean php code for copying

    // Function for making a new resized copy of a file
    // mask makes the shortest edge match the mask, so it will be bigger than the mask, always resizes!
    // fit makes the longest edge match, always resizes!
    // limit makes the image fit, but won't stretch if it's smaller.
    function makeImageVersion($newWidth, $newHeight, $filePath, $newName, $fileExtension, $method){
    
    	// Find out the original size of the image
    	list($wO, $hO) = getimagesize($filePath);
    
    	// Get the ratios it would take to resize
    	$wR = $newWidth / $wO;
    	$hR = $newHeight / $hO;
    
    	// Figure out which ratio we need
    	switch($method){
    		case 'mask':
    			if($wR > $hR){ $ratio = $wR; }
    			else{ $ratio = $hR; }
    			break;
    		case 'limit':
    			if($wR < 1 && $wR < $hR){ $ratio = $wR; }
    			elseif($hR < 1){ $ratio = $hR; }
    			else{ $ratio = 1; }
    			break;
    		case 'fit':
    		default:
    			if($wR > $hR){ $ratio = $hR; }
    			else{ $ratio = $wR; }
    			break;
    	}
    
    	$wN = round($wO * $ratio);
    	$hN = round($hO * $ratio);
    
    	$iP = imagecreatetruecolor($wN, $hN);
    	imageAlphaBlending($iP, false);
    	imageSaveAlpha($iP, true);
    
    	if($fileExtension == 'jpg'){ $iI = imagecreatefromjpeg($filePath); }
    	elseif($fileExtension == 'png'){	$iI = imagecreatefrompng($filePath); }
    	else{ $iI = imagecreatefromgif($filePath); }
    
    	imagecopyresampled($iP, $iI, 0, 0, 0, 0, $wN, $hN, $wO, $hO);
    
    	if($fileExtension == 'jpg'){ imagejpeg($iP, $newName, 90); }
    	elseif($fileExtension == 'png'){ imagepng($iP, $newName); }
    	else{ imagegif($iP, $newName); }
    }

    File put contents

    Wednesday, March 17th, 2010

    file_put_contents() is in php nowadays, but if you’re on an old server you may need your own.
    This simply checks if the function’s there, and if not it makes the function.

    1. // Replacement for file_put_contents if it doesn't exist
    2. if(!function_exists('file_put_contents')){
    3.         function file_put_contents($file, $data){
    4.                 $fp = fopen($file, 'w');
    5.                 fwrite($fp, $data);
    6.                 fclose($fp);
    7.         }
    8. }

    Display clean php code for copying

    // Replacement for file_put_contents if it doesn't exist
    if(!function_exists('file_put_contents')){
    	function file_put_contents($file, $data){
    		$fp = fopen($file, 'w');
    		fwrite($fp, $data);
    		fclose($fp);
    	}
    }

    Check url

    Wednesday, March 17th, 2010

    This is a function that checks to see if a url exists.
    Not mine btw, but for the life of me I can’t remember where I got it.

    1. // Check if a url exists
    2. function isValidUrl($url){
    3.                 $url = @parse_url($url);
    4.  
    5.                 if ( ! $url) {
    6.                         return false;
    7.                 }
    8.  
    9.                 $url = array_map('trim', $url);
    10.                 $url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
    11.                 $path = (isset($url['path'])) ? $url['path'] : '';
    12.  
    13.                 if ($path == '')
    14.                 {
    15.                         $path = '/';
    16.                 }
    17.  
    18.                 $path .= ( isset ( $url['query'] ) ) ? "?$url[query]" : '';
    19.  
    20.                 if ( isset ( $url['host'] ) AND $url['host'] != gethostbyname ( $url['host'] ) )
    21.                 {
    22.                         if ( PHP_VERSION >= 5 )
    23.                         {
    24.                                 $headers = get_headers("$url[scheme]://$url[host]:$url[port]$path");
    25.                         }
    26.                         else
    27.                         {
    28.                                 $fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);
    29.  
    30.                                 if ( ! $fp )
    31.                                 {
    32.                                         return false;
    33.                                 }
    34.                                 fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n");
    35.                                 $headers = fread ( $fp, 128 );
    36.                                 fclose ( $fp );
    37.                         }
    38.                         $headers = ( is_array ( $headers ) ) ? implode ( "\n", $headers ) : $headers;
    39.                         return ( bool ) preg_match ( '#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers );
    40.                 }
    41.                 return false;
    42. }

    Display clean php code for copying

    // Check if a url exists
    function isValidUrl($url){
    		$url = @parse_url($url);
    
    		if ( ! $url) {
    			return false;
    		}
    
    		$url = array_map('trim', $url);
    		$url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
    		$path = (isset($url['path'])) ? $url['path'] : '';
    
    		if ($path == '')
    		{
    			$path = '/';
    		}
    
    		$path .= ( isset ( $url['query'] ) ) ? "?$url[query]" : '';
    
    		if ( isset ( $url['host'] ) AND $url['host'] != gethostbyname ( $url['host'] ) )
    		{
    			if ( PHP_VERSION >= 5 )
    			{
    				$headers = get_headers("$url[scheme]://$url[host]:$url[port]$path");
    			}
    			else
    			{
    				$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);
    
    				if ( ! $fp )
    				{
    					return false;
    				}
    				fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n");
    				$headers = fread ( $fp, 128 );
    				fclose ( $fp );
    			}
    			$headers = ( is_array ( $headers ) ) ? implode ( "\n", $headers ) : $headers;
    			return ( bool ) preg_match ( '#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers );
    		}
    		return false;
    }

    Make a safe url

    Wednesday, March 17th, 2010

    This is a function that checks a string and makes it work nicely for friendly urls

    1. // Make sure a url string is nicely formatted
    2. function makeSafeUrl($myUrl, $allowSpace=0, $allowCase=0, $allowDot=0){
    3.         $sSafe = 'abcdefghijklmnopqrstuvwxyz1234567890-_';
    4.         $disallowed = array();
    5.         $disallowed['c'] = 'ç';
    6.         $disallowed['n'] = 'ñ';
    7.         $disallowed['y'] = 'ýÿ';
    8.         $disallowed['e'] = 'èéêë';
    9.         $disallowed['a'] = 'àáâãäå';
    10.         $disallowed['o'] = 'ðóòôõöø';
    11.         $disallowed['u'] = 'ùúûü';
    12.         $disallowed['i'] = 'ìíîï';
    13.  
    14.         if(!$allowSpace) $disallowed['-'] = ' ';
    15.         if($allowSpace) $sSafe .= ' ';
    16.  
    17.         if(!$allowDot) $disallowed['-'] = '.';
    18.         if($allowDot) $sSafe .= '.';
    19.  
    20.         if($allowCase){
    21.                 $sSafe .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    22.                 $disallowed['C'] = 'Ç';
    23.                 $disallowed['N'] = 'Ñ';
    24.                 $disallowed['Y'] = 'ÝŸ';
    25.                 $disallowed['E'] = 'ÈÉÊË';
    26.                 $disallowed['A'] = 'ÀÁÂÃÄÅ';
    27.                 $disallowed['O'] = 'ÐÓÒÔÕÖØ';
    28.                 $disallowed['U'] = 'ÙÚÛÜ';
    29.                 $disallowed['I'] = 'ÌÍÎÏ';
    30.         }else{
    31.                 $myUrl = strtolower($myUrl);
    32.         }
    33.  
    34.         $newString = array();
    35.  
    36.         for($i = 0; $i<strlen($myUrl); $i++){
    37.                 $thisChar = $myUrl[$i];
    38.                 if(stristr($sSafe, $thisChar)){
    39.                         $newString[$i] = $thisChar;
    40.                 }else{
    41.                         foreach($disallowed as $key => $var){
    42.                                 if(stristr($var, $thisChar)){
    43.                                         $newString[$i] = $key;
    44.                                 }
    45.                         }
    46.                 }
    47.         }
    48.         return implode('', $newString);
    49. }

    Display clean php code for copying

     // Make sure a url string is nicely formatted
    function makeSafeUrl($myUrl, $allowSpace=0, $allowCase=0, $allowDot=0){
    	$sSafe = 'abcdefghijklmnopqrstuvwxyz1234567890-_';
    	$disallowed = array();
    	$disallowed['c'] = 'ç';
    	$disallowed['n'] = 'ñ';
    	$disallowed['y'] = 'ýÿ';
    	$disallowed['e'] = 'èéêë';
    	$disallowed['a'] = 'àáâãäå';
    	$disallowed['o'] = 'ðóòôõöø';
    	$disallowed['u'] = 'ùúûü';
    	$disallowed['i'] = 'ìíîï';
    
    	if(!$allowSpace) $disallowed['-'] = ' ';
    	if($allowSpace) $sSafe .= ' ';
    
    	if(!$allowDot) $disallowed['-'] = '.';
    	if($allowDot) $sSafe .= '.';
    
    	if($allowCase){
    		$sSafe .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    		$disallowed['C'] = 'Ç';
    		$disallowed['N'] = 'Ñ';
    		$disallowed['Y'] = 'ÝŸ';
    		$disallowed['E'] = 'ÈÉÊË';
    		$disallowed['A'] = 'ÀÁÂÃÄÅ';
    		$disallowed['O'] = 'ÐÓÒÔÕÖØ';
    		$disallowed['U'] = 'ÙÚÛÜ';
    		$disallowed['I'] = 'ÌÍÎÏ';
    	}else{
    		$myUrl = strtolower($myUrl);
    	}
    
    	$newString = array();
    
    	for($i = 0; $i $var){
    				if(stristr($var, $thisChar)){
    					$newString[$i] = $key;
    				}
    			}
    		}
    	}
    	return implode('', $newString);
    }

    Is valid page

    Wednesday, March 17th, 2010

    A little function I use to double check the items in a friendly url to see if they only use valid characters.

    1. // Check if the page name is correct
    2. function isValidPage($page){
    3.         $safe = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '_', '.');
    4.         $pageCheck = preg_split('//', strtolower($page), -1, PREG_SPLIT_NO_EMPTY);
    5.  
    6.         // Make sure that the page name has only safe variables
    7.         foreach($pageCheck as $key => $val){
    8.                 if(!in_array($val, $safe)) return false;
    9.         }
    10.         return true;
    11. }

    Display clean php code for copying

    // Check if the page name is correct
    function isValidPage($page){
    	$safe = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '_', '.');
    	$pageCheck = preg_split('//', strtolower($page), -1, PREG_SPLIT_NO_EMPTY);
    
    	// Make sure that the page name has only safe variables
    	foreach($pageCheck as $key => $val){
    		if(!in_array($val, $safe)) return false;
    	}
    	return true;
    }

    Is date

    Wednesday, March 17th, 2010

    See if a string is actually a date (used for friendly urls mostly)

    1. // See if a string from the url is an actual date
    2. function isDate($var){
    3.         $time = strtotime(str_replace('-', ' ', $var));
    4.         if($time){
    5.                 if(strlen($var) == 8){
    6.                         return Array('month', $var, $time);
    7.                 }elseif(strlen($var) == 11){
    8.                         return Array('day', $var, $time);
    9.                 }
    10.         }
    11.         return false;
    12. }

    Display clean php code for copying

    // See if a string from the url is an actual date
    function isDate($var){
    	$time = strtotime(str_replace('-', ' ', $var));
    	if($time){
    		if(strlen($var) == 8){
    			return Array('month', $var, $time);
    		}elseif(strlen($var) == 11){
    			return Array('day', $var, $time);
    		}
    	}
    	return false;
    }
    click here to close

    Help keep these files free,
    and support further development!