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:

1

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

En las categorías tenemos 14 categorías en visible:

2

 

En los productos tenemos 225 productos:

3

Y en las variantes tenemos 16 en visible:

4

 

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 librería Nice_r (https://github.com/uuf6429/nice_r) imprimimos los datos devueltos por la API en la primera página, con la función get_response_table_data().

<?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:

5

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:

6

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:

7