За последние 24 часа нас посетили 22567 программистов и 1013 роботов. Сейчас ищут 734 программиста ...

Что-то вроде Url Rewriter на php [готовое решение]

Тема в разделе "Решения, алгоритмы", создана пользователем Mr.M.I.T., 12 апр 2009.

  1. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Написал щас такой класс, дописывает в нужные атрибуты, нужные переменные =)
    PHP:
    1. <?
    2. class HtmlTransParse {
    3. public static $trans_tag=array();
    4. public static $trans_replace=array();
    5. static function AddTransTag($tag,$attr=false){
    6.          if(is_array($tag)){
    7.             foreach($tag as $key=>$val)self::addtranstag($key,$val);
    8.          }else{
    9.               self::$trans_tag[$tag]=(array)$attr;
    10.          }
    11. }
    12. static function AddTransReplace($var,$value=0){
    13.          if(is_array($var)){
    14.             foreach($var as $key=>$val)self::AddTransReplace($key,$val);
    15.          }else{
    16.               self::$trans_replace[$var]=$value;
    17.          }
    18. }
    19. static function ParseTransTag($text){
    20.       if(!empty(self::$trans_tag) && !empty(self::$trans_replace)){
    21.          foreach(self::$trans_tag as $tag=>$attrs){
    22.                for($i=0,$c=count($attrs);$i<$c;$i++){
    23.                    $text=preg_replace_callback("#<{$tag}\s(?:.*?){$attrs[$i]}=(\"|')(.*?)\\1(?:.*?)>#is",
    24.                                                array("self","Callback_ParseTag")
    25.                                                ,$text);  
    26.                }
    27.          }
    28.       }
    29.       return $text;
    30.   }
    31.  private static function Callback_ParseTag($m){
    32.     $varstr="";
    33.     foreach((array)self::$trans_replace as $var=>$value)
    34.            $varstr.=$var."=".$value."&";
    35.     $varstr=substr($varstr,0,-1);
    36.     if(strpos($m[2],"?")){
    37.        return str_replace($m[2],$m[2]."&".$varstr,$m[0]);
    38.     }else{
    39.        return str_replace($m[2],$m[2]."?".$varstr,$m[0]);
    40.     }
    41.  }
    42. }
    43. ?>
    пример
    PHP:
    1. <?
    2. $text="Текст со ссылками и формами";
    3. HtmlTransParse::AddTransTag(array("a"=>"href","form"=>"action"));
    4. HtmlTransParse::AddTransReplace(array("referal"=>"kakoi to referal","random"=>rand(1,999)));
    5. print HtmlTransParse::ParseTransTag($text);
    6. ?>
    вроде без глюков =)
    Правдо у меня такое ощущение что это велосипед и в пхп есть уже готовая реализация..
     
  2. kostyl

    kostyl Guest

    А можно вкратце что он конкретно делает, а то я не могу разобраться... :)
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну типа была ссылка <a href="/showtopic/?id=10"></a>
    будет <a href="/showtopic/?id=10&referal=kakoi to referal&random=43"></a>
    мне просто надоело рефералы в шаблончиках ручками писать =)
     
  4. kostyl

    kostyl Guest

    Mr.M.I.T.
    а проверять их не надоело? :)
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    чего проверять?
     
  6. kostyl

    kostyl Guest

    переменную referal
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    она не на каждой странице нужна, но достаточно на многих