4

記事 ID に基づいて記事の URL を生成しようとしています。

このクエリを実行した後

SELECT a.sectionid,
CASE WHEN CHAR_LENGTH( a.alias )
THEN CONCAT_WS( ":", a.id, a.alias )
ELSE a.id
END AS slug,
CASE WHEN CHAR_LENGTH( cc.alias )
THEN CONCAT_WS( ":", cc.id, cc.alias )
ELSE cc.id
END AS catslug
FROM #__content AS a
INNER JOIN #__categories AS cc ON cc.id = a.catid
WHERE a.id = $articleID

結果を保存し、$dataこの方法でリンクを生成します。

$link = JRoute::_(ContentHelperRoute::getArticleRoute($data[0]->slug, $data[0]->catslug, $data[0]->sectionid));

問題は、記事がどのメニューにも属していない場合、生成されたリンクが正しくないことです。

私の記事がどのメニューにも関連付けられていない場合、API が を取得active menu idし、生成されたリンクにパラメーターを追加することに気付きました"&Itemid=MyActiveMenuId"(これはroute.phpファイルで行われます)。ただし、アクティブなメニューに記事が存在しないため、生成されたリンクは機能しません。

APIが「アクティブなメニューID」を取得する代わりに「アイテムメニューID」を無視するだけで機能することはわかっていますが、Joomlaコードを変更せずにこれを行うことができますか? また、記事が実際にメニューに属している場合は、引き続き「アイテム メニュー ID」が考慮されるようにしたいので、生成される URL は SEF になります。

これを解決する方法はありますか?それとも、すべての記事がメニュー項目に属している必要がありますか?

私のJoomlaのバージョンは2.5.13です

4

2 に答える 2

2

記事 ID (コード内) に基づいて URL を生成しようとしている場合$articleID、クエリは次のようになります。

select id from #__menu where link='index.php?option=com_content&view=article&id=$articleID';

この例では、結果を$menuID、またはそのに保存したと仮定します$hasMenuID===false。次に、次のように出力 URL を決定します。

if($hasMenuID===false) $outURL = "index.php?option=com_content&id=$articleID";
else $outURL = "index.php?option=com_content&itemid=$menuID";

SEF フレンドリーな URL が必要な場合は、JRouteを適用できます。また、最初のクエリの前に $articleID を整数に型キャストすることを忘れないでください。SQL の安全性とすべて。

于 2013-12-30T14:46:19.630 に答える
1

メニューを機能させるために、すべての記事をメニューにリンクする必要はありません。

完全な URL を取得するには、JRoute を介して URL を実行する必要があります。

echo $id =JRequest::getVar('id');
$url = JRoute::_('index.php?option=com_content&view=article&id='.$id);

.htaccess を使用して、URL を別の URL にリダイレクトすることもできます。URL にリダイレクトするのに役立つ他の拡張機能もあります。

URL の残りの部分については、呼び出しているコンポーネント (上記のようにオプションとして追加されます。コンテンツ マネージャーは常に com_content です) とビュー (記事の場合は記事) を知る必要があります。/components/com_content/views/ の下のファイル構造を確認すると、com_content で使用できるさまざまなビューを確認できます。記事のほかに、記事、カテゴリ、カテゴリ、およびその他のいくつかが表示されます。

于 2014-01-06T05:25:55.747 に答える