Получить зарегистрированное имя пользователя в разделе каталога (Opencart) - PullRequest
0 голосов
/ 04 декабря 2018

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

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

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

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

Опция 1 : получить идентификатор пользователя admin прямо изсессия.Это проще всего сделать, если вам нужно знать только 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(), поскольку он всегда вызывается непосредственно из сеанса браузера.

UPDATE - для полученияимя пользователя администратора через api : Если вы обращаетесь к интерфейсным контроллерам через API, Opencart создает новый сеанс, используя catalog / controller / api / login.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, поэтому вы можете приступить к созданию экземпляра пользовательского класса, как описано выше.

0 голосов
/ 04 декабря 2018

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

$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

...