web-dev-qa-db-fra.com

Ajouter des paramètres de chaîne de requête et générer une URL SEF

nous avons un script personnalisé PHP qui s'exécute sous JUMI pour effectuer et afficher certaines données.

Le script personnalisé est accessible à une URL SEF telle que

http://www.mysite.com/jumi-script

qui est une version réécrite de

http://www.mysite.com/index.php?option=com_jumi&view=application&fileid=11&Itemid=271

Maintenant, nous aimerions filtrer les données en appliquant des paramètres tels que

category=mycat&place=myplace

comme ça

/index.php?option=com_jumi&view=application&fileid=11&Itemid=271&category=mycat&place=myplace

et nous aimerions obtenir une URL SEF comme celle-ci

/jumi-script/mycat/myplace

et traiter ces variables dans mon script avec

$mycat = JFactory::getApplication()->input->post->get('category');

$myplace = JFactory::getApplication()->input->post->get('place');

Comment obtenons-nous cela? nous testons le

$currentUrl =& JURI::getInstance();
$currentUrl->setVar( 'mycat', $catvalue );

mais nous perdons le reste de la chaîne de requête. Peut-on atteindre ce qui précède? Toute suggestion?

Merci

2
neting.it

Regardant l'implémentation du routeur com_jumi ici https://github.com/BonavalMultimedia/com_jumi/blob/master/com_jumi_bnvl/router.php pour moi, il semble qu'il ne gère pas de paramètres supplémentaires lorsque sef est activé (voir la fonction JumiParseRoute).

Vous devez modifier cette fonction pour vérifier vos paramètres supplémentaires et les ajouter au fichier $vars array, ils seront donc disponibles avec JInput ou JRequest si vous utilisez une version de Joomla antérieure à la version 3.0.

Pour vérifier les paramètres, il suffit de regarder s’ils sont définis dans le $segments paramètre.

Pour voir si vous avez un category, un place ou les deux, vous devez déterminer vos propres critères ou stocker les valeurs possibles n'importe où, et vous pouvez vérifier avec certitude quelle est la valeur "type" dans chaque segment.

Exemple : mon critère est que les URL seront toujours jumi/category/place. Ensuite:

$vars['category'] = $segments[1];
$vars['place'] = $segments[2];

Bien sûr, vous devez vérifier que $segment _ les index sont définis et font la vérification dont vous avez besoin.

Peut-être voudrez-vous produire des URL SEF lors de la création des itinéraires. Ensuite, vous devriez modifier la fonction JumiBuildRoute pour suivre vos critères.

Alternative pour éditer le code

Si vous ne souhaitez pas modifier le code de routage du composant, utilisez une URL comme celle-ci:

http://www.mysite.com/jumi-script?category=mycat&place=myplace

pour obtenir votre script. Maintenant, les deux valeurs doivent être accessibles via JInput ou JRequest sur les anciennes versions de Joomla.

Cordialement,

1
Pep Lainez

Pour votre url /index.php?option=com_jumi&view=application&fileid=11&Itemid=271&category=mycat&place=myplace:

$JInput    = JFactory::getApplication()->input;
$myRequest = $JInput->getArray(array(
    'option'  =>'',
    'view'    =>'',
    'fileid'  =>'', 
    'Itemid'  =>'',
    'category'=>'',
    'place'   =>''
));

Ou si vous voulez filtrer l'entrée:

$myRequest = $JInput->getArray(array(
    'option'  =>'Word',
    'view'    =>'alnum',
    'fileid'  =>'int', 
    'Itemid'  =>'int',
    'category'=>'string',
    'place'   =>'string'
));

chaque entrée retournera une valeur sous forme de type filtré, ou NULL s'il n'y a pas de valeur.

0
cwps