在 PrestaShop 1.6 中对 Override AdminOrdersController 使用 Ajax 请求

Using Ajax request on Override AdminOrdersController in PrestaShop 1.6

我看到了类似的主题,但没有帮助:(

PS: 1.6.1.1

概览: 是否有任何 "magic" 代码覆盖 AdminOrdersController 必须包含以获取 ajax 请求 (jQuery)?

详情: 我在订单列表页面上调用了 Ajax 请求。当此请求是 "reciced" 位于 oryginal AdminOrdersController 中的函数时,它运行良好!

但是当我将函数 从 Ajax 获取调用移动到 /override/controllers/admin/ 中的分隔文件时,它失败了。 -> 请求无应答。

为什么???

我想我应该为 Ajax 添加 "gives" URL 的内容,但我不知道是什么...

提前致谢!

这是带有 Ajax 请求的 JS。即使没有 URL 参数它也能工作,因为它调用了 currant 页面。

$(function() {   $('.notice_show').on('click', function() {
   var $scope = $(this);
   var $tr = $scope.closest('tr');
   var $length = $tr.find('td').length;
   var $ajax_run = null;
   var $element = null;
   var $notice_show_content = null;

   if (!$scope.data('show')) {
       $scope.data('show', true);
       $tr.after('<tr class="not_show"><td colspan="'+$length+'"><span class="not_show_ajax_running"><i class="icon-refresh icon-spin icon-fw"></i></span><span class="notice_show_content"></span></td></tr>');
       $element = $tr.next('.not_show');
       $notice_show_content = $element.find('.notice_show_content');
       $ajax_run = $element.find('.not_show_ajax_running');
       $ajax_run.show();
       $.ajax({   
           data: {
               get_notice: true,
               id_order: $scope.attr('attr-id')
           },
           dataType: 'json',
           type: 'POST',
           success: function($response) {
               if ($response.error) {
                   $.notify($response.error, 'error', 2000);
               } else {
                   $notice_show_content.html($response.content);
               }
           },
           complete: function() {
               $ajax_run.hide();
           }
       });
   } else {
       $scope.data('show', false);
       $tr.next('.not_show').remove();
   }

}); });

这是添加到 AdminOrdersController 的功能。仅当将其添加到原始文件中时它才有效。如果它在覆盖文件夹中,它将失败。

  public function renderList()
{

return parent::renderList();

   if (Tools::isSubmit('get_notice') && ($id_order = Tools::getValue('id_order', NULL))) {
                $result = array(
                    'error' => false,
                    'content' => ''
                );
                $order = new Order($id_order);
                if (Validate::isLoadedObject($order)) {
                    $notices = NoticeOrder::get($order->id);
                    if ($notices) {
                        foreach($notices as &$notice) {
                            $emp = new Employee($notice->id_employee);
                            if (Validate::isLoadedObject($emp)) {
                                $notice->employee = $emp->firstname . ' ' . $emp->lastname;
                            } else {
                                $notice->employee = '';
                            }
                        }
                        $this->context->smarty->assign(array(
                            'notice' => $notices,
                            'not_add' => true
                        ));

                        $result['content'] = $this->createTemplate('_notice.tpl')->fetch();

                        $address = new Address($order->id_address_delivery);

                        if (Validate::isLoadedObject($address)) {
                            if ($address->other) {
                                $this->context->smarty->assign(array(
                                    'addresses' => array(
                                        'delivery' => $address
                                    ),
                                ));
                                $result['content'] .= $this->createTemplate('_other.tpl')->fetch();
                            }
                        }

                    } else {
                        $result['error'] = $this->l('Notice not found');
                    }
                } else {
                    $result['error'] = $this->l('Order not found');
                }

                echo Tools::jsonEncode($result);
                die;
             }

}     

您是否尝试过检查网络监视器 (ctrl+shift+q)?你能 post 你的 ajax post 状态结果吗?但很清楚。只需更改 ajax post URL 即可覆盖不指向原始控制器的路径。

例如:

url:base_url+'/modules/ols/ajax.php',但添加文件的完整路径 (override/controllers/admin/AdminOrdersController.php ).

在此之后再次检查 POSt 状态。

你的问题在这里,与AJAX

无关
public function renderList()
{

return parent::renderList(); // !!! code below this line will not work
...