2013-03-24 79 views
2

我已经搜索并找到一种方法来与JUser做到这一点,但是当我尝试脚本它说包含文件无法找到,它不存在于服务器上。我不知道这是不是Joomla 3.0,所以我在寻求帮助。这里是我试过的脚本:Joomla 3.0注册用户与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_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); 
?> 
+0

只需要多一些信息,然后才能得到很好的答案。首先,你使用的是Joomla的版本?其次,你在哪里运行这个脚本?它在cli文件夹中吗?或者你有没有在Joomla的根目录下(configuration.php和index.php旁边)。这两件事会让你更好的回答。 – 2013-03-25 03:03:53

+0

它是Joomla 3.0,脚本位于Joomla根文件夹中。我只是把它放在那里,因为那是我读的那个地方说的。 – grant1842 2013-03-25 16:55:42

回答

0

这里是你可以使用的代码。

$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); 
+0

由于这是一个外部脚本,我将如何包含Joomla库文件? – grant1842 2013-03-25 20:29:51

4

您必须在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的安装和它的作品。

安德烈

+1

它的工作原理!我只有一个问题,'block'的0值可能会被joomla值覆盖,因为用户数据库永远只有一个,电子邮件的主体通知只是'COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY'。你可以帮我吗?谢谢! – Kerberos 2014-02-12 12:38:35

0

为> = 3的Joomla,我们需要做使用下面的代码来代替。从“JModel”更改为“JModelLegacy”。 Click here查看详细信息。

$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); 
0

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

dirname(__FILE__) 

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

define('_JEXEC', 1); 
define('JPATH_BASE', dirname(__FILE__)); 
    echo JPATH_BASE; 

确保'include'文件夹与JPATH_BASE回退的路径相同。例如,如果您的文件位于'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 = '[email protected]'; 
       $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); 
      ?> 

'../../' 的

define('JPATH_BASE', realpath(dirname(__FILE__).'../../')); 

部分取决于根文件夹的偏差作为我先前说明。