Cum modifici un URL?
Am fost pus – și nu o dată! – în situația de a modifica structura unui URL. Și nu e vorba de domeniu sau TLD ci de parametri.
De exemplu, din url-ul următor:
https://iamntz.com/?s=ie9&post_type=post&posts_per_page=15
Vreau să schimb parametri în:
https://iamntz.com/?s=ie9&post_type=custom_post_type&posts_per_page=25¤t_page=5
Cum se face?
Chiar dacă în ultima vreme am băgat cod PHP mai mult decât mi-aș fi dorit (deși nu aș putea să mă plâng că nu mi-a plăcut), nu pot spune că sunt avansat. Probabil aș putea să mă încadrez pe undeva la average. Prin urmare, trebuie să improvizez:
function addURLParameters($url, $params){ foreach($params as $key=>$param) { $url = addURLParameter($url, $key, $param); } return $url; } function addURLParameter($url, $paramName, $paramValue) { $url_data = parse_url($url); $params = array(); parse_str($url_data['query'], $params); $params[$paramName] = $paramValue; $url_data['query'] = http_build_query($params, '', '&'); return build_url($url_data); } function build_url($url_data){ $url = $url_data['scheme'] . '://'; if(isset($url_data['user'])){ $url .= $url_data['user']; if(isset($url_data['pass'])){ $url .= ':' . $url_data['pass']; } $url .= '@'; } $url .= $url_data['host']; if(isset($url_data['port'])){ $url .= ':' . $url_data['port']; } $url .= $url_data['path']; if(isset($url_data['query'])){ $url .= '?' . $url_data['query']; } if(isset($url_data['fragment'])){ $url .= '#' . $url_data['fragment']; } return $url; }
Funcția am luat-o de undeva dar nu mai știu de unde (cred că stackoverflow, dar nu sunt foarte sigur) și am curățat-o puțin, am formatat-o și i-am adăugat funcția addURLParameters
. Care îți permite să adaugi mai mulți parametri dintr-o dată.
Cum se folosește?
Pentru a schimba un singur parametru (continuăm exemplul de mai sus):
$url = 'https://iamntz.com/?s=ie9&post_type=post&posts_per_page=15'; $url = addURLParameter($url, 'post_type', 'custom_post_type'); $url = addURLParameter($url, 'current_page', 5);
Pentru a schimba mai mulți parametri poți continua – ca mai sus – cu câte un parametru pe linie sau te poți folosi de arrays
(refuz să-l traduc ca matrice sau tablou ):
$url = 'https://iamntz.com/?s=ie9&post_type=post&posts_per_page=15'; $url = addURLParameters($url, array( 'post_type' => 'custom_post_type', 'posts_per_page' => 25, 'current_page' => 5 ));
Aici este și varianta JavaScript, pentru cei interesați.
de fapt, array se traduce cu “sir”. ca e sir multidimensional… alta poveste
pare destul de complicat codul, am scris si eu o functie asemanatoare, poate ajuta https://gist.github.com/921378
Poti sa traduci array si prin vector.
Andrei, știi cum e zicala aia cu obiceiurile și cu bordeiele, da?
Dar mulțumesc pentru cod, într-adevăr, pare mult mai clean.
tXK, add: ok.
Salut. Observ ca te pricepi la teme. Daca ai PayPal, am 7/8 euro, care ii pun la dispozitie pentru o tema, sau niste modificari. Da-mi add pe mess : [email protected]
Wow! 8€? Păi cu banii ăștia îmi deschid hotel!
Sigur n-ai uitat vreo 2 cifre?
sigur se gaseste vreun indian care poate ii face chiar 2 teme
n-ai înțeles ”” omul a zis 7/8…