Профиль плагин нового расширения в Joomla! 1,6. Это позволяет добавлять дополнительные поля в регистрации и профиля формы передняя com_user и пользователей создавать и редактировать формы в задней части.
Простой пример плагина входит в основные Joomla! установки как доказательство концепции. Гораздо более сложное плагины возможно.
Например плагин использует на onContentPrepareForm и onUserAfterSave событий.
Несколько плагинов профиля могут быть включены и будет представлена в виде последовательности.
На этой странице отображаются пример второй плагин, названный profile5. Он добавляет одно поле называется что-то.
Это структура файла
plugin5.php
plugin5.xml
/profiles/profile.xml
Справочная поля создаются с XML-файла в папке профиля.
<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: profile.xml 16723 2010-05-04 01:37:00Z eddieajau $ -->
<form>
<fields name="profile">
<fieldset name="profile"
label="PLG_USER_PROFILE_SLIDER_LABEL"
>
<field
name="something"
type="text"
id="something"
description="PLG_USER_PROFILE_FIELD_SOMETHING_DESC"
filter="string"
label="PLG_USER_PROFILE_FIELD_SOMETHING_LABEL"
message="PLG_USER_PROFILE_FIELD_SOMETHING_MESSAGE"
size="30"
/>
</fieldset>
</fields>
</form>
profile5.php
<?php
/**
* @version $Id: profile.php 17685 2010-06-14 21:46:46Z dextercowley $
* @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('JPATH_BASE') or die;
/**
* An example custom profile plugin.
*
* @package Joomla.Plugins
* @subpackage user.profile
* @version 1.6
*/
class plgUserProfile5 extends JPlugin
{
/**
* @param string The context for the data
* @param int The user id
* @param object
* @return boolean
* @since 1.6
*/
function onContentPrepareData($context, $data)
{
// Check we are manipulating a valid form.
if (!in_array($context, array('com_users.profile', 'com_users.registration'))) {
return true;
}
$userId = isset($data->id) ? $data->id : 0;
// Load the profile data from the database.
$db = &JFactory::getDbo();
$db->setQuery(
'SELECT profile_key, profile_value FROM #__user_profiles' .
' WHERE user_id = '.(int) $userId .
' ORDER BY ordering'
);
$results = $db->loadRowList();
// Check for a database error.
if ($db->getErrorNum()) {
$this->_subject->setError($db->getErrorMsg());
return false;
}
// Merge the profile data.
$data->profile = array();
foreach ($results as $v) {
$k = str_replace('profile.', '', $v[0]);
$data->profile[$k] = $v[1];
}
return true;
}
/**
* @param JForm The form to be altered.
* @param array The associated data for the form.
* @return boolean
* @since 1.6
*/
function onContentPrepareForm($form, $data)
{
// Load user_profile plugin language
$lang = JFactory::getLanguage();
$lang->load('plg_user_profile', JPATH_ADMINISTRATOR);
if (!($form instanceof JForm)) {
$this->_subject->setError('JERROR_NOT_A_FORM');
return false;
}
// Check we are manipulating a valid form.
if (!in_array($form->getName(), array('com_users.profile', 'com_users.registration','com_users.user'))) {
return true;
}
if ($form->getName()=='com_users.profile')
{
// Add the profile fields to the form.
JForm::addFormPath(dirname(__FILE__).'/profiles');
$form->loadFile('profile', false);
// Toggle whether the something field is required.
if ($this->params->get('profile-require_something', 1) > 0) {
$form->setFieldAttribute('something', 'required', $this->params->get('profile-require_something') == 2, 'profile');
} else {
$form->removeField('something', 'profile');
}
//In this example, we treat the frontend registration and the back end user create or edit as the same.
elseif ($form->getName()=='com_users.registration' || $form->getName()=='com_users.user' )
{
// Add the registration fields to the form.
JForm::addFormPath(dirname(__FILE__).'/profiles');
$form->loadFile('profile', false);
// Toggle whether the something field is required.
if ($this->params->get('register-require_something', 1) > 0) {
$form->setFieldAttribute('something', 'required', $this->params->get('register-require_something') == 2, 'profile');
} else {
$form->removeField('something', 'profile');
}
}
}
function onUserAfterSave($data, $isNew, $result, $error)
{
$userId = JArrayHelper::getValue($data, 'id', 0, 'int');
if ($userId && $result && isset($data['profile']) && (count($data['profile'])))
{
try
{
$db = &JFactory::getDbo();
$db->setQuery('DELETE FROM #__user_profiles WHERE user_id = '.$userId);
if (!$db->query()) {
throw new Exception($db->getErrorMsg());
}
$tuples = array();
$order = 1;
foreach ($data['profile'] as $k => $v) {
$tuples[] = '('.$userId.', '.$db->quote('profile.'.$k).', '.$db->quote($v).', '.$order++.')';
}
$db->setQuery('INSERT INTO #__user_profiles VALUES '.implode(', ', $tuples));
if (!$db->query()) {
throw new Exception($db->getErrorMsg());
}
}
catch (JException $e) {
$this->_subject->setError($e->getMessage());
return false;
}
}
return true;
}
}
Profile5.xml определяет, будет ли поле является обязательным, инвалиды или дополнительно в форме. Так говорит profile5.php для лечения бэкэнд создавать и редактировать же, как регистрация только два набора вариантов необходимо, зарегистрироваться и профиль.
<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: -->
<install version="1.6" type="plugin" group="user">
<name>plg_user_profile5</name>
<author>Joomla! Project</author>
<creationDate>January 2008</creationDate>
<copyright>(C) 2005 - 2010 Open Source Matters. All rights reserved.</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail> Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript </authorEmail>
<authorUrl>www.joomla.org</authorUrl>
<version>1.6.0</version>
<description>PLG_USER_PROFILE_XML_DESCRIPTION</description>
<files>
<filename plugin="profile5">profile5.php</filename>
<filename>index.html</filename>
<folder>profiles</folder>
</files>
<languages>
<language tag="en-GB">en-GB.plg_user_profile.ini</language>
<language tag="en-GB">en-GB.plg_user_profile.sys.ini</language>
</languages>
<config>
<fields name="params">
<fieldset name="basic">
<field name="register-require-user" type="spacer"
label="PLG_USER_PROFILE_FIELD_NAME_REGISTER_REQUIRE_USER"
/>
<field name="register-something" type="list"
default="0"
description="PLG_USER_PROFILE_FIELD_SOMETHING_DESC"
label="PLG_USER_PROFILE_FIELD_ADDRESS1_LABEL"
>
<option value="2">JOPTION_REQUIRED</option>
<option value="1">JOPTION_OPTIONAL</option>
<option value="0">JDISABLED</option>
</field>
<field name="profile-require-user" type="spacer"
label="PLG_USER_PROFILE_FIELD_NAME_PROFILE_REQUIRE_USER"
/>
<field name="profile-require_something" type="list"
default="1"
description="PLG_USER_PROFILE_FIELD_SOMETHING_DESC"
label="PLG_USER_PROFILE_FIELD_SOMETHING_LABEL"
>
<option value="2">JOPTION_REQUIRED</option>
<option value="1">JOPTION_OPTIONAL</option>
<option value="0">JDISABLED</option>
</field>
</fieldset>
</fields>
</config>
</install>
Установив profile5 Вы можете добавить новые поля в дополнение к тем, в профиль. Вы также можете контролировать, какие зрения уровней видеть этих областях. Кроме того, вы можете написать более сложной общей плагин с различной управления для различных групп.
