Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 17 Ответов
  • 2205 Просмотров
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
Допиливаю компонент com_user по свои нужды и столкнулся с проблемой. После отправки запроса AJAXом, в классе JUser не изменяются значения, когда в БД всё прекрасно изменяется. Даже после перезагрузки страницы ничего не изменяется. В чём проблема понять не могу. Что делать то?
« Последнее редактирование: 29.08.2013, 12:06:27 от b2z »
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
Данные в JUser изменяются только если авторизоваться заново.
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
Если что, то AJAX через jQuery. МОжет ему не нравится jQuery? :D
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
bupy7 описывайте задачи подробнее, что имеем, что нужно. Будет больше шансов получить ответ
Код: php-brief
$user = JFactory::getUser(5); //получили юзера с ид 5
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Данные в JUser изменяются только если авторизоваться заново.
так вылогинтесь и залогинтесь в скрипте )
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
так вылогинтесь и залогинтесь в скрипте )
Да как-то не дело это. Вот например почему-то если я загружаю аватар через SWFUpload, то после вызова метода в модели, который заносит в БД адрес к аватару, всё в JUser прекрасно отображается.
bupy7 описывайте задачи подробнее, что имеем, что нужно.
Хорошо, я сейчас логов наделаю.
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
Задача: добавить функцию добавления и удаления аватара в профиль.

Для добавления аватара использовал SWFUpload, который для изменения данный в БД вызывает метод в models/profile.php компонента
Код
    public function setAvatar($src) {
        $user = JFactory::getUser();
        $db = &JFactory::getDBO();
       
        $query = "UPDATE `#__users` SET `avatar` = '{$src}' WHERE `username` = '{$user->username}'";
        $db->setQuery($query);
       
        return $db->query();
    }

После по надобности аватар вытаскивается из этой же модели models/profile.php через
Код
    public function getAvatar() {
        $user = JFactory::getUser();
             
        if ($user->avatar == 'none') {
            return JURI::root(). 'images/default/avatar_default.jpeg';
        }
       
        return JURI::root(). $user->avatar;
    }

Если мы просто загружаем аватар, то данные текущего пользователя после вызова
Код
$user = JFactory::getUser();
изменяются, а именно поле avatar, которое я добавил в таблицу #__users.

Так же нужно кроме добавления аватара реализовать функцию удаления аватара. Было решено сделать через AJAX, который вызывает метод удаления в controllers/profile.php

Код
    public function delete() {   
        $user = JFactory::getUser();
        if ($user->guest) {
            $this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false));
            return;
        }
        if ($user->avatar == 'none') {
            return false;
        }
        $model = $this->getModel('Profile');       
        if (!$model->deleteAvatar()) {
            JError::raiseError(500, JText::_('COM_USERS_ERROR_DELETE_AVATAR'));
            return false;
        }
    }

и который вызывает метод из models/profile.php
Код
    public function deleteAvatar() {
        $user = JFactory::getUser();
        $db = &JFactory::getDBO();
       
        $query = "UPDATE `#__users` SET `avatar` = 'none' WHERE `username` = '{$user->username}'";
        $db->setQuery($query);
         
        return $db->query();
    }

А сам код AJAXа вот
Код
        $deleteAvatarAjax = '
            jQuery(window).load(function(){
                 jQuery("#profile-delete-avatar").click(function(){
             jQuery.ajax({
                type: "POST",
                url: "index.php?option=com_users&task=profile.delete",
                success: function(){
                    alert("Аватар успешно удалён");
                },
                error: function() {
                    alert("Операция завершилась с ошибкой. Попробуйте повторить позднее");
                }
             });
                 });
            });
        ';
       
        $document->addScriptDeclaration($deleteAvatarAjax);

После вызова AJAX значение в поле avatar таблицы #__users изменяется, но при получении данный текущего пользователя через JFactory::gerUser() - нет. И самое интересное, после залогивания если добавлять аватар, то в JUser данные изменяются, т.е. свойство avatar, но стоит вызвать метод удаления AJAXом, как после этого ничего не работает через полчения данный черезе JUser, но в самой БД всё прекрасно изменяется.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
1. зачем вы хакали ядро?
2. почему не вписали аватар в #__user_profiles и уже оттуда дергали ваш аватар? притом все это можно сделать через плагин!
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
1. зачем вы хакали ядро?
2. почему не вписали аватар в #__user_profiles и уже оттуда дергали ваш аватар? притом все это можно сделать через плагин!

1. Я ещё только начинаю вникать в Joomla и просто ставлю себе какие-то задания для выполнения. То что это можно было через плагин я в курсе =) Просто у меня такая цель познакомится с кишками. Потом переделаю в плагин
2. Т.е. если я запихаю в #__user_profile то проблема должно уйти? Что-то я не верю в это.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
1. Я ещё только начинаю вникать в Joomla и просто ставлю себе какие-то задания для выполнения. То что это можно было через плагин я в курсе =) Просто у меня такая цель познакомится с кишками. Потом переделаю в плагин
2. Т.е. если я запихаю в #__user_profile то проблема должно уйти? Что-то я не верю в это.
1. вы не туда вникаете куда нужно! вы понимаете что сделали хак ядра? и вам теперь нельзя обновляться CMS иначе все что вы сделали вместе с обновлениями затрется!
2. ну там где у вас getAvatar просто нужно сделать запрос в базу и получить значение из поля
JFactory::getUser() берется из сессии, а так как сессия записывается при авторизации то без перелогивания вы ничего не получите..
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
JFactory::getUser() берется из сессии, а так как сессия записывается при авторизации то без перелогивания вы ничего не получите..
Не совсем так - есть интересно решение:
Код: php
$user = JFactory::getUser();
$session = JFactory::getSession();
$session->set('user', new JUser($user->id));

//new data for your user after the update
$user = JFactory::getUser();

http://stackoverflow.com/questions/15028816/joomla-getuser-does-not-show-the-updated-user-data
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Не совсем так - есть интересно решение:
Код: php
$user = JFactory::getUser();
$session = JFactory::getSession();
$session->set('user', new JUser($user->id));
Ну я не говорил что нельзя перезаписать сессию ) но изначально у человека уже хакнуто ядро, и сделано так как не надо сделать! По этому не очень корректно советовать как сделать правильно там где все сделано неправильно )
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
1. вы не туда вникаете куда нужно! вы понимаете что сделали хак ядра? и вам теперь нельзя обновляться CMS иначе все что вы сделали вместе с обновлениями затрется!
Я в курсе всего, что произойдёт, что можно делать, а что нельзя.

Ну я не говорил что нельзя перезаписать сессию ) но изначально у человека уже хакнуто ядро, и сделано так как не надо сделать! По этому не очень корректно советовать как сделать правильно там где все сделано неправильно )
Лучше бы ты промолчал, потому что я до этого думал, что ты в чём-то шаришь, а оказалось, что просто даёшь какие-то левые советы.

b2z, то что нужно! Я раз только начал работать с Joomla ещё не в курсе всего. Вот только что-то протупил с поиском на англицком языке =) Спасибо огромное!
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Я в курсе всего, что произойдёт, что можно делать, а что нельзя.
Лучше бы ты промолчал, потому что я до этого думал, что ты в чём-то шаришь, а оказалось, что просто даёшь какие-то левые советы.
Во первых мы на ты не переходили! во вторых я советую как правильно делать! а потом многие удивляются почему на Joomla, ругаются... потому что потом приходится дорабатывать за такими "разработчиками" как вы которые, играют в вангу и пытаются по интернету определить кто шарит, а кто нет... и да я в отличии от вас шарю что вы написали редкостный быдлокод...
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
@bupy7 - отпишитесь, получилось или нет?

Ко всем - завязываем переходит на личности. Благодарю.
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
Во первых мы на ты не переходили! во вторых я советую как правильно делать! а потом многие удивляются почему на Joomla, ругаются... потому что потом приходится дорабатывать за такими "разработчиками" как вы которые, играют в вангу и пытаются по интернету определить кто шарит, а кто нет... и да я в отличии от вас шарю что вы написали редкостный быдлокод...
Воу-воу, палехче, паринь!
Я думаю, что ты тоже когда родился не сразу побежал и кушать стал самостоятельно.
Во-первых, без ошибок и без быдлокода никто ничему не научится. Включая меня.
Во-вторых, я чётко выразил свою позицию по данному поводу, а именно в Hook ядра com_users. Сейчас, на данном этапе, я хочу разобраться как устроено всё изнутри. Как это работает и как добиться "гармонии". К тому же это очень развивает, т.к. ты читаешь чужой код и вникаешь в него.
В-третьих, я завершил работу над добавлением функции добавления аватара в com_users. Хорошо почитал чужой код. Понял, ка кон работает изнутри. Что взаимодействует с чем. И теперь мне будет легче написать свой с 0, делаю при этом меньше ошибок.
В-четвёртых, то что ты сказал, что нужно было плагин писать - это верно и ни кто не спорит. Но глупо писать, что если сейчас человек делает не верно, то пускай у него будет всё по "феншую", что уж теперь. Раз одну плитку в ванной косо приклеили, то можно теперь и остальные.
В-пятых, мне всё равно на твой уровень вледения Joomla, если тебе сказать нечего или ты решил понтанутся перед форумчанами, что тут ламер какой-то хакнул компонент и давайте его закидаем помидорами - то у меня даже слов нет, как это тупо и по-детски.

P.S. Карму портить из-за того, что ты понтанулся - вообще тупо.
« Последнее редактирование: 29.08.2013, 12:02:49 от bupy7 »
*

bupy7

  • Осваиваюсь на форуме
  • 30
  • 0 / 2
b2z, конечно да! :)
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Вот только что-то протупил с поиском на англицком языке =) Спасибо огромное!
Бывает ;) Я по такому запросу искал (но я точно знал что есть ответ на stackoverflow, просто не сохранил в закладках):
https://www.google.ru/search?q=update+user+session+joomla

Решено - закрыто!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как и чем можно обращаться с запросами из Joomla к GraphQL?

Автор bmf1982

Ответов: 0
Просмотров: 617
Последний ответ 03.10.2019, 15:46:00
от bmf1982
Проблема с модулем после переноса с локалки на хостинг

Автор master-smeta

Ответов: 8
Просмотров: 2240
Последний ответ 15.11.2018, 16:34:46
от master-smeta
Обработка Get запроса главной страницей

Автор Maklay

Ответов: 7
Просмотров: 3320
Последний ответ 25.05.2018, 11:16:51
от ShaMAD
Joomla как система авторизации

Автор kav

Ответов: 23
Просмотров: 2295
Последний ответ 29.04.2018, 11:10:30
от Aleks.Denezh
Нужна помощь в доработке модуля под Joomla 3

Автор kik84

Ответов: 5
Просмотров: 2278
Последний ответ 30.01.2018, 22:40:30
от Елeна