Bonjour,

Dans mon application j'ai un problème au niveau de la génération des url.
Merci

url normal

Quand je change de langue j'ai pas de problème au niveau des url

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
http://localhost/test/boutique/index.php
http://localhost/test/boutique/index.php?language=fr
http://localhost/test/boutique/index.php?language=en
Quand je choisi un langue à partir de l'index, et je vais dans produit par exemple, pas de problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
http://localhost/test/boutique/index.php?Products&Description&products_id=1
Mais cela se corse quand je suis dans un produit et que je change de langue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
localhost/test/boutique/index.php?Products=&Description=&products_id=1&language=en
La il y a un problème d'écritur d'url mais qui n'a pas d'incidence sur le site, cela concerne uniquement le changement de langue sur la page.


Voici les éléments de traitement et de génération

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
   public static function link($page, $parameters = null, $add_session_id = true, $search_engine_safe = true)  {
 
      $page = HTML::sanitize($page);
 
      $site = $req_site = static::$site;
 
      if ((strpos($page, '/') !== false) && (preg_match('/^([A-Z][A-Za-z0-9-_]*)\/(.*)$/', $page, $matches) === 1) && OSCOM::siteExists($matches[1], false)) {
          $req_site = $matches[1];
          $page = $matches[2];
      }
 
      if (!is_bool($add_session_id)) {
        $add_session_id = true;
      }
 
      if (!is_bool($search_engine_safe)) {
        $search_engine_safe = true;
      }
 
      if (($add_session_id === true) && ($site !== $req_site)) {
        $add_session_id = false;
      }
 
      $link = static::getConfig('http_server', $req_site) . static::getConfig('http_path', $req_site) . $page;
 
      if (!empty($parameters)) {
        $p = HTML::sanitize($parameters);
 
// pb lien
        $p = str_replace([
                          "\\", // apps
                          '{', // product attributes
                          '}' // product attributes
                          ], [
                            '%5C',
                            '%7B',
                            '%7D'
                          ], $p);
 
 
        $link .= '?' . $p;
        $separator = '&';
      } else {
        $separator = '?';
      }
 
      while((substr($link, -1) == '&') || (substr($link, -1) == '?')) {
        $link = substr($link, 0, -1);
      }
 
// Add the session ID when moving from different HTTP and HTTPS servers, or when SID is defined
      if (($add_session_id === true) && Registry::exists('Session')) {
        $OSCOM_Session = Registry::get('Session');
 
        if ($OSCOM_Session->hasStarted() && ($OSCOM_Session->isForceCookies() === false)) {
          if ((strlen(SID) > 0) || (((HTTP::getRequestType() == 'NONSSL') && (parse_url(static::getConfig('http_server', $req_site), PHP_URL_SCHEME) == 'https')) || ((HTTP::getRequestType() == 'SSL') && (parse_url(static::getConfig('http_server', $req_site), PHP_URL_SCHEME) == 'http')))) {
            $link .= $separator . HTML::sanitize(session_name() . '=' . session_id());
          }
        }
      }
 
      while(strpos($link, '&&') !== false) {
        $link = str_replace('&&', '&', $link);
      }
 
      if ($search_engine_safe === true && defined('SEARCH_ENGINE_FRIENDLY_URLS') && (SEARCH_ENGINE_FRIENDLY_URLS == 'true' && SEFU::start()) && static::getSite() != 'ClicShoppingAdmin') {
//        $link = str_replace(['?', '&', '='], '/', $link);
        $link = str_replace(['?', '&', '='], ['/', '/', ','], $link);
      }
 
      return $link;
    }


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
   public static function link($url, $element, $parameters = null) {
      return '<a href="' . $url . '"' . (!empty($parameters) ? ' ' . $parameters : '') . '>' . $element . '</a>';
    }



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
   public function getFlag() {
      if (!isset($_GET['Checkout'])) {
        $content = '';
 
        $get_params = [];
 
        foreach ( $_GET as $key => $value ) {
          if (($key != 'language') && ($key != Registry::get('Session')->getName()) && ($key != 'x') && ($key != 'y')) {
            $get_params[] = $key . '=' . $value;
          }
        }
 
        $get_params = implode($get_params, '&');
 
 
        if ( !empty($get_params) ) {
          $get_params .= '&';
        }
 
        foreach ($this->getAll() as $value) {
          $content .= ' ' . HTML::link(OSCOM::link('index.php', $get_params . 'language=' . $value['code']), $this->getImage($value['code'])) . ' ';
        }
      }
 
      return $content;
    }

les éléments à propos $_GET de la fonction getFlag
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
  'Products' => string '' (length=0)
  'Description' => string '' (length=0)
  'products_id' => string '1' (length=1)
  'language' => string 'en' (length=2)