web-dev-qa-db-ja.com

フロントエンドでバックエンドからSEFパスへのリンクを作成する

ユーザーをフロントエンドのSEF URLにリダイレクトするリンクを管理者パネルに作成したいと思います。

バックエンドのコード

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

_$link_でJUri::root()を使用しているため、SEFに変換できません。

可能であれば、これを行う最善の方法は何ですか?

1
spiNOops

3.9以降、クライアント(サイトまたは管理者)を最初の引数として取るJoomla\CMS\Router\Route::link()メソッドがあります。

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

記事オブジェクトを使用できる場合は、ContentHelperRoute::getArticleRoute()を使用し、IDの代わりにスラッグを渡して、余分なデータベースクエリを削除し、カテゴリと言語を削除して、正しいルーティングを確保する必要があります。

_// 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