En este artículo, veremos cómo se organizan las solicitudes de ajax en OpenCart , incluidas las solicitudes a través de la API de OpenCart , nos familiarizaremos con el nuevo concepto de controlador frontal y tocaremos un poco el tema de la API de REST de ajax .
Cliente
El lado del cliente de OpenCart funciona con jquery , lo que significa que se puede usar $.ajax
desde esta biblioteca. Enlace a la documentación . Se pueden encontrar ejemplos de solicitudes ajax en el lado del cliente en admin/view/template/sale/order_form.tpl
(.twig para OpenCart 3.0).
Servidor
Si observa el mismo archivo admin/view/template/sale/order_form.tpl
(para OpenCart 2.3), puede comprender que se utiliza el esquema de enrutamiento clásico de OpenCart como dirección de llamada . Veamos una de las solicitudes:
$.ajax({
url: 'index.php?route=customer/customer/autocomplete&token=<?php echo $token; ?>&filter_name=' + encodeURIComponent(request),
...
Es simple: url es la ruta al controlador y, si es necesario, el nombre del método de este controlador .
Es decir, necesitamos crear una clase de controlador , luego desde los archivos de vista podemos llamar a métodos de este controlador con solicitudes ajax .
admin/controller/extension/module/myajax.php:
class ControllerExtensionModuleMyAjax extends Controller
{
public function index()
{
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode(
[
"success" => true,
"message" => "ok",
"data" => []
]
));
}
}
response
, Response
, system/library/response.php
. . 2 :
addHeader($header)
- http ,header
setOutput($output)
- ,output
-
$this->response
OpenCart 2 / (admin, catalog), :
admin
-get
( ):
OpenCart 2.3
token
,$this->session->data['token']
OpenCart 3.0 ¨C4C, ¨C14C¨C5C
catalog
- ,
ajax ( html) js ( OpenCart 2.3):
$.ajax({
url: '<?php echo $admin; ?>index.php?route=extesion/module/myajax&token=<?php echo $token; ?>',
type: 'get',
dataType: 'json',
success: function(json) {
alert("success: "+json["success"]+"\n"+"message: "+json["message"]);
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
url admin
(admin catalog). 2 , admin/config
:
HTTP_SERVER
HTTP<b style="box-sizing: border-box;">S</b>_SERVER
-admin
( - ),
HTTP_CATALOG
¨C6C¨C15C- , ¨C16C¨C7C
Ajax API
admin/view/template/sale/order_form.tpl
(OpenCart 2.3), ajax catalog
, .
token
, ajax /index.php?route=api/login
, json , token
:
var token = '';
// Login to the API
$.ajax({
url: '<?php echo $catalog; ?>index.php?route=api/login',
type: 'post',
data: 'key=<?php echo $api_key; ?>',
dataType: 'json',
crossDomain: true,
success: function(json) {
//...
if (json['token']) {
token = json['token'];
}
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
catalog/controller/api/login.php ControllerApiLogin::index
. :
(
catalog/model/account/api.php - ModelAccountApi::addApiSession
)
(
token
system/helper/general.php
),
json ajax , api (api_key
) (--API).
admin/view/template/sale/order_form.tpl
, ajax , route=api/...
token
, ( api , )¨C25C :
if (!isset($this->session->data['api_id'])) {
$json['error']['warning'] = $this->language->get('error_permission');
} else {
...
}
Ajax
catalog
token
, , ajax .
index.php
system/startup.php
, system/framework.php
:
// Front Controller
$controller = new Front($registry);
// Pre Actions
if ($config->has('action_pre_action')) {
foreach ($config->get('action_pre_action') as $value) {
$controller->addPreAction(new Action($value));
}
}
front controller, system/engine/front.php
Front
.
:)
, front controller / , startup/router
controller
(admin/controller
catalog/controller
), , $_['action_pre_action'];
system/config/catalog.php
.
front controller, , dispatch
( action $config->get('action_router')
):
// Dispatch
$controller->dispatch(new Action($config->get('action_router')), new Action($config->get('action_error')));
startup/session
catalog/controller
, ControllerStartupSession::index
api . :
api/
get
token
api
api ip
id
$_COOKIE["api"]
, ( , )
, ,
$this->session->data['api_id']
, ip .
Ajax REST API
REST API OpenCart.
ajax OpenCart admin
catalog
.
admin
, admin
. , . ( ) catalog
( ), . catalog
( ).
REST API OpenCart :
$this->response
,addHeader
setOutput
catalog
¨C22C
api ¨C24C¨C10C¨C25C , ¨C26C¨C11C¨C27C, ajax
catalog/controller/api/
, ajax , ajax api/login
. ajax , , , admin/view/template/sale/order_form.tpl.
REST API , , :