web-dev-qa-db-ja.com

カスタムコンポーネントURLルーター

だから私は https://docs.joomla.org/Supporting_SEF_URLs_in_your_component を読み、オンラインとcom_contentの両方の例を調べましたが、このルーティングを100%ダウンさせることはできません。

私のやり方が正しいのか、それとも同じことを達成するためのより良いまたはより簡単な方法があるのか​​知りたいのですが。

IDなしでわかりやすいURLを作成したい。上記で提供したリンクを使用して、簡単なソリューションを実行し、IDを取り除くことができなかった以外は機能しました:(スラッグ内の)エイリアスの前にあります。コンポーネントにはリストビューと単一のアイテムビューしかなく、カテゴリなどのビューがないため、私は複雑なソリューションを求めていません。

だから私は少し前にこれをフォーラムで見つけたと思います、そしてこれは私が効果的なルーティングシステムを持っていることを得た最も近いものでした。

問題は、ユーザーがデータベースにクエリを実行する404エラーページを表示するのではなく、たとえばmyurl.com/menuitem/incorrectaliasなどの誤ったURLを入力した場合です。このページに表示される可能性のあるすべてのアイテムが原因で、ブラウザがクラッシュします。上記のシナリオのエラーページを表示する方法はありますか?

 class mycompoenentRouter extends JComponentRouterBase 
 {
 public function build(&$ query)
 {
 $ segments = array(); 
 if(isset($ query ['id']))
 {
 $ id = explode( ':'、$ query ['id']); 
 $ segments [] = $ id [1]; 
 unset($ query ['id']); 
} 
 unset($ query ['view']); 
 $ segments; 
} 
 
関数parse(&$ segments)
 {
 $ vars = array(); 
 $ app = JFactory :: getApplication(); 
 $ menu = $ app-> getMenu(); 
 $ item = $ menu-> getActive(); 
 
スイッチ($ item-> query ['view'])
 {
 case 'list':
 $ vars ['view'] = 'item'; 
 
 $ db = JFactory :: getDbo(); 
 $ query = $ db-> getQuery(true); 
 $ query-> select( 'id '); 
 $ query-> from($ db-> quoteName(' #__ table ')); 
 $ query-> where($ db-> quoteName(' alias ')。 " = "。$ db-> quote($ segment s [0])); 
 
 $ db-> setQuery($ query); 
 $ result = $ db-> loadResult(); 
 
 $ vars ['id'] =(int)$ result; 
 break; 
} 
 
 return $ vars; 
} 
} 
1
Alex Mehan
if(empty($result)){
    JError::raiseError(404, JText::_('COM_YOURCOMPONENT_ITEM_NOT_FOUND'));
}
1
Dennis Heiden