PHP Classes
Icontem

File: class.url.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Dmitry V. Sabanin  >  URL  >  class.url.php  
File: class.url.php
Role: Class source
Content type: text/plain
Description: Main class
Class: URL
URL abstraction class
 

Contents

Class file image Download
<?php
/*
* Class that abstracts URL;
* It can easily make URL's for dynamic scripts and also protects ur URL from "junk".
* With the word 'junk' i mean the situation when u add same variables with different values 
* on the different parts of the scripts.

* Example of use:
*     $action = new URL();
*     $action->addVal("form_submitted","1");
*     echo $action->Build();
* This will print ur current URL with new variable called form_submitted and equal to 1.
* If u want link to the URL u can i.e. do this:
*     $newspage = new URL();
*     $newspage->addVal("module","news");
*     echo $newspage->A();

* Changelog
* 14 march: 
*     + added Clear() method
*     + fixed error in Build() method
*     + comments to methods are added
*/


class URL
{
  var 
$Text;
  var 
$Scheme;
  var 
$Host;
  var 
$Port;
  var 
$Path;
  var 
$Query;
  var 
$Fragment;
  var 
$Dynamic;  // TRUE if URL have GET vars
  
var $Valid;
  var 
$Args = array();
  var 
$Cache// cached previous build of URL
  /**
   * URL::URL()
   * 
   * @param mixed $Text U can specify URL that different from current 
   * @return void
   **/
  
function URL($Text FALSE)
  {
    global 
$HTTP_SERVER_VARS;
    if ( 
$Text )
       
$this->Text $Text;
    else
        
$this->Text "http://".$HTTP_SERVER_VARS["HTTP_HOST"].$HTTP_SERVER_VARS["REQUEST_URI"];
    if ( 
$this->parseURL() )
       
$this->Valid TRUE;
    else
       
$this->Valid FALSE;
  }
  
/**
   * URL::parseURL()
   * This method is private, it parses URL on the parts.
   * @return boolean URL is right or not;
   **/
  
function parseURL()
  {
           
$tmp parse_url$this->Text );

           if ( isSet(
$tmp["scheme"]) )
              
$this->Scheme $tmp["scheme"];
           else
               return (
FALSE);

           if ( isSet(
$tmp["host"]) )
              
$this->Host $tmp["host"];
           else
               return (
FALSE);

           if ( isSet(
$tmp["path"]) )
              
$this->Path $tmp["path"];
           else
               return(
FALSE);
        
           if ( isSet(
$tmp["query"]) )
              
$this->Query  $tmp["query"];

           if ( isSet(
$tmp["fragment"]) )
              
$this->Fragment $tmp["fragment"];
    
           if ( isSet(
$tmp["port"]) )
              
$this->Port $tmp["port"];
       
           unset(
$tmp);

            if ( isSet(
$this->Query) )
               
$this->Dynamic TRUE;
            else
                
$this->Dynamic FALSE;
        
            if ( 
$this->Dynamic )
            {
               
$temp explode("&",$this->Query);
               
$i 0;
               while ( list(
$key$val) = each ($temp) )
               {
                     
$tmp explode("=",$val);
                     
$this->Args[$tmp[0]] = $tmp[1];
                     
$i++;
               }
            }
            return (
TRUE);
  }
  
/**
   * URL::dropVal()
   * Drops a key from URL.
   * @param mixed $key A key of value to drop.
   * @return string URL if ok or echo about error.
   **/
  
function dropVal($key)
  {
    if ( isSet(
$this->Args[$key]) )
       
$this->Args[$key] = NULL;
    else
        echo 
"Key not found.";
    return 
$this->Build();
  }
  
/**
   * URL::Clear()
   * Clears previous URL and let u work with another.
   * @param string $Text This can be used to work with specific URL, not the current one.
   * @return void
   **/
  
function Clear()
  {
      
$this->URL();
    empty(
$this->Args);
  }
  
/**
   * URL::getVal()
   * Gets a value from URL. (Even that values that are from 
   * @param $key
   * @return mixed key if everything is OK, or echo'es that key is not found.
   **/
  
function getVal ($key)
  {
    if ( isSet(
$this->Args[$key]) )
       return 
$this->Args[$key];
    else
        echo 
"Key not found.";
  }
  
  
/**
   * URL::addVal()
   * Adds a key to URL.
   * @param mixed $key A key to add.
   * @param mixed $value Value of the key
   * @return string URL
   **/
  
function addVal ($key$value)
  {
    if ( !isSet(
$this->Args[$key]) )
       
$this->Args[$key] = $value;
    else
        echo 
"Key already exists.";
    return 
$this->Build();
  }
  
  
/**
   * URL::setVal()
   * 
   * @param mixed $key Key name for parameter.
   * @param mixed $value Value for parameter.
   * @param boolean $create Create new key if not exists.
   * @return Echo if key not found and builded URL if everything ok.
   **/
  
function setVal ($key$value$create=FALSE)
  {
    if ( isSet(
$this->Args[$key]) or $create == TRUE)
       
$this->Args[$key] = $value;
    else
        echo 
"Key not found.";
    return 
$this->Build();
  }
  
  
/**
   * URL::is_Set()
   * Checks if key is set in the URL.
   * @param mixed $key 
   * @return boolean  
   **/
  
function is_Set ($key)
  {
    if ( isSet(
$this->Args[$key]) )
       return 
TRUE;
    else
        return 
FALSE;
  }
  
  
/**
   * URL::Build()
   * This is can be used to build a URL.
   * @param boolean $full Set to TRUE if u want full URL (with hostname etc)
   * @return string URL
   **/
  
function Build ($full FALSE)
  {
    
$url "";
    if (
$full)
    {
      
$url $this->Scheme."://";
      
$url .= $this->Host;
      if ( isSet(
$this->Port) )
         
$url .= ":".$this->Port;
    }
    
$url .= $this->Path;
    
$i 0;
    foreach ( 
$this->Args as $key => $value )
    {
          if ( 
$i == $url .= "?";
          if ( !
is_Null($value) )
          {
             
$url .= $key."=".$value."&";
          }
          
$i=1;
    } 
    if ( 
$i )
       {
         
$url substr_replace($url'', -1);
       }
    if ( isSet(
$this->Fragment) )
       
$url .= "#".$this->Fragment;
    
$this->Cache $url;
    return 
$url;
  }
  
/**
   * URL::A()
   * Returns builded URL with <A> tags
   * @param string $name Name of link, it will be like this: <A HREF=...>$name</A>
   * @param boolean $full Set to TRUE if u want full URL (with hostname etc)
   * @return string URL with tags
   **/
  
function A($name FALSE$full FALSE)
  {
    
$url $this->Build($full);
    if ( !
$name )
       
$name $url;
    return 
"<A HREF=".$url.">".$name."</A>";
  }
}
?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products