(Opencart) Как перезагрузить представление другого контроллера, который использует ajax для визуализации ответа на это представление? - PullRequest
0 голосов
/ 05 мая 2019

Основной контроллер Product / Category использует setOutput для рендеринга результата представления (в котором отсутствует $ .ajax) в какое-то представление (которое, по-видимому, содержит $ .ajax внутри). Мне нужно иметь возможность обновить список продуктов с пользовательского контроллера. Как я могу это сделать?

Я попытался добавить функцию внутри контроллера Product / Category и настроить с ним связь ajax, но это не сработало (я думаю, что это может быть способом, я просто не знаю, что здесь делать). Я могу получить ответ только от этой функции ocmod на ветку пользовательского модуля, откуда происходит мой запрос $ .ajax, но Мне нужно иметь возможность изменить представление контроллера Product / Catalog (список продуктов) .

Пользовательская функция (внутри основного контроллера продукта / каталога) выглядит следующим образом:

public function start_refresh() {

        if ($this->request->post['refresh_needed']) {

            $data = array();
            $data['test_data'] = $this->request->post['test_data'];
            $this->response->setOutput(
                $this->load->view('product/category_session', $data)
            );

        };

    }     

EDIT : в приведенной выше пользовательской функции, которая находится внутри основного продукта / категории, я попытался создать загрузку контроллера продукта / категории, как показано ниже, но я получаю ошибку 404 , хотя в консоли файл category.php имеет право на html-рендеринг с надписью "В этой категории товаров нет".

$data = array();         
$this->load->controller('product/category', $data);
$this->response->setOutput(
     $this->load->view('product/category', $data)
);            
return $this->response->getOutput();

1 Ответ

0 голосов
/ 06 мая 2019

Мне удалось сделать это следующим образом после прочтения ответа от Как получить продукты в формате JSON из OpenCart с помощью phonegap / jQueryMobile .

Из ajax я вызвал продукты / категорию напрямую, а не свою пользовательскую функцию внутри контроллера продукта / категории, как в вопросе, и когда я получил ответ, содержащий вывод html представления, я перезагрузилDiv я сделал в product / category.twig с этим HTML, используя jQuery.Ajax был

    $(document).ready(function(){
    $.ajax({
        url: 'index.php?route=product/category&path=18&json',
        type: 'get',
        beforeSend: function() {
        },
        complete: function() {
        },
        success: function(data) {
            console.log('success');     
            if (data.length > 0) {
                console.log(data); 
                $('#mydiv').html(data);
            }
        }
    });
    });

, а код, который я добавил в product / category.php, был

    if(isset($this->request->get['json'])) {
        $this->response->setOutput($this->load->view('product/view_for_mydiv', $data));
    } else {
        $this->response->setOutput($this->load->view('product/category', $data));           
    }  

Как вы можете заметить, я добавил div внутри product / category.twig под названием mydiv,который я поместил именно там, где я хотел, чтобы html шел, а затем я создал ветку с именем view_for_mydiv.twig в папке default / product / category /, html которой контроллер продукта / категории отправит обратно вместо своей общей ветки, когда увиделчто был сделан вызов AJAX.Div #mydiv, расположенный внутри category.twig, оборачивает html, который является тем же html, который создается, когда view_for_mydiv.twig используется для визуализации продукта / категории.

...