За последние 24 часа нас посетили 21913 программистов и 988 роботов. Сейчас ищут 673 программиста ...

класс для организации правильных чпу

Тема в разделе "Решения, алгоритмы", создана пользователем dark-demon, 19 июл 2007.

  1. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    по мотивам этого кода: http://php.ru/forum/viewtopic.php?p=55787#55787
    написал класс:
    PHP:
    1. <?php
    2. class Mojura_RequestUUU {
    3.     var $prefix= ''; // external engine root
    4.     var $handler= ''; // handler who will process the request
    5.     var $params= array(); // uuu parameters (ordered index-associative array)
    6.     var $post= array(); // get and post data by 1 array
    7.     function Mojura_RequestUUU () {
    8.         $prefix= dirname($_SERVER['SCRIPT_NAME']).'/';
    9.         $pathinfo= substr(preg_replace('/\?.*/','',$_SERVER['REQUEST_URI']),strlen($prefix));
    10.         if (strpos($pathinfo,'index.php/')===0):
    11.             $pathinfo= substr($pathinfo,10);
    12.             $prefix.= 'index.php/';
    13.         endif;
    14.         $parts= array_filter(explode('/',$pathinfo));
    15.         @list($handler,$uin)= explode(':',array_shift($parts));
    16.         $params= array();
    17.         if ($uin) $params[]= $uin;
    18.         foreach ($parts as $n => $part):
    19.             $pair= explode(':',$part);
    20.             if (count($pair)==2):
    21.                 $params[$pair[0]]= $pair[1];
    22.             else:
    23.                 $params[]= $part;
    24.             endif;
    25.         endforeach;
    26.         $request= array();
    27.         $this->prefix= $prefix;
    28.         $this->handler= ifs (trim(strtr($handler,array('.'=>'/')),'/'), 'catalog');
    29.         $this->params= $params;
    30.         $this->post= $_GET+$_POST;
    31.     }
    32.     function uri ($handler=NULL, $params=array(), $get=array()) { // uri('topic/xml:flame_about_all',array('page'=>20),array('vardump'=>'v1'))
    33.         $uri= '/'.strtr($handler,'/','.').'/';
    34.         if (is_string($params)):
    35.             $uri.= trim($params,'/').'/';
    36.         else:
    37.             foreach ($params as $name => $value):
    38.                 if (is_int($name)) $uri.= $value.'/';
    39.                 else $uri.= $name.':'.$value.'/';
    40.             endforeach;
    41.         endif;
    42.         if (is_string($get)):
    43.             $uri.= $get;
    44.         else:
    45.             if ($get) $uri.='?';
    46.             foreach ($get as $name => $value):
    47.                 $uri.= $name.'='.$value.'&';
    48.             endforeach;
    49.         endif;
    50.         return $uri;
    51.     }
    52. }
    53.  
    метод uri возвращает ссылку относительно корня сайта
    лучше его использовать как синглетон.
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    o_O а в чём выражается правильность? Или нашёлся стандарт какой? :)
    Код (Text):
    1. ifs
    Объяви ты её в классе, как private.
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    правильные, потому, что я их считаю правильными :) подробней я изложил свою позицию в той теме.
    ifs - не объявлять же её в каждом классе ;-)