ACL に関するこのチュートリアルに従いました - http://community.joomla.org/blogs/community/1252-16-acl.html
すべてを明確にするために:これが私が必要とするものです:
- 記事にリンクしているメニュー項目がある
- ユーザーが (まだログインしていない) Web サイトにアクセスします (ユーザーが既に登録されているかどうかは関係ありません)。
- このユーザーにはメニュー項目が表示されます
- ユーザーがメニュー項目をクリックする
- ユーザーがログインしていない場合 - ユーザーはユーザー名/パスの入力を求められます
- ユーザーがログインしている場合 -> goto 6
- ログインに成功すると、ユーザーはメニュー項目がリンクされた記事の内容を見ることができます。
私の目的は、ログインしているユーザーとログインしていないユーザーのすべてに表示されるメニュー項目を作成することです。しかし、クリックすると、ログインしたユーザーのみがメニュー項目が指しているコンテンツを表示できます。ユーザーがログインしていない場合 -> ログインフォームが表示されます。
上記のチュートリアルに従った後、ログインしていないユーザーには完全に見えないメニュー項目を取得しました.
メニュー項目をすべてのユーザーに表示するにはどうすればよいですか? ただし、コンテンツを表示するにはログインが必要です。
ありがとうございました。
編集1:
この解決策を見つけましたhttp://docs.joomla.org/Auto_redirect_guests_to_login それが唯一の解決策ですか? 私は巨大なツリーメニュー構造を持っています。つまり、巨大なメニューのクローンが必要です...そして、メニュー項目名を変更するたびに、(表示メニューと非表示メニューで) 2 回行う必要があります。2つのメニューを持たない他の解決策はありますか?
編集2:
別の解決策を見つけました(コアファイルのハッキング)。これは、メニュー項目が「公開」に設定されているが、記事の ACL が「登録済み」に設定されている場合です。
コンポーネント/com_content/views/article/view.html.php
から
// Check the view access to the article (the model has already computed the values).
if ($item->params->get('access-view') != true && (($item->params->get('show_noauth') != true && $user->get('guest') ))) {
JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR'));
return;
}
に
// Check the view access to the article (the model has already computed the values).
if ($item->params->get('access-view') != true && (($item->params->get('show_noauth') != true && $user->get('guest') ))) {
// Redirect to login
$uri = JFactory::getURI();
$app->redirect('index.php?option=com_users&view=login&return=' . base64_encode($uri), JText::_('Members please login to view this page. If you are not a member please <a href="/component/users/?view=registration">register here<a>'));
return;
}
そのコードをオーバーライドして、コア ファイルのハッキングを回避するにはどうすればよいですか?
それとも、もっとエレガントな解決策がありますか?
ありがとう。