Joomla 3.0使用php脚本注册用户

Joomla 3.0使用php脚本注册用户,joomla,Joomla,我已经搜索并找到了一种使用JUser执行此操作的方法,但当我尝试使用该脚本时,它会说找不到包含文件,并且服务器上不存在该文件。我不知道这对Joomla 3.0是否不同,所以我请求帮助。以下是我尝试过的脚本: <?php define( '_JEXEC', 1 ); define('JPATH_BASE', dirname(__FILE__) ); define( 'DS', DIRECTORY_SEPARATOR ); /* Required Files */

我已经搜索并找到了一种使用JUser执行此操作的方法,但当我尝试使用该脚本时,它会说找不到包含文件,并且服务器上不存在该文件。我不知道这对Joomla 3.0是否不同,所以我请求帮助。以下是我尝试过的脚本:

<?php
   define( '_JEXEC', 1 );
   define('JPATH_BASE', dirname(__FILE__) );
   define( 'DS', DIRECTORY_SEPARATOR );
   /* Required Files */
   require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
   require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

   $app = JFactory::getApplication('site');
   $app->initialise();
   require_once JPATH_ROOT.DS.'components'.DS.'com_users'.DS.'models'.DS.'registration.php';
   require_once JPATH_ROOT.DS.'libraries'.DS.'joomla'.DS.'application'.DS.'component'.DS.'helper.php';
   $model = new UsersModelRegistration();
   jimport('joomla.mail.helper');
   jimport('joomla.user.helper');

   $username = 'jimporttest';
   $name = 'J Port2';
   $email = 'test @ mail.com';
   $password = 'test';
   $data = array( 'username' => $username,
             'name' => $name,
             'email1' => $email,
             'password1' => $password, // First password field
             'password2' => $password, // Confirm password field
             'block' => 0 );
   echo $model->register($data);
?>

这是您可以使用的代码

$data['name'] = $fname . ' ' . $lname;
$data['username'] = $email;
$data['email1'] = $email;
$data['email2'] = $email;
$pwd = substr(md5($email . $fname . time()), 0, 6);
$data['password1'] = $pwd;
$data['password2'] = $pwd;

JFactory::getLanguage()->load('com_users');
JModel::addIncludePath(JPATH_ROOT . '/components/com_users/models');

$model = JModel::getInstance('Registration', 'UsersModel');
$return = $model->register($data);

这是您可以使用的代码

$data['name'] = $fname . ' ' . $lname;
$data['username'] = $email;
$data['email1'] = $email;
$data['email2'] = $email;
$pwd = substr(md5($email . $fname . time()), 0, 6);
$data['password1'] = $pwd;
$data['password2'] = $pwd;

JFactory::getLanguage()->load('com_users');
JModel::addIncludePath(JPATH_ROOT . '/components/com_users/models');

$model = JModel::getInstance('Registration', 'UsersModel');
$return = $model->register($data);

您必须在require_once子句中使用JPATH_BASE,因为您使用的是未定义的JPATH_BASE_ROOT。 在JOOMLA 3.0中,helper.php也不在该位置

请尝试以下代码:

<?php
         define( '_JEXEC', 1 );
         define('JPATH_BASE', dirname(__FILE__) );
         define( 'DS', DIRECTORY_SEPARATOR );
         /* Required Files */
         require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
         require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

         $app = JFactory::getApplication('site');
         $app->initialise();
         require_once(JPATH_BASE.DS.'components'.DS.'com_users'.DS.'models'.DS.'registration.php';
        //not necessary
        //require_once(JPATH_BASE.DS.'libraries'.DS.'joomla'.DS.'application'.DS.'component'.DS.'helper.php';
         $model = new UsersModelRegistration();
         jimport('joomla.mail.helper');
         jimport('joomla.user.helper');

         $username = 'jimporttest';
         $name = 'J Port2';
         $email = 'test @ mail.com';
         $password = 'test';
         $data = array( 'username' => $username,
         'name' => $name,
         'email1' => $email,
         'password1' => $password, // First password field
         'password2' => $password, // Confirm password field
         'block' => 0 );
          echo $model->register($data);
  ?>
我在joomla 3.0安装中尝试过这一点,效果很好


Andrea

您必须在require\u once子句中使用未定义的JPATH\u BASE\u根。 在JOOMLA 3.0中,helper.php也不在该位置

请尝试以下代码:

<?php
         define( '_JEXEC', 1 );
         define('JPATH_BASE', dirname(__FILE__) );
         define( 'DS', DIRECTORY_SEPARATOR );
         /* Required Files */
         require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
         require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

         $app = JFactory::getApplication('site');
         $app->initialise();
         require_once(JPATH_BASE.DS.'components'.DS.'com_users'.DS.'models'.DS.'registration.php';
        //not necessary
        //require_once(JPATH_BASE.DS.'libraries'.DS.'joomla'.DS.'application'.DS.'component'.DS.'helper.php';
         $model = new UsersModelRegistration();
         jimport('joomla.mail.helper');
         jimport('joomla.user.helper');

         $username = 'jimporttest';
         $name = 'J Port2';
         $email = 'test @ mail.com';
         $password = 'test';
         $data = array( 'username' => $username,
         'name' => $name,
         'email1' => $email,
         'password1' => $password, // First password field
         'password2' => $password, // Confirm password field
         'block' => 0 );
          echo $model->register($data);
  ?>
我在joomla 3.0安装中尝试过这一点,效果很好


Andrea

对于>=Joomla 3,我们需要使用以下代码。从JModel更改为JModelLegacy。详细查看

$data['name'] = $fname . ' ' . $lname;
$data['username'] = $email;
$data['email1'] = $email;
$data['email2'] = $email;
$pwd = substr(md5($email . $fname . time()), 0, 6);
$data['password1'] = $pwd;
$data['password2'] = $pwd;

JFactory::getLanguage()->load('com_users');
JModelLegacy::addIncludePath(JPATH_ROOT . '/components/com_users/models');

$model = JModelLegacy::getInstance('Registration', 'UsersModel');
$return = $model->register($data);

对于>=joomla3,我们需要使用以下代码。从JModel更改为JModelLegacy。详细查看

$data['name'] = $fname . ' ' . $lname;
$data['username'] = $email;
$data['email1'] = $email;
$data['email2'] = $email;
$pwd = substr(md5($email . $fname . time()), 0, 6);
$data['password1'] = $pwd;
$data['password2'] = $pwd;

JFactory::getLanguage()->load('com_users');
JModelLegacy::addIncludePath(JPATH_ROOT . '/components/com_users/models');

$model = JModelLegacy::getInstance('Registration', 'UsersModel');
$return = $model->register($data);

除非您的文件位于安装Joomla系统的根文件夹中,否则肯定会出现此错误

dirname(__FILE__)
返回工作文件路径。因此,您可能需要相应地修改路径。使用

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
  echo JPATH_BASE;
确保“include”文件夹与JPATH_BASE retuns位于同一路径中。例如,如果您的文件位于“www/example/test”文件夹中,则使用

define( 'JPATH_BASE', realpath(dirname(__FILE__).'../../'));
以获得正确的基本路径

我还发现你的代码中有一些错误。使用此工作代码进行测试

            <?php
                define( '_JEXEC', 1 );
                define( 'JPATH_BASE', realpath(dirname(__FILE__).'../../'));
                define( 'DS', DIRECTORY_SEPARATOR );

                require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
                require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

                $app = JFactory::getApplication('site');
                $app->initialise();   

                require_once  JPATH_ROOT.DS.'components'.DS.'com_users'.DS.'models'.DS.'registration.php';
                $model = new UsersModelRegistration();
                jimport('joomla.mail.helper');
                jimport('joomla.user.helper');


                $username = 'ben';
                $name = 'ben';
                $email = 'test@mail.com';
                $password = 'test';
                $data = array( 'username' => $username,
                         'name' => $name,
                         'email1' => $email,
                         'password1' => $password, // First password field
                         'password2' => $password, // Confirm password field
                         'block' => 0 );

                $return = $model->register($data);
            ?>

取决于我前面解释的根文件夹的偏差。

除非您的文件位于安装Joomla系统的根文件夹中,否则肯定会出现此错误

dirname(__FILE__)
返回工作文件路径。因此,您可能需要相应地修改路径。使用

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
  echo JPATH_BASE;
确保“include”文件夹与JPATH_BASE retuns位于同一路径中。例如,如果您的文件位于“www/example/test”文件夹中,则使用

define( 'JPATH_BASE', realpath(dirname(__FILE__).'../../'));
以获得正确的基本路径

我还发现你的代码中有一些错误。使用此工作代码进行测试

            <?php
                define( '_JEXEC', 1 );
                define( 'JPATH_BASE', realpath(dirname(__FILE__).'../../'));
                define( 'DS', DIRECTORY_SEPARATOR );

                require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
                require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

                $app = JFactory::getApplication('site');
                $app->initialise();   

                require_once  JPATH_ROOT.DS.'components'.DS.'com_users'.DS.'models'.DS.'registration.php';
                $model = new UsersModelRegistration();
                jimport('joomla.mail.helper');
                jimport('joomla.user.helper');


                $username = 'ben';
                $name = 'ben';
                $email = 'test@mail.com';
                $password = 'test';
                $data = array( 'username' => $username,
                         'name' => $name,
                         'email1' => $email,
                         'password1' => $password, // First password field
                         'password2' => $password, // Confirm password field
                         'block' => 0 );

                $return = $model->register($data);
            ?>

取决于我前面解释过的根文件夹的偏差。

只需再提供几条信息,就可以得到一个好的答案。首先,你使用的是什么版本的Joomla?第二,你从哪里运行这个脚本?是否在cli文件夹中?或者在configuration.php和index.php旁边的Joomla根目录中有它吗。这两件事会给你一个更好的答案。它是Joomla 3.0,脚本在Joomla根文件夹中。我之所以把它放在那里,是因为我在那里读到它说要把它放在那里。在你能得到一个好的答案之前,只需要再多一些信息。首先,你使用的是什么版本的Joomla?第二,你从哪里运行这个脚本?是否在cli文件夹中?或者在configuration.php和index.php旁边的Joomla根目录中有它吗。这两件事会给你一个更好的答案。它是Joomla 3.0,脚本在Joomla根文件夹中。我之所以把它放在那里,是因为我读到它说要放在那里。既然这是一个外部脚本,我该如何包含Joomla库文件?既然这是一个外部脚本,我该如何包含Joomla库文件?这很有效!我只有一个问题,“block”的0值可能会被joomla值覆盖,因为在用户数据库中,它永远是1,电子邮件正文通知仅为“COM\u用户\u电子邮件\u已注册\u已激活\u正文”。你能帮助我吗?谢谢当我设置从管理端运行时,我遇到了COM_用户_电子邮件等问题。我发现您需要专门加载站点语言文件$language=JFactory::getLanguage$语言->加载'com_用户',JPATH_站点'en GB',true;这就解决了这个问题——希望这能帮助其他人避免几个小时的谷歌搜索:它很有效!我只有一个问题,“block”的0值可能会被joomla值覆盖,因为在用户数据库中,它永远是1,电子邮件正文通知仅为“COM\u用户\u电子邮件\u已注册\u已激活\u正文”。你能帮助我吗?谢谢当我设置从管理端运行时,我遇到了COM_用户_电子邮件等问题。我发现您需要专门加载站点语言文件$language=JFactory::getLanguage$语言->加载'com_用户',JPATH_站点'en GB',true;这就解决了问题-希望这能帮助其他人避免几个小时的谷歌搜索: