Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show a joomla article to registered users only, or a login screen if not logged in yes

In Joomla prior to 1.6 i could set a menu-item to public, and its contents: an article for example to registered.

This lead to a situation where people could see the link to an article in the menu when not logged in, but got a login component whenever they clicked it. And after that they saw the article.

In 1.7 these same actions lead to a situation where when I click the link the component screen just stays empty.

How do I get registered articles to show a login screen when the front end user is not logged in with sufficient rights? It was soo easy before and I can't seem to get it to work now.

like image 956
Hans Wassink Avatar asked May 08 '12 08:05

Hans Wassink


People also ask

How do I open an article in Joomla?

In the menu editor type in the name of the menu item in the Title text box and then click Select next to Menu Item Type. In the popup that opens select Single Article. Then click Select next to Select Article and find and click on the name the desired one. Click Save to apply the changes.

What is the default value of created by in Joomla article?

Normally, you can leave this blank and Joomla will fill in a default value. The default value is the Title in lower case and with dashes instead of spaces. You may enter the Alias manually.


2 Answers

Im gonna answer my own question, because Im sure people will need this in the future, and my solution only involves a few rules of extra code and then you can set every article etc... to Registered and you'll see a login field when a user is not logged in.

In your templates index.php place this near the top, it gets your article's access level.

$article =& JTable::getInstance("content");
$article->load(JRequest::getVar('id'));
$cAccLevel = $article->get("access");

Then add a module position above your component, and only show it when your needed access level is > 1

<?php if($cAccLevel > 1): ?>
    <jdoc:include type="modules" name="LOGIN_MODULE_POSITION" />
<?php endif; ?>

Then add a login module in your module manager to LOGIN_MODULE_POSITION.

Voila... no routing needed etc... everything works out of the box, I chose to style away the logout box and action field like this:

.logout-button,
.actions{
    display:none;
}

Good luck!

like image 187
Hans Wassink Avatar answered Oct 26 '22 12:10

Hans Wassink


  1. Create a new menu from menu manager, say it is named "hidden menu".
  2. Add any menu items that will be accessible only to registered users.
  3. Set the required access levels of these menu items ("Special" in this example, but it could also be "Registered"). Do NOT create a module for the "hidden menu". It will not be displayed on any page, so it doesn't need a module.
  4. Create your "real" menu (for example, "main menu") and the menu item that will display for all users (for example "Submit an Article"). The menu item will have a menu item type of "Alias". It's "Menu Item" parameter will be the "Submit an Article" menu item on the "hidden menu". The Access Level for this menu item will be "Public", since we want everyone to be able to see and use it.

  5. Create a module of type "mod_mainmenu" for this menu, just like you do for any menu.

  6. Create a login module and set the access level to "Public". Make sure the module is displayed only on the "Public" menu item and not the registred item, and select a visible position.

Now, when a guest (non-logged-in user) accesses the "Submit an Article" menu choice, it redirects them to blank page with the "Only for registred visitors" message. . If they log in successfully, they are taken to the desired page (in this case, "Submit an Article"). If there were already logged in, they go there directly.

like image 26
Stilero Avatar answered Oct 26 '22 12:10

Stilero