Utilisation preg_match

WRInaute discret
J'aimerais rewriter une url dans mon site qui utilise le cms Drupal.

Drupal a une fonction pour faire celà: custom_url_rewrite_outbound

J'aimerais transformer cette url:
modeles_2r/2009-aprilia-sx-50-id-2?quicktabs_23=commentaires

Comme celà:
modeles_2r/2009-aprilia-sx-50-id-2#commentaires



Code:
function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
  global $node;

  // Change all 'node' to $node->title
  if (preg_match('|^modeles-2r(/.*)|', $path, $matches)) {
    $path = 'test';
  }
}

Avec cette configuration, si mon url est: modeles_2r/2009-aprilia-sx-50-id-2, elle devient: test donc c'est ok, il reste plus que le problème du ?quicktabs_23=commentaires que je n'arrive pas à transformer.

Merci pour votre aide :wink:
 
WRInaute impliqué
Est-ce la seule url de ce type que tu veux transformer ?
Si oui :
Code:
$path = str_replace('?quicktabs_23=', '#', $path);

Si non, peut-être que preg_match() serait mieux adapté :roll:
 
WRInaute discret
Tu veux dire avec comme url quicktabs_23? Oui surement donc je pense que tu as raison d'utiliser la fonction str_replace.

Le gros problème c'est que je viens de me rendre compte que la variable $path ne gère pas ce qu'il y a après le ?
Pour trouver ce qu'il y a après c'est: $options->query.

La fonction retourne apparemment la variable $path donc je ne sais pas comment m'y prendre, j'ai donc posteé ma question sur le forum de Drupal. J'espère avoir une réponse :D

En tout cas, merci pour avoir essayé de m'aider :wink:
 
WRInaute discret
D'accord, je ne savais pas pour le '&'. J'ai donc ajouté le bout de code mais rien ne se passe.

L'url est toujours: modeles_2r/2009-aprilia-sx-50-id-2?quicktabs_23=commentaires

Le problème c'est que la str_replace s'occupe de la variable $path qui ne contient pas ce qu'il y a après le '?'

Si je met: $path = 'essai';

Mon url: modeles_2r/2009-aprilia-sx-50-id-2?quicktabs_23=commentaires

devient: essai?quicktabs_23=commentaires
 
WRInaute impliqué
peut-être :?:

Code:
$options->query = str_replace('?quicktabs_23=', '#', $options->query);
 
WRInaute discret
Si je fais un print_r de la variable $options, voici le résultat:

Code:
Array
(
    [query] => quicktabs_23=commentaires
    [attributes] => Array
        (
        )

    [html] => 
    [fragment] => 
    [absolute] => 
    [alias] => 
    [prefix] => 
    [external] => 
    [base_url] => http://localhost/beta2_les50cm3
)


Donc si je met:
Code:
$options['query'] = str_replace('quicktabs_23=commentaires', '#commentaires', $options['query']);

l'url sera: modeles_2r/2009-aprilia-sx-50-id-2?%23commentaires

Pour enlever le ? j'ai la solution:
Code:
$options[query2] = $options[query];
$options[query] = '';
$path = 'essai' . $options[query2];

Résultat: essai%23commentaires

Tu aurais une idée comment remplacer ce %23 par #? J'ai essayé avec utf8_encode() et urlencode() mais sans succès.

Merci pour ta patience :wink:
 
WRInaute discret
Je vais finalement renoncer à rewriter cette url puisque la fonction ne permet apparemment pas de mettre des caractères spéciaux comme '#'.

Par contre je vais faire des liens manuel.

Il faut donc que je configure mon .htaccess mais pour le moment je n'y arrive pas.

Voilà donc l'url que je tape manuellement:
modeles_2r/2009-aprilia-sx-50-id-2#commentaires

Il faudrait que mon .htaccess transforme cette url par:
modeles_2r/2009-aprilia-sx-50-id-2?quicktabs_23=commentaires

J'ai fait deux ou trois essais mais sans succès. Le truc c'est que si je met '#' dans mon .htaccess il l'interprète comme du texte a ne pas prendre en compte.

Merci pour ton aide.
 
Discussions similaires
Haut