web-dev-qa-db-fra.com

Créer un lien du backend vers le chemin SEF dans le frontend

Je voudrais créer un lien dans le panneau d'administration qui redirige un utilisateur vers une URL SEF dans Frontend.

Code dans le backend

<?php 
$link = JUri::root() . 'index.php?option=com_content&view=article&id=1';
echo '<a href="'. JRoute::_($link) . '">Test</a>'
?>

Cela ne peut pas être traduit en SEF car j'utilise JUri::root() dans mon $link.

Si c'est possible, quelle est la meilleure façon de procéder?

1
spiNOops

Depuis la version 3.9, il existe une méthode Joomla\CMS\Router\Route::link() qui prend le client (site ou administrateur) comme premier argument.

$link = 'index.php?option=com_content&view=article&id=1';
echo '<a href="' . JRoute::link('site', $link) . '">Test</a>';

Si vous avez l'objet article disponible, vous devez utiliser ContentHelperRoute::getArticleRoute() et passer le slug au lieu d'ID pour supprimer la requête de base de données supplémentaire et également la catégorie et la langue pour assurer un routage correct.

// Register helper class.
JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php');

$link = ContentHelperRoute::getArticleRoute($article->id . ':' . $article->alias, $article->catid, $article->language);
echo '<a href="' . JRoute::link('site', $link) . '">Test</a>';
1
Sharky