Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите с рефакторингом
Форумы портала PHP.SU » » Вопросы новичков » Помогите с рефакторингом

Страниц (1): [1]
 

1. Морозов Семен - 01 Декабря, 2015 - 16:33:16 - перейти к сообщению
Написал код по добавлению параметра _GET в адрес страницы
Как провести грамотный рефакторинг не нарушая функциональности данного кода?

PHP:
скопировать код в буфер обмена
  1. $old_url = 'http://site.ru/catalog&page=1&color=red';
  2. $old_url2 = 'http://site.ru/catalog&color=red';
  3. $old_url3 = 'http://site.ru/catalog&color=red&page=1';
  4. $parametr = '&page=2';
  5.  
  6. $two_parts_parametr = explode("=", $parametr);
  7. $name_parametr = $two_parts_parametr[0];
  8. $value_parametr = $two_parts_parametr[1];
  9. if (preg_match('/'.$name_parametr.'/',$old_url) == true) {
  10.         if (preg_match('/'.$name_parametr.'=.*&/',$old_url) == true)
  11.                 $new_url = preg_replace('/'.$name_parametr.'=.*&/',$parametr.'&',$old_url);
  12.         else $new_url = preg_replace('/'.$name_parametr.'=.*/',$parametr,$old_url);
  13. }
  14. else $new_url = $old_url.$parametr;
  15.  
  16. echo $new_url;
2. Faraon-san - 01 Декабря, 2015 - 17:11:38 - перейти к сообщению
в переменных url у вас не правильно get параметры определены, он определяется после знака вопроса.
PHP:
скопировать код в буфер обмена
  1. $old_url = 'http://site.ru/catalog?page=1&color=red';
  2. $old_url2 = 'http://site.ru/catalog?color=red';
  3. $old_url3 = 'http://site.ru/catalog?color=red&page=1';
  4. $parameters = array('key'=>'page','data'=>2);
  5.  
  6. $data = parse_url($old_url);
  7. $query = explode('&', $data['query']);
  8. $status = false;
  9. foreach($query as $get){
  10.         $get = explode('=', $get);
  11.         if($get[0] == $parameters['key']){
  12.                 $status = true;
  13.                 break;
  14.         }
  15. }
  16.  
  17. if(!$status){
  18.         $query[] = implode('=', $parameters);
  19. }
  20.  
  21. $new_url = $data['scheme'].'://'.$data['host'].$data['path'].'?'.implode('&', $query);
  22.  
  23. echo $new_url;
3. Морозов Семен - 01 Декабря, 2015 - 17:16:09 - перейти к сообщению
Faraon-san пишет:
в переменных url у вас не правильно get параметры определены, он определяется после знака вопроса.


В данном случае первая строка ЧПУ: "?q=catalog" заменено на catalog

add
Faraon-san, Интересное решение задачи Вы предложили!
4. Мелкий - 01 Декабря, 2015 - 17:24:52 - перейти к сообщению
Осталось только выкинуть извращение с ручной обработкой параметров в пользу нативных parse_str, array_merge и последующего http_build_query
5. Морозов Семен - 01 Декабря, 2015 - 17:32:48 - перейти к сообщению
Мелкий пишет:
Осталось только выкинуть извращение с ручной обработкой параметров в пользу нативных parse_str, array_merge и последующего http_build_query


Мелкий, Огромное спасибо за наставление! Сейчас попробую сделать!

 

Powered by ExBB FM 1.0 RC1