×

Welcome to TagMyCode

Please login or create account to add a snippet.
1
0
 
1
Language: PHP
Posted by: Massimo Zappino
Added: May 6, 2011 9:13 AM
Modified: Jun 21, 2011 10:13 PM
Views: 417
  1. <?php
  2.  
  3. class Zend_View_Helper_UrlQuery extends Zend_View_Helper_Url {
  4.  
  5.     public function urlQuery($urlOptions = array(), $name = null, $reset = false, $encode = true)
  6.     {
  7.         $queryArray = $this->getQueryArray();
  8.         if (count($queryArray)) {
  9.             $request = Zend_Controller_Front::getInstance()->getRequest();
  10.             $params = $request->getParams();
  11.             $valuesToRemove = array();
  12.  
  13.             foreach ($queryArray as $k => $v) {
  14.                 // select query string elements with no values
  15.                 if ($v == '') {
  16.                     array_push($valuesToRemove, $k);
  17.                 }
  18.             }
  19.             $queryString = $this->clean_query($valuesToRemove);
  20.             empty ($queryString) ? $queryString = '' : $queryString = '?' . $queryString;
  21.         } else {
  22.             $queryString = '';
  23.         }
  24.         $url = parent::url($urlOptions, $name, $reset, $encode);
  25.         return $url . $queryString;
  26.     }
  27.  
  28.     /**
  29.      * Remove key/values from query string
  30.      *
  31.      * @param array $values keys to remove
  32.      * @return string $query
  33.      */
  34.     protected function clean_query($values = null) {
  35.         if ($values === null) $values = array();
  36.  
  37.         $values = array_flip($values);
  38.         $query = $this->getQueryArray();
  39.  
  40.         foreach ($query as $k => $v) {
  41.             if (isset($values[$k])) {
  42.                 unset($query[$k]);
  43.             }
  44.         }
  45.         $query = $this->composeQueryString($query);
  46.         return $query;
  47.     }
  48.  
  49.     /**
  50.      * Get query string in associative array format
  51.      *
  52.      * @return array $query
  53.      */
  54.     protected function getQueryArray()
  55.     {
  56.         $query = array();
  57.  
  58.         if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') {
  59.             $array = explode("&", $_SERVER['QUERY_STRING']);
  60.             foreach ($array as $k => $v) {
  61.                 $tmp = explode("=", $v, 2);
  62.                 $query[$tmp[0]] = $tmp[1];
  63.             }
  64.         }
  65.         return $query;
  66.     }
  67.  
  68.     /**
  69.      * Compose a query string from an associative array.
  70.      * Example: key1=val1&key2=val2
  71.      * <code>
  72.      * $query = array('key1' => 'val1', 'key2' => 'val2');
  73.      * </code>
  74.      *
  75.      * @return string $newQuery
  76.      */
  77.     protected function composeQueryString($query)
  78.     {
  79.         if (!is_array($query)) {
  80.             throw new Exception('"$query" must be an associative array');
  81.         }
  82.  
  83.         if (!count($query)) {
  84.             return "";
  85.         }
  86.  
  87.         $newQuery = array();
  88.         foreach ($query as $k => $v) {
  89.             $tmp = $k . "=" . $v;
  90.             array_push($newQuery, $tmp);
  91.         }
  92.         $newQuery = implode("&", $newQuery);
  93.         return $newQuery;
  94.     }
  95. }
  96.