web-dev-qa-db-fra.com

Unset ne supprime pas le paramètre de l'URL

J'écris un composant avec deux vues: une vue liste et une vue article.

La vue liste génère les liens pour chaque article comme suit, $ text étant la variable que je veux dans l'URL.

<?php echo JRoute::_("index.php?Itemid=103&testvar=".strtolower($text)); ?>

c'est-à-dire http://www.test.com/test est la page de liste et je veux http://www.test.com/test/text comme page d'article

103 est l'id d'élément de menu où se trouve le composant. Ceci est défini dans la vue liste.

Mon routeur contient le code suivant:

if(isset($query['testvar']))
    {        
     $segments[] = $query['testvar'];
     unset($query['testvar']);

    };

Cela génère l'URL suivante: http://www.test.com/test/text?testvar=text

unset($query['testvar']); ne semble pas fonctionner pour supprimer le bit ?testvar=text. Tout le reste fonctionne comme prévu.

Une solution de contournement serait <?php echo JRoute::_("index.php?Itemid=103")."/".strtolower($text); ?> - mais cela semble compliqué.

Des idées?

3
Richard B

Jetez un coup d'oeil à la méthode JUri :: delVar: https://api.joomla.org/cms-3/classes/Joomla.CMS.Uri.Uri.Uml.html#method_delVar

JUri::delVar('testvar');

A parfaitement fonctionné pour moi :)

0
Arnor Baldvinsson

En supposant que vous ne puissiez avoir qu'une seule vue en liste, votre fonction BuildRoute devrait avoir un maximum de 1 segment (qui est l'alias de l'article). Vous devriez supprimer tous les autres segments (essayez de faire un print_r pour voir ce que vous devez désactiver.

Dans votre fonction ParseRoute, vous vérifiez le nombre de segments et vous retournez la vue Liste ou la vue Article. Voici comment:

if (count($segments) == '0'){ //it's a list view
    `return array('option'=>'com_yourcomponent', 'view'=>'list', 'Itemid'=>[the item id of your choice]);`
else //it's an article view
    `return array('option'=>'com_yourcomponent', 'view'=>'article', 'testvar' => $segments[0], 'Itemid'=>[the item id of your choice]);`
1
itoctopus