2013-03-24 153 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__).'../../')); 

部分取決於根文件夾的偏差作爲我先前說明。