Joomla组件开发(版本3.3.3)

时间:2014-08-23 18:00:39

标签: php joomla joomla-component

我有一个我在joomla中构建的组件,我只想在组件是调用代理时才从其中呈现信息。

实施例: 我有一个网址http://domain.com/index.php?option=com_mycomp&view=myaccount 从那里我想有一个pop / overlay来呈现网址: http://domain.com/index.php?option=com_mycomp&view=mykey&user_id=123

我知道必须有一种方法只能让" mykey"从自身调用时的视图渲染,不允许直接访问。我已经查看了登录模块并使用了JHtml :: _(' form.token')。不确定这是否是最佳实践"实现这一目标的方法,或者甚至是否有效。

非常感谢任何帮助。

Joomla版本:3.3.3

1 个答案:

答案 0 :(得分:0)

使用SSL,用户会话的登录验证和每个请求验证会话我会考虑最佳实践。 Joomla提供了一种显示表单标记字段的机制:

 echo JHtml::_('form.token');

如果您需要将令牌附加到URL。当想要呈现HTML片段时,tmpl = componen参数很重要。这标志Joomla只渲染组件视图,否则你会得到你的整个网站;菜单,模块和所有后面:

 echo JRoute::(JUri::root() . '?option=com_mycomponent&view=userscreen&tmpl=component&' . JUtility::getToken() . '=1');

在请求服务器端的另一端,使用上述路径作为示例,可以通过控制器接收:

class MineControllerUserScreen extends JControllerLegacy
{
    public function display($cachable = false, $urlparams = array())
    {
        // Validate the session is valid, die if isn't
        JRequest::checkToken() or die( JText::_( 'Invalid Token' ) );

        // Load the current user object for the active session if needed
        $user = JFactory::getUser();

        // Load the Session object for further validation if needed
        $session = JFactory::getSession();

        // Load sanitized items from POST and GET
        $jinput = JFactory::getApplication()->input;
        $answer = $jinput->get('user_answer', null, 'string');

        // You are satisfied this person is allowed to get this
        parent::display($cachable, $urlparams);
    }
}

此用例应在控制器内处理。上面的例子列出了许多可以从Joomla获取安全数据的选项,你可以使用它们;但是对于你的情况,我认为将现有的问题/答案作为POST变量请求,并通过令牌和用户验证都可以解决问题。

这是关于安全编码指南的一般Joomla文档。

http://docs.joomla.org/Secure_coding_guidelines