Ejemplo 4 - Paginación
Introducción y estructura de datos
Desde la versión 1.18 de la API se pueden exportar los datos a través de un sistema paginación. De esta forma, los productos se enviarán en bloques por cantidad predefinida (página) y no todos a la vez como hasta ahora.
Esta herramienta es excelente para empresas con varios productos porque a la hora de exportar los datos de Sales Layer no se sobrecarga el servidor.
Para este ejemplo usaremos una vez más el conector creado en el Ejemplo 1 con la misma configuración de tablas (ver la configuración de tablas en el Ejemplo 1), los mismos filtros y parámetros:

Para este caso pondremos todos nuestros ítems en visible en la cuenta PIM.
En las

En los

Y en las

Código
Para exportar los datos por la API empezamos por crear una clase SalesLayer_Conn()con las credenciales del conector y parámetros. Estas credenciales están presentes en el conector de Sales Layer, y las hemos guardado en los parámetros de $connector_id y $secret_key (ver Ejemplo 1).
Por defecto, al hacer una llamada a la API, la versión definida será la versión 1.17. Como la paginación se encuentra en la versión 1.18 tenemos que definirla en el código a través de la función set_API_version(‘1.18’).
Posteriormente, definimos el número de datos que queremos exportar por página. Como en este ejemplo el volumen de datos no es muy grande optamos por elegir exportarse 50 productos por página a través de la llamada set_pagination(50).
Como queremos exportar todos los datos que tenemos en nuestro PIM hacemos la llamada a la función get_info() con el parámetro de last_update a 0.
Después de verificar que la API no ha devuelto errores, a través de la función has_response_error(), imprimimos con las funciones del SDK la siguiente información relevante:
- versión de la API a través de la función get_response_api_version()
- fecha en UNIX de la hora exacta de la llamada a la API con la función get_response_time()
- idioma por defecto del PIM llamando la función get_response_default_language()
Posteriormente y con la ayuda de la
<?php
define('LOC_BASE', dirname(__FILE__) . '/');
require(LOC_BASE.'SalesLayer-Conn.php');
require(LOC_BASE.'lib/nice_r-master/Nicer.php');
?>
<!DOCTYPE html>
<html dir="ltr" lang="en-US">
<head>
<link rel="stylesheet" type="text/css" href="lib/nice_r-master/nice_r.css?version=<?php echo filemtime(LOC_BASE.'lib/nice_r-master/nice_r.css'); ?>"/>
<script type="text/javascript" src="lib/nice_r-master/nice_r.js?version=<?php echo filemtime(LOC_BASE.'lib/nice_r-master/nice_r.js'); ?>"></script>
</head>
<body>
<?php
//SL connector credencials
$connector_id = 'CN12347H3308C4486';
$secret_key = '7aeb575d9bf15bfa238e8f01842417a2';
$last_update= "0";
//Create object with the credentials on the connector in SL
$SLConn = new SalesLayer_Conn ($connector_id, $secret_key);
//Define the version of the API to point
$SLConn->set_API_version('1.18');
//Define the number of the pagination
$SLConn->set_pagination(50);
//API call
$SLConn->get_info($last_update);
if ($SLConn->has_response_error()) {
echo "<h4>Error:</h4>\n\n Code: ".$SLConn->get_response_error().
"<br>\nMessage: ". $SLConn->get_response_error_message();
} else {
echo "<h4>Response OK</h4>\n".
"<p>".
"API version: <b>". $SLConn->get_response_api_version() ."</b><br />\n".
"Time: <b>". $SLConn->get_response_time('unix') ."</b><br/>\n".
"Default language: <b>". $SLConn->get_response_default_language() ."</b><br/><br />\n".
"</p>";
//Print API response
$n = new Nicer($SLConn->get_response_table_data());
$n->render();
echo "<hr/>";
}
?>
</body>
</html>
Ejecución y resultados
Ejecutando el código pasado obtenemos el siguiente resultado:

La API ha devuelto 14 categorías y 36 productos lo que reúne los 50 productos de la primera página.
Para exportar la página siguiente, la API tiene un parámetro público llamado response_next_page que contiene la URL de la siguiente página.
Si añadimos al código la impresión de este parámetro:echo $SLConn->response_next_page; haciendo la llamada del script veremos la URL:

Sin embargo, el SDK contiene funciones para verificar e imprimir las siguientes páginas:
- have_next_page(), verifica si existe una página más para imprimir.
- get_next_page_info(), exporta la información de la próxima página y la guarda localmente.
Por lo tanto, se podría añadir al código un pequeño script que imprima automáticamente las siguientes páginas.
do {
$SLConn->get_next_page_info();
$n = new Nicer($SLConn->get_response_table_data());
$n->render();
echo "<hr/>";
} while ($SLupdate->have_next_page());
En este script estamos imprimiendo las páginas con la función get_response_table_data(), guardadas localmente con la función get_next_page_info(), mientras existe una siguiente página con la verificación de la función have_next_page().
Ejecutando el código de nuevo se obtendría un listado de las tablas por cada tabla imprimida:
