在 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
...
我看到了类似的主题,但没有帮助:(
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
...