web-dev-qa-db-fra.com

Comment changer une URL SEF pour afficher un autre modèle?

J'utilise Joomla 3.3 et K2 v2.6.9.

J'ai une vue de catégorie avec plusieurs éléments, à savoir des livres. L'URL ressemble à ceci:

http://localhost/index.php?option=com_k2&view=itemlist&task=category&id=214:publikationen&Itemid=203

Pour présenter ces éléments dans une liste de style CSV, je dois utiliser un autre modèle, appelé csv-view. Je crée donc le lien vers cette vue par ce code:

<?php echo $_SERVER['REQUEST_URI']; ?>&amp;template=csv-view

résultant dans cette URL:

http://localhost/index.php?option=com_k2&view=itemlist&task=category&id=214:publikationen&Itemid=203&template=csv-view

Cela marche.

Mais quand j'active SEF URL, l'URL devient

http://localhost/navigation/forschung/itemlist/category/214-publikationen.html

et l'URL étendue serait

http://localhost/navigation/forschung/itemlist/category/214-publikationen.html&template=csv-view

et cette page est introuvable.

Voici donc ma question: comment puis-je construire l'URL correcte pour la vue CSV même si les URL SEF sont activées?

5
lars k.
  1. Au lieu de $_SERVER['REQUEST_URI'], Vous pouvez compter sur JUri::root()

  2. le paramètre template ne peut pas être ajouté en le concaténant avec &. Ce doit être ? ... mais cela dépend de la requête URL. Ainsi, vous avez besoin d’un morceau de code comme celui-ci pour définir le lien:

    $uri = JUri::getInstance($url);
    $query = $uri->getQuery();
    
    if (empty($query))
    {
        $glue = '?';
    }
    else
    {
        $glue = '&';
    }
    

Comme suggéré par @fruppel d'une manière plus compacte:

    $uri = JUri::getInstance($url); 
    $uri->setVar('tmpl', 'csv-view'); 
    $url = $uri->toString();
4
Anibal