在PrestaShop 1.6中覆盖AdminOrdersController上使用Ajax请求

时间:2015-10-10 16:02:43

标签: ajax override prestashop prestashop-1.6

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

PS:1.6.1.1

概述: 是否有任何“魔术”代码覆盖AdminOrdersController必须包含以获取ajax请求(jQuery)?

详细说明: 我在Orders List页面上调用了Ajax请求。当这个请求被 oryginal AdminOrdersController中的函数“收集”时,它运行正常!

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

为什么???

我想我应该添加一些“给”Ajax的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的功能。它仅在它被添加到oryginal文件时才起作用。如果它在覆盖文件夹中则失败。

  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;
             }

}     

2 个答案:

答案 0 :(得分:2)

您的问题在这里,与AJAX无关

public function renderList()
{

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

答案 1 :(得分:0)

您是否尝试过检查网络监视器(ctrl + shift + q)?你能发布你的ajax帖子的状态结果吗?但很明显。只需更改ajax post URL以覆盖不是原始控制器的路径。

例如:

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

此后再次检查POSt状态。