私は、JRouteをバックエンドで動作させる必要がありました。これにより、管理者がイベントコンポーネントを使用してイベントを作成し、SEFのURLを含むメールを送信できるようになります。調べたところ、アプリインスタンスをサイトに設定し、JRouteを呼び出してアプリを管理者に戻すというヒントを見つけました。ただし、SEFのURLを取得しているときに、イベントの作成後のリダイレクト中に問題が発生します。
これが私がこれを行う方法です、これは基本的に私が見つけた古い投稿からのコピーです:
$live_site = substr(JURI::root(), 0, -1);
if(JPATH_BASE == JPATH_ADMINISTRATOR) {
// In the back end we need to set the application to the site app instead in order for JRoute to work
JFactory::$application = JApplication::getInstance('site');
}
// Create the URL
$url = $live_site . JRoute::_('index.php?option=com_icagenda&view=list&layout=event&id=' . $id . '&Itemid=' . $Itemid);
// Check if we are in the backend again
if(JPATH_BASE == JPATH_ADMINISTRATOR) {
// In backend we need to remove administrator from URL as it is added even though we've set the application to the site app
$eventLink= str_replace($live_site .'/administrator', $live_site, $url);
// Set the appilcation back to the administartor app
JFactory::$application = JApplication::getInstance('administrator');
}
上記は機能するようですが、問題はリダイレクト中、イベントが作成されてメールが送信された後です。通常、adminのイベントビューページには次のタイプのURLがあります。
administrator/index.php?option = com_icagenda&layout = edit&id = 23
しかし、JApplication :: getInstanceビジネスが原因で、リダイレクトURLがめちゃくちゃになり、500エラーが発生します。めちゃくちゃになったURLはこの形をしています
管理者/index.php/component/icagenda/?view=event&layout=edit&id=23
おそらく私が貼り付けたソリューションはJoomla 1.5からのものだったと思うので、3で別のことをする必要があるのでしょうか?
何か案は?
ありがとう!
JRouteはバックエンドでは信頼できません。あなたのアプローチは単純なインストールで機能するかもしれませんが、サードパーティのSEFプラグインがある場合、またはサードパーティのコンポーネントに若干の不規則なルーティングがあったとしても、これは無残に失敗します。
だから私は500エラーを取り除く方法には答えません。しかし、代替ソリューションを提案してください。
人気のあるSEF拡張機能であるACEsefは、私が正しく覚えていれば、最も単純で最も効果的なアプローチを使用しました。フロントエンドコンポーネント(または選択したプラグイン)にajax呼び出しを行い、realからJRouteを実行させます。 =フロントエンド。
これが私がどのように機能するようになったかです:
$live_site = substr(JURI::root(), 0, -1);
$app = JApplication::getInstance('site');
$router = &$app->getRouter();
$url = $router->build($live_site.'/index.php?option=com_icagenda&view=list&layout=event&id=' . $id . '&Itemid=' . $Itemid);
$url= $url->toString();
$eventLink= str_replace($live_site .'/administrator', $live_site, $url);
後でその$ appで何をすべきかはわかりませんが...