Получить зарегистрированное имя пользователя в разделе каталога (Opencart)

кто-нибудь знает, как войти в систему с именем администратора в разделе каталога? Я пробовал вводить сеанс, но не работал. Уже пытался получить userID, тоже не работает. Мне нужно добавить зарегистрированное имя пользователя в методе addOrderHistory. Я использую Opencart 2.3.0.2

Дополнительная информация: Opencart 2.3.0.2 вызывает метод addOrderHistory из контроллера API в каталоге, и проблема в том, что я не могу получить идентификатор пользователя-администратора в каталоге, потому что он разделяет сеанс/функцию.


person Cross Vander    schedule 04.12.2018    source источник


Ответы (2)


По умолчанию класс администратора User не создается во внешнем интерфейсе, поэтому здесь есть несколько вариантов.

Вариант 1. Получите user_id администратора непосредственно из сеанса. Это проще всего сделать, если вам нужно знать только user_id и/или если человек является зарегистрированным пользователем с правами администратора. user_id администратора хранится как переменная сеанса и глобально доступна как $this->session->data['user_id']. Конечно, он может не существовать, поэтому вам нужно будет проверить.

if (isset($this->session->data['user_id'])) {
    $user_id = $this->session->data['user_id'];
}

Вариант 2. На самом деле вы просили получить имя пользователя. Для этого вам нужно создать экземпляр класса User и передать объект $registry в качестве аргумента конструктору. Если вы используете PHP 5.4 или выше, вы можете сделать это и вызвать его методы напрямую, заключив вновь созданный объект в круглые скобки, как показано здесь:

$username = (new Cart\User($this->registry))->getUsername();

В более ранних версиях PHP вы можете создать экземпляр класса традиционным способом и вызвать его методы:

$this->user = new Cart\User($this->registry);
$username   = $this->user->getUsername();
$user_id    = $this->user->getId();
$user_group = $this->user->getGroupId();

Вы можете сделать это «на лету» в любом месте контроллера или модели, но если вы считаете, что вам потребуется частый доступ к методам User во внешнем интерфейсе, лучшее место — в catalog/controller/startup/startup.php и зарегистрируйте его в классе registry, что сделает его глобальным. доступный:

$this->registry->set('user', new Cart\User($this->registry));

Затем вы можете вызвать его в любое время и в любом месте в интерфейсе магазина, например:

$this->user->getUsername();

Одно очень важное предостережение здесь относится к вашему желанию получить эти данные с помощью метода addOrderHistory(), как указано в вашем вопросе. Вы должны иметь в виду, что этот метод может вызываться как часть обратного вызова рядом способов оплаты, таких как, например, Paypal Standard. В этом случае метод не вызывается сеансом браузера клиента, и поэтому, даже если извлекается администратор, он не сможет получить доступ к сеансу администратора. . Если вам абсолютно необходимо получить данные об администраторе, который выполняет проверку, вам нужно сделать это в методе addOrder(), так как он всегда вызывается непосредственно из сеанса браузера.

ОБНОВЛЕНИЕ — для получения имени администратора через api: если вы получаете доступ к интерфейсным контроллерам через API, Opencart создает новый сеанс, используя catalog/controller/api/ логин.php. Поскольку этот сеанс API ничего не знает о вашем сеансе администратора по умолчанию, вам нужно добавить туда свой user_id, чтобы описанные выше методы работали. Посмотрите на этот файл, и вы увидите строку, которая выглядит следующим образом (которая запускает сеанс API):

$this->session->start('api', $session_id_new);

Вам нужно будет изменить вещи, чтобы захватить ваш идентификатор пользователя. Что-то вроде этого:

// store user_id from admin session
$user_id = $this->session->data['user_id'];
// start the api session
this->session->start('api', $session_id_new);
// add admin user_id to your api session
$this->session->data['user_id'] = $user_id;

Теперь ваш администратор user_id является частью сеанса API, поэтому вы можете приступить к созданию экземпляра класса пользователя, как описано выше.

person billynoah    schedule 05.12.2018
comment
Я думаю, что это вводит в заблуждение... Я все еще получаю доступ к addOrderHistory из admin/controller/sales/order на этой странице, это вызывает метод из catalog/controller/api/order.php. ничего не изменилось, сэр ... Я все еще в потоке OC2 ... Извините, я не принимаю ответ, потому что я думаю, что когда проблема еще не решена, мне нужно изменить ее на непринятый ответ. - person Cross Vander; 22.12.2018
comment
@CrossVander - теперь я понимаю вашу проблему и обновил свой вопрос, добавив дополнительные сведения для решения проблемы. Не могли бы вы также обновить свой вопрос, чтобы было ясно, что вам нужно, чтобы это работало через API? Это важная деталь, которая не была упомянута, и она может помочь другим пользователям, когда они прочитают вопросы и ответы. ваше здоровье. - person billynoah; 22.12.2018
comment
Извините за мой плохой язык. Что я имею в виду под «через API», так это файл API... как я уже упоминал выше.. catalog/controller/api/order.php Я назвал его API... (раньше я должен был назвать его контроллером... это плохо). Я попробую ваш код еще раз... спасибо, что продолжаете отвечать мне - person Cross Vander; 23.12.2018
comment
Забыл спросить. Я все еще оставляю код из метода 2 или просто удаляю его и внедряю свое обновление @billynoah? - person Cross Vander; 23.12.2018
comment
неважно... Все еще нужны коды метода 2... Большое спасибо! Извините за неправильное понимание .. спасибо за ваше супер-пупер-гипер терпение .. :) - person Cross Vander; 23.12.2018

админка и каталог отдельно. если вы хотите получить идентификатор пользователя admin в каталоге (интерфейс), в файле вашего контроллера используйте:

$this->user = new Cart\User($this->registry);
$user_id = $this->user->getId(); // Returns null  or user ID

Дополнительная информация: https://forum.opencart.com/viewtopic.php?f=202&t=207563

person DigitCart    schedule 04.12.2018
comment
не работает... даже по вашим ссылкам проблема до сих пор не решена из оп.. - person Cross Vander; 21.12.2018