{"id":885,"date":"2025-08-22T12:45:59","date_gmt":"2025-08-22T10:45:59","guid":{"rendered":"https:\/\/www.mirai-innovation.eu\/blog\/?page_id=885"},"modified":"2025-08-26T15:45:59","modified_gmt":"2025-08-26T13:45:59","slug":"progetti","status":"publish","type":"page","link":"https:\/\/www.mirai-innovation.eu\/blog\/progetti\/","title":{"rendered":"progetti"},"content":{"rendered":"\n<section class=\"py-16 bg-neutral\">\n  <div class=\"container mx-auto px-4\">\n    <h2 class=\"text-3xl font-bold mb-12 text-center text-primary\">I nostri progetti<\/h2>\n\n    <div id=\"projects-grid\" class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8\">\n      <div class=\"col-span-full text-center opacity-70\" id=\"projects-loading\">Caricamento\u2026<\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<script>\n(async () => {\n  \/\/ === CONFIG ===\n  const parentSlug = 'progetti';     \/\/ <-- slug della pagina indice\n  const N = 30;                      \/\/ quante card (metti un numero alto per \u201ctutte\u201d)\n  const fallbackImg = '';            \/\/ es. '\/assets\/placeholder.jpg'\n  const API_BASE = '\/blog\/wp-json\/wp\/v2\/pages';\n\n  const stripHTML = (html='') =>\n    html.replace(\/<script[^>]*>[\\s\\S]*?<\\\/script>\/gi,'')\n        .replace(\/<\\\/?[^>]+(>|$)\/g,'')\n        .replace(\/\\s+\/g,' ')\n        .trim();\n\n  const buildCard = (p) => {\n    const title = p.title?.rendered || 'Senza titolo';\n    const rawExcerpt = p.excerpt?.rendered || p.content?.rendered || '';\n    const excerpt = stripHTML(rawExcerpt).slice(0, 180) + (rawExcerpt ? '\u2026' : '');\n    const link = p.link;\n\n    const media = p._embedded?.['wp:featuredmedia']?.[0];\n    const img = media?.source_url || fallbackImg || '';\n    const alt = media?.alt_text || stripHTML(title);\n\n    return `\n      <div class=\"project-card bg-white rounded-lg overflow-hidden shadow-md transition duration-300\">\n        ${img ? `<a href=\"${link}\" rel=\"noopener\">\n                  <img decoding=\"async\" src=\"${img}\" alt=\"${alt}\" class=\"w-full h-48 object-cover\" loading=\"lazy\">\n                <\/a>` : ''}\n        <div class=\"p-6\">\n          <h3 class=\"text-xl font-bold mb-2 text-primary\">\n            <a href=\"${link}\" rel=\"noopener\">${title}<\/a>\n          <\/h3>\n          ${excerpt ? `<p class=\"text-gray-700 mb-4\">${excerpt}<\/p>` : ''}\n          <a href=\"${link}\" class=\"text-accent font-medium hover:text-primary hover:underline\">maggiori info qui<\/a>\n        <\/div>\n      <\/div>`;\n  };\n\n  try {\n    \/\/ 1) prendo l\u2019ID della pagina padre dallo slug\n    const r = await fetch(`${API_BASE}?slug=${encodeURIComponent(parentSlug)}&_fields=id`);\n    const parent = (await r.json())?.[0];\n    if (!parent?.id) throw new Error('Pagina padre non trovata');\n\n    \/\/ 2) carico le pagine figlie ordinate per \u201cOrdine di menu\u201d\n    const fields = 'id,slug,link,title,excerpt,content,modified,date';\n    const url = `${API_BASE}?parent=${parent.id}&per_page=${N}&orderby=menu_order&order=asc&_fields=${fields}&_embed`;\n\n    const res = await fetch(url, { headers: { 'Accept':'application\/json' }});\n    if (!res.ok) throw new Error('HTTP '+res.status);\n    const pages = await res.json();\n\n    const html = (pages || []).map(buildCard).join('');\n    document.getElementById('projects-grid').innerHTML =\n      html || '<p class=\"col-span-full text-center\">Nessun progetto al momento.<\/p>';\n  } catch (e) {\n    console.error(e);\n    document.getElementById('projects-grid').innerHTML =\n      '<p class=\"col-span-full text-center\">Impossibile caricare i progetti.<\/p>';\n  } finally {\n    const ph = document.getElementById('projects-loading');\n    if (ph) ph.remove();\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>I nostri progetti Caricamento\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"iawp_total_views":30,"footnotes":""},"categories":[],"tags":[],"class_list":["post-885","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/pages\/885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/comments?post=885"}],"version-history":[{"count":1,"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/pages\/885\/revisions"}],"predecessor-version":[{"id":886,"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/pages\/885\/revisions\/886"}],"wp:attachment":[{"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/media?parent=885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/categories?post=885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mirai-innovation.eu\/blog\/wp-json\/wp\/v2\/tags?post=885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}