Создание пользовательской функции в отдельном php-файле, доступном из контроллера - PullRequest
0 голосов
/ 27 октября 2018

Я хочу написать функцию для catalog-> controller-> checkout-> cart.php в Opencart 2.3.0.2 Я уже написал логику для проверки priduct_id и действий, которые необходимо предпринять, если найден конкретный идентификатор продукта. Теперь я хочу взять эту логику в отдельной функции в отдельном файле php, чтобы она стала более управляемой.

Я создал функцию в php-файле в system-> helper и загрузил ее из startup.php. Затем я могу вызвать эту функцию из cart.php, но ссылка на переменную $ this будет потеряна, даже если я передам $ this этой функции.

Мой урезанный код выглядит так cart.php

//some code before this
  if (!$json) {
                // Check if Product is Addon
                 test($this);
        //more code after this

customfunction.php

    function test($this) {  
    // print_r("Test Called");
    $temp = $this->request->post['product_id'];
    if ($this->request->post['product_id'] == 142) {
                    $json['success']   = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']), $product_info['name'], $this->url->link('checkout/cart'));
                    $product_options   = $this->model_catalog_product->getProductOptions($this->request->post['product_id']);
                    $product_option_id = $product_option['product_option_id'];
//more code

Я получаю ошибку для

$this->request->post['product_id'];

Может кто-нибудь сказать мне, как вызывать пользовательскую функцию из отдельного php-файла, сохраняя ссылку на эту переменную.

1 Ответ

0 голосов
/ 27 октября 2018

$this зарезервированное слово в php:

Псевдопеременная $ this доступна при вызове метода из в контексте объекта.

Попробуйте вместо этого:

function test($ctrl) { 
    $temp = $ctrl->request->post['product_id'];
    if ($ctrl->request->post['product_id'] == 142) {
    ...
...