如何在Joomla中创建特定于用户的内容! 3.0?

时间:2014-04-15 18:45:52

标签: joomla module joomla3.0 article

我需要创建一个特定于用户的内容页面,我已注册用户,我需要创建一个模块/页面/菜单/订阅源或任何显示仅适用于一个或一些用户的文章。

例如,在我的网站中,我向公众展示了一些项目(作为一些架构项目编辑的文章),例如:新闻,已完成的项目等,有些人注册并可以访问其他针对注册用户的内容,例如:只有注册客户会感兴趣的新项目,到目前为止,我设法完成这项工作,但现在,我的工作是针对特定用户的,他/她只能在他/她的Feed中看到它,因为例如:我们的项目状态,一些画廊中有正在进行的工作的照片等等。

因此,此Feed必须是一个模块/页面/菜单,显示具有特定类别的文章和注册用户。但我希望能够发布一篇专门针对特定用户或一组用户的文章,并在此Feed(模块)中展示,或者至少发布一个显示用户特定内容的新模块,而无需创建类别以及每个用户的访问级别。

是否有扩展程序或插件可以帮助我这样做?

3 个答案:

答案 0 :(得分:2)

你需要做两件事:

  • 将新用户组(用户 - >用户组)设为子组 注册。添加需要特殊权限的用户 基。
  • 创建一个新的访问级别(用户 - >访问级别)并添加您 此访问级别的新用户组
  • 在要限制访问的文章上设置访问级别。

模块应在将访问级别显示给用户之前检查访问级别,并仅将受限制的文章显示给具有正确权限的文章。

答案 1 :(得分:2)

系统并非真正支持您的要求,但您可以使用以下设置:

制作内容插件(http://docs.joomla.org/J2.5:Creating_a_content_plugin)。在onContentPrepareForm事件中,您修改created_by_alias-field以将其用于允许查看此内容文章的特殊用户。

function onContentPrepareForm($form, $data){
    // first check that context is right
    // Then change the type of the field. This should allow to select 
    // the user when you create the article. 
    $form->getField('created_by_alias')->__set('type', 'user'); 
}

在onContentPrepareData事件中,检查created_by_alias中的数据是否引用了您的用户所在的用户组中的有效用户

public function onContentPrepare($context, $article, $params, $page){
    // first check that context is right
    //Then fetch the user data: 

    if(is_int($article->created_by_alias)){ // ( Optionally check if the article is in a specific category )
        $db=JFactory::getDbo(); 
        $currentuser=JFactory::getUser(); 
        $allowedgroup=2; // the registered users group
        $sql="select u.id from #__users inner join #__user_usergroup_map ug (u.id=ug.user_id) where ug.group_id={$allowedgroup}";  
        $db->setQuery($sql);
        $user=$db->loadObject();  
        if($user->id==$currentuser){
            $data->user=$user; 
        }
        else{
            //Unset the article content to prevent unothorized users from seeing the content. 
            unset($article); 
        }
}

最后,创建一个模块(http://docs.joomla.org/Creating_a_simple_module),为特定用户提供文章,至少包含:

$list=array(); 
$user=Jfactory::getUser(); 
if($user->id>0){
    $sql="select * from #__content where created_by_alias={$user->id}"; 
    // ( also add sql to check that the user has access, 
    // the article is published, the correct category etc)
    $db=Jfactory::getDbo(); 
    $db->setQuery($sql); 
    $list=$db->loadObjectList(); 
    if(!count($list)) return; 
}
else return; 
print_r($list); // Prints the content articles

此方案应保护未经授权的用户不要查看特定用户的文章内容。该模块应该(在很好地输出您想要显示的内容之后)显示已登录的inn用户的文章列表。模块可以正常方式链接到文章,授权用户可以访问。所以它应该足够安全",并提供您需要的功能而不会有太多麻烦。

答案 2 :(得分:1)

我会在这里尝试另一个人: 您可以在您的站点上安装消息系统。 UddeIM就是这样一个系统。这样您就可以为用户制作特定内容。可以配置UddeIM,以便只有管理员才能发送消息。此组件还有一些模块可显示最新消息等。