/** * Genera la salida JSON con soporte para parámetros. */ function custom_export_json() { // Establecer encabezados para JSON. drupal_add_http_header('Content-Type', 'application/json'); // Obtener parámetros de la URL. $limit = isset($_GET['limit']) && is_numeric($_GET['limit']) ? intval($_GET['limit']) : 10; // Límite por defecto: 10 $type = isset($_GET['type']) ? $_GET['type'] : null; // Tipo de contenido opcional // Crear la consulta básica. $query = db_select('node', 'n') ->fields('n', ['nid', 'title', 'type', 'created', 'changed']) ->condition('status', 1) // Solo nodos publicados. ->orderBy('created', 'DESC') ->range(0, $limit); // Limitar la cantidad de resultados. // Agregar filtro por tipo de contenido, si está especificado. if ($type) { $query->condition('type', $type); } // Ejecutar la consulta y obtener los NIDs. $nids = $query->execute()->fetchCol(); $nodes = []; foreach ($nids as $nid) { $node = node_load($nid); // Obtener datos básicos del nodo. $node_data = [ 'nid' => $node->nid, 'title' => $node->title, 'type' => $node->type, 'created' => $node->created, 'changed' => $node->changed, 'body' => isset($node->body['und'][0]['value']) ? $node->body['und'][0]['value'] : '', ]; // Obtener imágenes asociadas (campo 'field_image' como ejemplo). if (!empty($node->field_image['und'])) { $node_data['images'] = []; foreach ($node->field_image['und'] as $image) { $node_data['images'][] = file_create_url($image['uri']); } } // Obtener términos de taxonomía (campo 'field_tags' como ejemplo). if (!empty($node->field_tags['und'])) { $node_data['taxonomy'] = []; foreach ($node->field_tags['und'] as $term) { $term_data = taxonomy_term_load($term['tid']); $node_data['taxonomy'][] = [ 'tid' => $term_data->tid, 'name' => $term_data->name, ]; } } $nodes[] = $node_data; } return drupal_json_output($nodes); }