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

4
我需要创建一个用户专属的内容页面,我有注册用户,并且我需要创建一个模块/页面/菜单/动态或其他显示仅针对某一或多个用户的文章。
例如,在我的网站中,我向公众展示了一些项目(文章已经编辑成架构项目)例如:新闻,完成的项目等等,有些人注册并可以访问其他专为注册用户而设的内容,例如:只有注册客户会感兴趣的新项目,到目前为止,我成功地做到了这一点,但现在,我需要为特定用户创建工作,他/她只能在自己的动态中看到它,例如:我们制作的他们项目的状态,一些正在进行中的工作照片库等。
因此,这个动态必须是一个模块/页面/菜单,它显示具有特定类别和针对注册用户的文章。但我希望能够发布仅针对某个特定用户或一组用户的文章,并在该动态(模块)中显示,或者至少创建一个全新的模块,显示用户特定的内容而不必为每个用户创建分类和访问级别。
是否有扩展程序或插件可以帮助我做到这一点?

2
你可能会在新的Joomla Stack Exchange网站上获得更好的受众:http://joomla.stackexchange.com/。 - web-tiki
3个回答

2
系统实际上不支持您要求的内容,但您可以使用以下设置:
创建一个内容插件(http://docs.joomla.org/J2.5:Creating_a_content_plugin)。在onContentPrepareForm事件中,您可以修改created_by_alias字段,以便将其用于允许查看此内容文章的特殊用户。
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

这个方案应该保护未经授权的用户无法查看为特定用户准备的文章内容。模块应该在漂亮地输出所需显示内容后,为已登录的用户展示文章列表。该模块可以按照正常方式链接到文章,授权用户将能够访问。因此,它应该是“足够安全”的,并提供您需要的功能而不会带来太多麻烦。

2

你需要做两件事:

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

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


我已经完成并使其工作,但如何为特定用户创建一篇文章?而不仅仅是一个子组。 - nosmirck
嗨,除非您为该用户创建一个特定的组,否则无法仅针对特定用户进行此操作。对于其他操作(编辑、创建、删除等),您可以为特定用户设置权限,但是对于查看,您只能使用与用户组链接的不同访问级别。 - jonasfh
扩展功能怎么样?至少有一个让用户为我创建每个用户时成为子组的扩展。 - nosmirck
嗯,我知道有一些扩展,但我没有尝试过,无法帮助你。你可以编写一个用户插件,在创建新用户时添加新的用户组和访问级别,但这听起来像是一个不太好的解决方案。 - jonasfh
经过长时间的尝试和思考,我接受了这个解决方案,因为这是我唯一能做到的方式。我创建了一个用户组、访问级别,并为每个用户添加了相应的权限。经过一段时间的努力,我终于完成了800多个用户的设置。感谢您的帮助! - nosmirck
显示剩余2条评论

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接