Я изучаю программирование от недели и немного, и, кажется, я застрял на основах. Я хочу написать плагин для Joomla, который будет запускать каждый пользователь редактировать любые данные в своем профиле, и он будет выбирать эти данные и обновлять его до второго Таблица (Это должны синхронизировать. Joomla и VirtueMart пользовательских данных). Надеюсь, ваши глаза не будут кровоточить, когда вы увидите мой код, но, как я уже сказал, я только учусь, любая критика и советы приветствуются.
<?php
defined('JPATH_BASE') or die;
class plgUserUserDataSync extends JPlugin
{
public function __construct(&$subject, $params )
{
parent::__construct( $subject, $params );
}
protected function _getUser($user, $options = array())
{
$instance = JUser::getInstance();
if ($id = intval(JUserHelper::getUserId($user['username']))) {
$instance->load($id);
return $instance;
}
function onUserAfterSave($user){
$db = JFactory::getDbo();
$query = $db ->getQuery(true);
$data = array('c.name, c.street, c.postal_code, c.city');
$query->select($db->quoteName($data));
$query->from($db->quoteName('#__XXX_company as c, #__XXX_company_user_map as m'));
$query->where($db->quoteName('m.company_short = c.short and m.user_id=' . (int) $user->id));
$db->setQuery($query);
$results = $db->loadObjectList();
if ($db->getErrorNum()) {
$this->_subject->setError($db->getErrorMsg());
return false;
}
$query = $db ->getQuery(true);
$fields = array(
$db->quoteName('name'),
$db->quoteName('address_1'),
$db->quoteName('zip'),
$db->quoteName('city')
);
$values = $data;
$query->insert($db->quoteName('#__virtuemart_userinfos'))
->columns($db->quoteName($fields))
->values(implode(',', $values));
$db->setQuery($query);
$db->query();
}
}
}
После редактирования:
<?php
defined('JPATH_BASE') or die;
class plgUserUserDataSync extends JPlugin
{
public function __construct(&$subject, $params )
{
parent::__construct( $subject, $params );
}
protected function _getUser($user, $options = array())
{
$instance = JUser::getInstance();
if ($id = intval(JUserHelper::getUserId($user['username']))) {
$instance->load($id);
return $instance;
}
function onUserAfterSave($user){
$db = JFactory::getDbo();
$query = $db ->getQuery(true);
$data = array('c.name, c.street, c.postal_code, c.city');
$query->select($db->quoteName($data));
$query->from($db->quoteName('#__XXX_company as c, #__XXX_company_user_map as m'));
$query->where($db->quoteName('m.company_short = c.short and m.user_id=' . (int) $user->id));
$db->setQuery($query);
$results = $db->loadObjectList();
if ($db->getErrorNum()) {
$this->_subject->setError($db->getErrorMsg());
return false;
}
submitData();
}
function submitData(){
$db = JFactory::getDbo();
$query = $db ->getQuery(true);
$fields = array('name, address_1, zip, city');
$query->insert($db->quoteName('#__virtuemart_userinfos'))
->columns($db->quoteName($fields))
->values(implode(',', $results));
$db->setQuery($query);
$db->query();
}
}
Задача ещё не решена.
Других решений пока нет …