Prepare component
This commit is contained in:
1154
database/data/rbac/permissions.json
Normal file
1154
database/data/rbac/permissions.json
Normal file
File diff suppressed because it is too large
Load Diff
280
database/data/rbac/roles.json
Normal file
280
database/data/rbac/roles.json
Normal file
@ -0,0 +1,280 @@
|
||||
{
|
||||
"SuperAdmin" : {
|
||||
"permissions" : [
|
||||
"admin.website-admin.settings.general.view",
|
||||
"admin.website-admin.settings.social.view",
|
||||
"admin.website-admin.settings.indexing.view",
|
||||
"admin.website-admin.contact.info.view",
|
||||
"admin.website-admin.contact.form.view",
|
||||
"admin.website-admin.comunication.messenger.view",
|
||||
"admin.website-admin.comunication.whatsapp.view",
|
||||
"admin.website-admin.comunication.tawk-to.view",
|
||||
"admin.website-admin.comunication.twitter.view",
|
||||
"admin.website-admin.translate.google-translate.view",
|
||||
"admin.website-admin.translate.google-translate.update",
|
||||
"admin.website-admin.cms.menus.view",
|
||||
"admin.website-admin.cms.menus.update",
|
||||
"admin.website-admin.cms.seo.view",
|
||||
"admin.website-admin.cms.seo.update",
|
||||
"admin.website-admin.cms.contents.view",
|
||||
"admin.website-admin.cms.contents.create",
|
||||
"admin.website-admin.cms.contents.update",
|
||||
"admin.website-admin.cms.contents.delete",
|
||||
"admin.website-admin.cms.versions.view",
|
||||
"admin.website-admin.cms.versions.reopen",
|
||||
"admin.website-admin.cms.templates.view",
|
||||
"admin.website-admin.cms.templates.update",
|
||||
"admin.website-admin.website.cache.fullpage.view",
|
||||
"admin.website-admin.website.cache.fullpage.clean",
|
||||
"admin.website-admin.website.cache.signed-previews.view",
|
||||
"admin.website-admin.website.cache.signed-previews.clean",
|
||||
"admin.website-admin.content.faq.view",
|
||||
"admin.website-admin.content.faq.create",
|
||||
"admin.website-admin.content.faq.update",
|
||||
"admin.website-admin.content.faq.delete",
|
||||
"admin.website-admin.content.gallery.view",
|
||||
"admin.website-admin.content.gallery.create",
|
||||
"admin.website-admin.content.gallery.delete",
|
||||
"admin.website-admin.content.legal.view",
|
||||
"admin.website-admin.content.legal.update",
|
||||
"admin.website-admin.analytics.google-analytics.view",
|
||||
"admin.website-admin.analytics.google-tags.view",
|
||||
"admin.website-admin.analytics.google-search-console.view",
|
||||
"admin.website-admin.analytics.pixel-meta.view",
|
||||
"admin.website-admin.seo-tools.sitemap.view",
|
||||
"admin.website-admin.seo-tools.jsonld.view",
|
||||
"admin.website-admin.seo-tools.robots.view",
|
||||
"admin.website-admin.seo-tools.manifest.view",
|
||||
"admin.website-admin.seo-tools.canonical.view",
|
||||
"admin.website-admin.seo-tools.social-cards.view",
|
||||
"admin.website-admin.blog.categories.view",
|
||||
"admin.website-admin.blog.categories.create",
|
||||
"admin.website-admin.blog.categories.update",
|
||||
"admin.website-admin.blog.categories.delete",
|
||||
"admin.website-admin.blog.tags.view",
|
||||
"admin.website-admin.blog.tags.create",
|
||||
"admin.website-admin.blog.tags.update",
|
||||
"admin.website-admin.blog.tags.delete",
|
||||
"admin.website-admin.blog.articles.view",
|
||||
"admin.website-admin.blog.articles.create",
|
||||
"admin.website-admin.blog.articles.update",
|
||||
"admin.website-admin.blog.articles.delete",
|
||||
"admin.website-admin.blog.articles.publish",
|
||||
"admin.website-admin.blog.articles.archive",
|
||||
"admin.website-admin.blog.comments.view",
|
||||
"admin.website-admin.blog.comments.delete",
|
||||
"admin.website-admin.blog.comments.approve",
|
||||
"admin.website-admin.blog.comments.cancel"
|
||||
]
|
||||
},
|
||||
"WebsiteAdmin": {
|
||||
"_meta": {
|
||||
"description": {
|
||||
"es": "Gestiona contenidos, menús, SEO y configuración del sitio web.",
|
||||
"en": "Manages contents, menus, SEO, and website settings."
|
||||
},
|
||||
"icon": "ti ti-world",
|
||||
"style": "warning"
|
||||
},
|
||||
"permissions" : [
|
||||
"admin.website-admin.settings.general.view",
|
||||
"admin.website-admin.settings.social.view",
|
||||
"admin.website-admin.settings.indexing.view",
|
||||
"admin.website-admin.contact.info.view",
|
||||
"admin.website-admin.contact.form.view",
|
||||
"admin.website-admin.comunication.messenger.view",
|
||||
"admin.website-admin.comunication.whatsapp.view",
|
||||
"admin.website-admin.comunication.tawk-to.view",
|
||||
"admin.website-admin.comunication.twitter.view",
|
||||
"admin.website-admin.translate.google-translate.view",
|
||||
"admin.website-admin.translate.google-translate.update",
|
||||
"admin.website-admin.cms.menus.view",
|
||||
"admin.website-admin.cms.menus.update",
|
||||
"admin.website-admin.cms.seo.view",
|
||||
"admin.website-admin.cms.seo.update",
|
||||
"admin.website-admin.cms.contents.view",
|
||||
"admin.website-admin.cms.contents.create",
|
||||
"admin.website-admin.cms.contents.update",
|
||||
"admin.website-admin.cms.contents.delete",
|
||||
"admin.website-admin.cms.versions.view",
|
||||
"admin.website-admin.cms.versions.reopen",
|
||||
"admin.website-admin.cms.templates.view",
|
||||
"admin.website-admin.cms.templates.update",
|
||||
"admin.website-admin.website.cache.fullpage.view",
|
||||
"admin.website-admin.website.cache.fullpage.clean",
|
||||
"admin.website-admin.website.cache.signed-previews.view",
|
||||
"admin.website-admin.website.cache.signed-previews.clean",
|
||||
"admin.website-admin.content.faq.view",
|
||||
"admin.website-admin.content.faq.create",
|
||||
"admin.website-admin.content.faq.update",
|
||||
"admin.website-admin.content.faq.delete",
|
||||
"admin.website-admin.content.gallery.view",
|
||||
"admin.website-admin.content.gallery.create",
|
||||
"admin.website-admin.content.gallery.delete",
|
||||
"admin.website-admin.content.legal.view",
|
||||
"admin.website-admin.content.legal.update",
|
||||
"admin.website-admin.analytics.google-analytics.view",
|
||||
"admin.website-admin.analytics.google-tags.view",
|
||||
"admin.website-admin.analytics.google-search-console.view",
|
||||
"admin.website-admin.analytics.pixel-meta.view",
|
||||
"admin.website-admin.seo-tools.sitemap.view",
|
||||
"admin.website-admin.seo-tools.jsonld.view",
|
||||
"admin.website-admin.seo-tools.robots.view",
|
||||
"admin.website-admin.seo-tools.manifest.view",
|
||||
"admin.website-admin.seo-tools.canonical.view",
|
||||
"admin.website-admin.seo-tools.social-cards.view",
|
||||
"admin.website-admin.blog.categories.view",
|
||||
"admin.website-admin.blog.categories.create",
|
||||
"admin.website-admin.blog.categories.update",
|
||||
"admin.website-admin.blog.categories.delete",
|
||||
"admin.website-admin.blog.tags.view",
|
||||
"admin.website-admin.blog.tags.create",
|
||||
"admin.website-admin.blog.tags.update",
|
||||
"admin.website-admin.blog.tags.delete",
|
||||
"admin.website-admin.blog.articles.view",
|
||||
"admin.website-admin.blog.articles.create",
|
||||
"admin.website-admin.blog.articles.update",
|
||||
"admin.website-admin.blog.articles.delete",
|
||||
"admin.website-admin.blog.articles.publish",
|
||||
"admin.website-admin.blog.articles.archive",
|
||||
"admin.website-admin.blog.comments.view",
|
||||
"admin.website-admin.blog.comments.delete",
|
||||
"admin.website-admin.blog.comments.approve",
|
||||
"admin.website-admin.blog.comments.cancel"
|
||||
]
|
||||
},
|
||||
"WebsiteContentEditor": {
|
||||
"_meta": {
|
||||
"description": {
|
||||
"es": "Puede crear, editar y publicar contenidos y artículos del blog.",
|
||||
"en": "Can create, edit, and publish content and blog posts."
|
||||
},
|
||||
"icon": "ti ti-article",
|
||||
"style": "info"
|
||||
},
|
||||
"permissions": [
|
||||
"admin.website-admin.cms.menus.view",
|
||||
"admin.website-admin.cms.menus.update",
|
||||
"admin.website-admin.cms.seo.view",
|
||||
"admin.website-admin.cms.seo.update",
|
||||
"admin.website-admin.cms.contents.view",
|
||||
"admin.website-admin.cms.contents.create",
|
||||
"admin.website-admin.cms.contents.update",
|
||||
"admin.website-admin.cms.contents.delete",
|
||||
"admin.website-admin.cms.versions.view",
|
||||
"admin.website-admin.cms.templates.view",
|
||||
"admin.website-admin.website.cache.fullpage.view",
|
||||
"admin.website-admin.website.cache.fullpage.clean",
|
||||
"admin.website-admin.website.cache.signed-previews.view",
|
||||
"admin.website-admin.website.cache.signed-previews.clean",
|
||||
"admin.website-admin.content.faq.view",
|
||||
"admin.website-admin.content.faq.create",
|
||||
"admin.website-admin.content.faq.update",
|
||||
"admin.website-admin.content.faq.delete",
|
||||
"admin.website-admin.content.gallery.view",
|
||||
"admin.website-admin.content.gallery.create",
|
||||
"admin.website-admin.content.gallery.delete",
|
||||
"admin.website-admin.content.legal.view",
|
||||
"admin.website-admin.content.legal.update",
|
||||
"admin.website-admin.seo-tools.sitemap.view",
|
||||
"admin.website-admin.seo-tools.jsonld.view",
|
||||
"admin.website-admin.seo-tools.robots.view",
|
||||
"admin.website-admin.seo-tools.manifest.view",
|
||||
"admin.website-admin.seo-tools.canonical.view",
|
||||
"admin.website-admin.seo-tools.social-cards.view" ]
|
||||
},
|
||||
"BlogEditor": {
|
||||
"_meta": {
|
||||
"description": {
|
||||
"es": "Puede crear, editar y publicar contenidos y artículos del blog.",
|
||||
"en": "Can create, edit, and publish content and blog posts."
|
||||
},
|
||||
"icon": "ti ti-article",
|
||||
"style": "info"
|
||||
},
|
||||
"permissions": [
|
||||
"admin.website-admin.blog.categories.view",
|
||||
"admin.website-admin.blog.categories.create",
|
||||
"admin.website-admin.blog.categories.update",
|
||||
"admin.website-admin.blog.categories.delete",
|
||||
"admin.website-admin.blog.tags.view",
|
||||
"admin.website-admin.blog.tags.create",
|
||||
"admin.website-admin.blog.tags.update",
|
||||
"admin.website-admin.blog.tags.delete",
|
||||
"admin.website-admin.blog.articles.view",
|
||||
"admin.website-admin.blog.articles.create",
|
||||
"admin.website-admin.blog.articles.update",
|
||||
"admin.website-admin.blog.articles.delete",
|
||||
"admin.website-admin.blog.articles.publish",
|
||||
"admin.website-admin.blog.articles.archive",
|
||||
"admin.website-admin.blog.comments.view",
|
||||
"admin.website-admin.blog.comments.delete",
|
||||
"admin.website-admin.blog.comments.approve",
|
||||
"admin.website-admin.blog.comments.cancel"
|
||||
]
|
||||
|
||||
},
|
||||
"WebsiteSEO": {
|
||||
"_meta": {
|
||||
"description": {
|
||||
"es": "Gestiona herramientas SEO, Sitemap, Robots y JSON-LD.",
|
||||
"en": "Manages SEO tools, Sitemap, Robots, and JSON-LD."
|
||||
},
|
||||
"icon": "ti ti-chart-arcs",
|
||||
"style": "warning"
|
||||
},
|
||||
"permissions": [
|
||||
"admin.website-admin.settings.general.view",
|
||||
"admin.website-admin.settings.indexing.view",
|
||||
"admin.website-admin.analytics.google-analytics.view",
|
||||
"admin.website-admin.analytics.google-tags.view",
|
||||
"admin.website-admin.analytics.google-search-console.view",
|
||||
"admin.website-admin.analytics.pixel-meta.view",
|
||||
"admin.website-admin.seo-tools.sitemap.view",
|
||||
"admin.website-admin.seo-tools.jsonld.view",
|
||||
"admin.website-admin.seo-tools.robots.view",
|
||||
"admin.website-admin.seo-tools.manifest.view",
|
||||
"admin.website-admin.seo-tools.canonical.view",
|
||||
"admin.website-admin.seo-tools.social-cards.view"
|
||||
]
|
||||
|
||||
},
|
||||
"Auditor" : {
|
||||
"permissions" : [
|
||||
"admin.website-admin.settings.general.view",
|
||||
"admin.website-admin.settings.social.view",
|
||||
"admin.website-admin.settings.indexing.view",
|
||||
"admin.website-admin.contact.info.view",
|
||||
"admin.website-admin.contact.form.view",
|
||||
"admin.website-admin.comunication.messenger.view",
|
||||
"admin.website-admin.comunication.whatsapp.view",
|
||||
"admin.website-admin.comunication.tawk-to.view",
|
||||
"admin.website-admin.comunication.twitter.view",
|
||||
"admin.website-admin.translate.google-translate.view",
|
||||
"admin.website-admin.cms.menus.view",
|
||||
"admin.website-admin.cms.seo.view",
|
||||
"admin.website-admin.cms.contents.view",
|
||||
"admin.website-admin.cms.versions.view",
|
||||
"admin.website-admin.cms.templates.view",
|
||||
"admin.website-admin.website.cache.fullpage.view",
|
||||
"admin.website-admin.website.cache.signed-previews.view",
|
||||
"admin.website-admin.content.faq.view",
|
||||
"admin.website-admin.content.gallery.view",
|
||||
"admin.website-admin.content.legal.view",
|
||||
"admin.website-admin.analytics.google-analytics.view",
|
||||
"admin.website-admin.analytics.google-tags.view",
|
||||
"admin.website-admin.analytics.google-search-console.view",
|
||||
"admin.website-admin.analytics.pixel-meta.view",
|
||||
"admin.website-admin.seo-tools.sitemap.view",
|
||||
"admin.website-admin.seo-tools.jsonld.view",
|
||||
"admin.website-admin.seo-tools.robots.view",
|
||||
"admin.website-admin.seo-tools.manifest.view",
|
||||
"admin.website-admin.seo-tools.canonical.view",
|
||||
"admin.website-admin.seo-tools.social-cards.view",
|
||||
"admin.website-admin.blog.categories.view",
|
||||
"admin.website-admin.blog.tags.view",
|
||||
"admin.website-admin.blog.articles.view",
|
||||
"admin.website-admin.blog.comments.view"
|
||||
]
|
||||
}
|
||||
}
|
192
database/data/website-admin/website_agroform_contents.json
Normal file
192
database/data/website-admin/website_agroform_contents.json
Normal file
@ -0,0 +1,192 @@
|
||||
[
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Agroform",
|
||||
"slug": "",
|
||||
"description": "Bienvenido a agroform, soluciones tecnológicas para empresas.",
|
||||
"keywords": ["agroform", "erp", "tecnología", "soluciones"],
|
||||
"template": "home",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "inicio-agroform",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://agroform.com.mx",
|
||||
"content_blocks": [
|
||||
{"type": "hero", "title": "Soluciones Tecnológicas para tu Empresa", "subtitle": "Desde ERP hasta eCommerce", "image": "/images/hero.jpg"},
|
||||
{"type": "features", "items": [{"icon": "ti ti-server", "label": "Infraestructura"}, {"icon": "ti ti-code", "label": "Desarrollo a medida"}]},
|
||||
{"type": "cta", "text": "Solicita una demo sin costo", "button": "Agendar llamada"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Nosotros",
|
||||
"slug": "nosotros",
|
||||
"description": "Conoce la historia, visión y equipo de Koneko.",
|
||||
"keywords": ["nosotros", "equipo", "historia", "koneko"],
|
||||
"template": "default",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "inicio-agroform",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://agroform.com.mx/nosotros",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "¿Quiénes somos?", "content": "Somos una empresa de tecnología con sede en México..."},
|
||||
{"type": "team", "members": [{"name": "Arturo", "role": "Director Técnico"}, {"name": "Laura", "role": "Marketing"}]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Servicios",
|
||||
"slug": "servicios",
|
||||
"description": "Explora nuestros servicios: ERP, eCommerce, hosting y más.",
|
||||
"keywords": ["erp", "servicios", "agroform", "sistemas"],
|
||||
"template": "services",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "servicios-agroform",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://agroform.com.mx/servicios",
|
||||
"content_blocks": [
|
||||
{"type": "service_list", "items": [
|
||||
{"title": "ERP Agroform", "description": "Sistema de gestión empresarial completo"},
|
||||
{"title": "Tienda Virtual", "description": "Ecommerce 100% administrable con SEO nativo"},
|
||||
{"title": "Infraestructura", "description": "Servidores, VPS, Proxmox y más"}
|
||||
]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Contacto",
|
||||
"slug": "contacto",
|
||||
"description": "Contáctanos para resolver tus dudas o agendar una demo.",
|
||||
"keywords": ["contacto", "soporte", "demo", "ayuda"],
|
||||
"template": "contact",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://agroform.com.mx/contacto",
|
||||
"content_blocks": [
|
||||
{"type": "form", "fields": ["nombre", "email", "mensaje"], "submit_label": "Enviar mensaje"},
|
||||
{"type": "map", "lat": 19.4326, "lng": -99.1332}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Aviso de Privacidad",
|
||||
"slug": "aviso-privacidad",
|
||||
"description": "Consulta nuestro aviso de privacidad actualizado.",
|
||||
"keywords": ["legal", "privacidad", "datos personales"],
|
||||
"template": "legal",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://agroform.com.mx/aviso-privacidad",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "Política de privacidad", "content": "Tus datos son importantes para nosotros..."}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Preguntas Frecuentes",
|
||||
"slug": "faq",
|
||||
"description": "Resuelve tus dudas rápidamente con nuestras respuestas frecuentes.",
|
||||
"keywords": ["faq", "dudas", "soporte"],
|
||||
"template": "faq",
|
||||
"type": "page",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "faq", "items": [
|
||||
{"q": "¿Tienen soporte técnico?", "a": "Sí, disponible 24/7 para clientes activos."},
|
||||
{"q": "¿Qué formas de pago aceptan?", "a": "Transferencia, tarjeta y criptomonedas."}
|
||||
]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Header Principal",
|
||||
"slug": "header-principal",
|
||||
"description": "Encabezado superior con navegación.",
|
||||
"keywords": [],
|
||||
"template": null,
|
||||
"type": "partial",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": 1,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "menu", "menu_slug": "principal"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Footer General",
|
||||
"slug": "footer-general",
|
||||
"description": "Pie de página con enlaces y datos legales.",
|
||||
"keywords": [],
|
||||
"template": null,
|
||||
"type": "partial",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "footer", "links": ["inicio", "servicios", "contacto"]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Categoría: Blog",
|
||||
"slug": "blog",
|
||||
"description": "Explora nuestros artículos de tecnología y negocios.",
|
||||
"keywords": ["blog", "noticias", "tips", "artículos"],
|
||||
"template": "blog_index",
|
||||
"type": "category",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "blog",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://agroform.com.mx/blog",
|
||||
"content_blocks": [],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"title": "Artículo: Ventajas del ERP",
|
||||
"slug": "blog/ventajas-del-erp",
|
||||
"description": "Descubre cómo un ERP puede transformar tu empresa.",
|
||||
"keywords": ["erp", "ventajas", "productividad", "sistemas"],
|
||||
"template": "blog_article",
|
||||
"type": "blog",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "promocion-computadoras-gamer",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://agroform.com.mx/blog/ventajas-del-erp",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "Beneficios del ERP", "content": "Centralización de procesos, automatización..."},
|
||||
{"type": "image", "src": "/images/blog/erp-benefits.jpg", "alt": "ERP y eficiencia empresarial"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
}
|
||||
]
|
66
database/data/website-admin/website_agroform_menus.json
Normal file
66
database/data/website-admin/website_agroform_menus.json
Normal file
@ -0,0 +1,66 @@
|
||||
[
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Inicio",
|
||||
"en": "Home"
|
||||
},
|
||||
"url": "/",
|
||||
"type": "custom",
|
||||
"target": "_self",
|
||||
"order": 1,
|
||||
"icon": "ti ti-home"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Artículos",
|
||||
"en": "Articles"
|
||||
},
|
||||
"url": "/blog",
|
||||
"type": "blog_article",
|
||||
"target": "_self",
|
||||
"order": 2,
|
||||
"icon": "ti ti-news"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Categorías",
|
||||
"en": "Categories"
|
||||
},
|
||||
"url": "/blog/categorias",
|
||||
"type": "blog_category",
|
||||
"target": "_self",
|
||||
"order": 3,
|
||||
"icon": "ti ti-list"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Iniciar Sesión",
|
||||
"en": "Login"
|
||||
},
|
||||
"url": "/login",
|
||||
"type": "custom",
|
||||
"target": "_self",
|
||||
"order": 4,
|
||||
"icon": "ti ti-login",
|
||||
"badge": "Nuevo",
|
||||
"badge_color": "bg-success"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Cerrar Sesión",
|
||||
"en": "Logout"
|
||||
},
|
||||
"url": "/logout",
|
||||
"type": "action",
|
||||
"target": "_self",
|
||||
"order": 5,
|
||||
"icon": "ti ti-logout",
|
||||
"method": "POST",
|
||||
"roles": ["authenticated"]
|
||||
}
|
||||
]
|
192
database/data/website-admin/website_cleanfy_contents.json
Normal file
192
database/data/website-admin/website_cleanfy_contents.json
Normal file
@ -0,0 +1,192 @@
|
||||
[
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Cleanfy",
|
||||
"slug": "",
|
||||
"description": "Bienvenido a cleanfy, soluciones tecnológicas para empresas.",
|
||||
"keywords": ["cleanfy", "erp", "tecnología", "soluciones"],
|
||||
"template": "home",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "inicio-cleanfy",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://cleanfy.mx",
|
||||
"content_blocks": [
|
||||
{"type": "hero", "title": "Soluciones Tecnológicas para tu Empresa", "subtitle": "Desde ERP hasta eCommerce", "image": "/images/hero.jpg"},
|
||||
{"type": "features", "items": [{"icon": "ti ti-server", "label": "Infraestructura"}, {"icon": "ti ti-code", "label": "Desarrollo a medida"}]},
|
||||
{"type": "cta", "text": "Solicita una demo sin costo", "button": "Agendar llamada"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Nosotros",
|
||||
"slug": "nosotros",
|
||||
"description": "Conoce la historia, visión y equipo de Koneko.",
|
||||
"keywords": ["nosotros", "equipo", "historia", "koneko"],
|
||||
"template": "default",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "inicio-cleanfy",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://cleanfy.mx/nosotros",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "¿Quiénes somos?", "content": "Somos una empresa de tecnología con sede en México..."},
|
||||
{"type": "team", "members": [{"name": "Arturo", "role": "Director Técnico"}, {"name": "Laura", "role": "Marketing"}]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Servicios",
|
||||
"slug": "servicios",
|
||||
"description": "Explora nuestros servicios: ERP, eCommerce, hosting y más.",
|
||||
"keywords": ["erp", "servicios", "cleanfy", "sistemas"],
|
||||
"template": "services",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "servicios-cleanfy",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://cleanfy.mx/servicios",
|
||||
"content_blocks": [
|
||||
{"type": "service_list", "items": [
|
||||
{"title": "ERP Cleanfy", "description": "Sistema de gestión empresarial completo"},
|
||||
{"title": "Tienda Virtual", "description": "Ecommerce 100% administrable con SEO nativo"},
|
||||
{"title": "Infraestructura", "description": "Servidores, VPS, Proxmox y más"}
|
||||
]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Contacto",
|
||||
"slug": "contacto",
|
||||
"description": "Contáctanos para resolver tus dudas o agendar una demo.",
|
||||
"keywords": ["contacto", "soporte", "demo", "ayuda"],
|
||||
"template": "contact",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://cleanfy.mx/contacto",
|
||||
"content_blocks": [
|
||||
{"type": "form", "fields": ["nombre", "email", "mensaje"], "submit_label": "Enviar mensaje"},
|
||||
{"type": "map", "lat": 19.4326, "lng": -99.1332}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Aviso de Privacidad",
|
||||
"slug": "aviso-privacidad",
|
||||
"description": "Consulta nuestro aviso de privacidad actualizado.",
|
||||
"keywords": ["legal", "privacidad", "datos personales"],
|
||||
"template": "legal",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://cleanfy.mx/aviso-privacidad",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "Política de privacidad", "content": "Tus datos son importantes para nosotros..."}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Preguntas Frecuentes",
|
||||
"slug": "faq",
|
||||
"description": "Resuelve tus dudas rápidamente con nuestras respuestas frecuentes.",
|
||||
"keywords": ["faq", "dudas", "soporte"],
|
||||
"template": "faq",
|
||||
"type": "page",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "faq", "items": [
|
||||
{"q": "¿Tienen soporte técnico?", "a": "Sí, disponible 24/7 para clientes activos."},
|
||||
{"q": "¿Qué formas de pago aceptan?", "a": "Transferencia, tarjeta y criptomonedas."}
|
||||
]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Header Principal",
|
||||
"slug": "header-principal",
|
||||
"description": "Encabezado superior con navegación.",
|
||||
"keywords": [],
|
||||
"template": null,
|
||||
"type": "partial",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": 1,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "menu", "menu_slug": "principal"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Footer General",
|
||||
"slug": "footer-general",
|
||||
"description": "Pie de página con enlaces y datos legales.",
|
||||
"keywords": [],
|
||||
"template": null,
|
||||
"type": "partial",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "footer", "links": ["inicio", "servicios", "contacto"]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Categoría: Blog",
|
||||
"slug": "blog",
|
||||
"description": "Explora nuestros artículos de tecnología y negocios.",
|
||||
"keywords": ["blog", "noticias", "tips", "artículos"],
|
||||
"template": "blog_index",
|
||||
"type": "category",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "blog",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://cleanfy.mx/blog",
|
||||
"content_blocks": [],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"title": "Artículo: Ventajas del ERP",
|
||||
"slug": "blog/ventajas-del-erp",
|
||||
"description": "Descubre cómo un ERP puede transformar tu empresa.",
|
||||
"keywords": ["erp", "ventajas", "productividad", "sistemas"],
|
||||
"template": "blog_article",
|
||||
"type": "blog",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "promocion-computadoras-gamer",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://cleanfy.mx/blog/ventajas-del-erp",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "Beneficios del ERP", "content": "Centralización de procesos, automatización..."},
|
||||
{"type": "image", "src": "/images/blog/erp-benefits.jpg", "alt": "ERP y eficiencia empresarial"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
}
|
||||
]
|
74
database/data/website-admin/website_cleanfy_menus.json
Normal file
74
database/data/website-admin/website_cleanfy_menus.json
Normal file
@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Inicio",
|
||||
"en": "Home"
|
||||
},
|
||||
"route_name": "website.home",
|
||||
"type": "custom",
|
||||
"target": "_self",
|
||||
"order": 1,
|
||||
"icon": "ti ti-home"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Nosotros",
|
||||
"en": "About Us"
|
||||
},
|
||||
"route_name": "website.about",
|
||||
"type": "custom",
|
||||
"target": "_self",
|
||||
"order": 2,
|
||||
"icon": "ti ti-users"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Servicios",
|
||||
"en": "Services"
|
||||
},
|
||||
"route_name": "website.services",
|
||||
"type": "custom",
|
||||
"target": "_self",
|
||||
"order": 3,
|
||||
"icon": "ti ti-briefcase"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Portafolio",
|
||||
"en": "Portfolio"
|
||||
},
|
||||
"route_name": "website.portfolio",
|
||||
"type": "custom",
|
||||
"target": "_self",
|
||||
"order": 4,
|
||||
"icon": "ti ti-photo"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Testimonios",
|
||||
"en": "Testimonials"
|
||||
},
|
||||
"route_name": "website.testimonials",
|
||||
"type": "custom",
|
||||
"target": "_self",
|
||||
"order": 5,
|
||||
"icon": "ti ti-messages"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Contacto",
|
||||
"en": "Contact"
|
||||
},
|
||||
"route_name": "website.contact",
|
||||
"type": "custom",
|
||||
"target": "_self",
|
||||
"order": 6,
|
||||
"icon": "ti ti-phone-call"
|
||||
}
|
||||
]
|
44
database/data/website-admin/website_menus.json
Normal file
44
database/data/website-admin/website_menus.json
Normal file
@ -0,0 +1,44 @@
|
||||
[
|
||||
{
|
||||
"site_id": 1,
|
||||
"slug": "main-header",
|
||||
"title": "Menú Principal",
|
||||
"description": "Navegación principal del sitio web Cleanfy.",
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"site_id": 1,
|
||||
"slug": "footer",
|
||||
"title": "Menú Footer",
|
||||
"description": "Navegación del footer del sitio web Cleanfy.",
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"slug": "main-header",
|
||||
"title": "Menú Principal",
|
||||
"description": "Navegación principal del sitio web Agroform.",
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"slug": "footer",
|
||||
"title": "Menú Footer",
|
||||
"description": "Navegación del footer del sitio web Agroform.",
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"slug": "main-header",
|
||||
"title": "Menú Principal",
|
||||
"description": "Navegación principal del sitio web Realcity.",
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"slug": "footer",
|
||||
"title": "Menú Footer",
|
||||
"description": "Navegación del footer del sitio web Realcity.",
|
||||
"is_active": true
|
||||
}
|
||||
]
|
192
database/data/website-admin/website_realcity_contents.json
Normal file
192
database/data/website-admin/website_realcity_contents.json
Normal file
@ -0,0 +1,192 @@
|
||||
[
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Realcity",
|
||||
"slug": "",
|
||||
"description": "Bienvenido a realcity, soluciones tecnológicas para empresas.",
|
||||
"keywords": ["realcity", "erp", "tecnología", "soluciones"],
|
||||
"template": "home",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "inicio-realcity",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://realcity.com.mx",
|
||||
"content_blocks": [
|
||||
{"type": "hero", "title": "Soluciones Tecnológicas para tu Empresa", "subtitle": "Desde ERP hasta eCommerce", "image": "/images/hero.jpg"},
|
||||
{"type": "features", "items": [{"icon": "ti ti-server", "label": "Infraestructura"}, {"icon": "ti ti-code", "label": "Desarrollo a medida"}]},
|
||||
{"type": "cta", "text": "Solicita una demo sin costo", "button": "Agendar llamada"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Nosotros",
|
||||
"slug": "nosotros",
|
||||
"description": "Conoce la historia, visión y equipo de Koneko.",
|
||||
"keywords": ["nosotros", "equipo", "historia", "koneko"],
|
||||
"template": "default",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "inicio-realcity",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://realcity.com.mx/nosotros",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "¿Quiénes somos?", "content": "Somos una empresa de tecnología con sede en México..."},
|
||||
{"type": "team", "members": [{"name": "Arturo", "role": "Director Técnico"}, {"name": "Laura", "role": "Marketing"}]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Servicios",
|
||||
"slug": "servicios",
|
||||
"description": "Explora nuestros servicios: ERP, eCommerce, hosting y más.",
|
||||
"keywords": ["erp", "servicios", "realcity", "sistemas"],
|
||||
"template": "services",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "servicios-realcity",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://realcity.com.mx/servicios",
|
||||
"content_blocks": [
|
||||
{"type": "service_list", "items": [
|
||||
{"title": "ERP Realcity", "description": "Sistema de gestión empresarial completo"},
|
||||
{"title": "Tienda Virtual", "description": "Ecommerce 100% administrable con SEO nativo"},
|
||||
{"title": "Infraestructura", "description": "Servidores, VPS, Proxmox y más"}
|
||||
]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Contacto",
|
||||
"slug": "contacto",
|
||||
"description": "Contáctanos para resolver tus dudas o agendar una demo.",
|
||||
"keywords": ["contacto", "soporte", "demo", "ayuda"],
|
||||
"template": "contact",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://realcity.com.mx/contacto",
|
||||
"content_blocks": [
|
||||
{"type": "form", "fields": ["nombre", "email", "mensaje"], "submit_label": "Enviar mensaje"},
|
||||
{"type": "map", "lat": 19.4326, "lng": -99.1332}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Aviso de Privacidad",
|
||||
"slug": "aviso-privacidad",
|
||||
"description": "Consulta nuestro aviso de privacidad actualizado.",
|
||||
"keywords": ["legal", "privacidad", "datos personales"],
|
||||
"template": "legal",
|
||||
"type": "page",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://realcity.com.mx/aviso-privacidad",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "Política de privacidad", "content": "Tus datos son importantes para nosotros..."}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Preguntas Frecuentes",
|
||||
"slug": "faq",
|
||||
"description": "Resuelve tus dudas rápidamente con nuestras respuestas frecuentes.",
|
||||
"keywords": ["faq", "dudas", "soporte"],
|
||||
"template": "faq",
|
||||
"type": "page",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "faq", "items": [
|
||||
{"q": "¿Tienen soporte técnico?", "a": "Sí, disponible 24/7 para clientes activos."},
|
||||
{"q": "¿Qué formas de pago aceptan?", "a": "Transferencia, tarjeta y criptomonedas."}
|
||||
]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Header Principal",
|
||||
"slug": "header-principal",
|
||||
"description": "Encabezado superior con navegación.",
|
||||
"keywords": [],
|
||||
"template": null,
|
||||
"type": "partial",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": 1,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "menu", "menu_slug": "principal"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Footer General",
|
||||
"slug": "footer-general",
|
||||
"description": "Pie de página con enlaces y datos legales.",
|
||||
"keywords": [],
|
||||
"template": null,
|
||||
"type": "partial",
|
||||
"is_partial": true,
|
||||
"seo_profile_id": null,
|
||||
"seo_overrides": null,
|
||||
"canonical_url": null,
|
||||
"content_blocks": [
|
||||
{"type": "footer", "links": ["inicio", "servicios", "contacto"]}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Categoría: Blog",
|
||||
"slug": "blog",
|
||||
"description": "Explora nuestros artículos de tecnología y negocios.",
|
||||
"keywords": ["blog", "noticias", "tips", "artículos"],
|
||||
"template": "blog_index",
|
||||
"type": "category",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "blog",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://realcity.com.mx/blog",
|
||||
"content_blocks": [],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
},
|
||||
{
|
||||
"site_id": 3,
|
||||
"title": "Artículo: Ventajas del ERP",
|
||||
"slug": "blog/ventajas-del-erp",
|
||||
"description": "Descubre cómo un ERP puede transformar tu empresa.",
|
||||
"keywords": ["erp", "ventajas", "productividad", "sistemas"],
|
||||
"template": "blog_article",
|
||||
"type": "blog",
|
||||
"is_partial": false,
|
||||
"seo_profile_id": "promocion-computadoras-gamer",
|
||||
"seo_overrides": null,
|
||||
"canonical_url": "https://realcity.com.mx/blog/ventajas-del-erp",
|
||||
"content_blocks": [
|
||||
{"type": "text", "heading": "Beneficios del ERP", "content": "Centralización de procesos, automatización..."},
|
||||
{"type": "image", "src": "/images/blog/erp-benefits.jpg", "alt": "ERP y eficiencia empresarial"}
|
||||
],
|
||||
"is_draft": false,
|
||||
"is_sensitive": false
|
||||
}
|
||||
]
|
92
database/data/website-admin/website_realcity_menus.json
Normal file
92
database/data/website-admin/website_realcity_menus.json
Normal file
@ -0,0 +1,92 @@
|
||||
[
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Inicio",
|
||||
"en": "Home"
|
||||
},
|
||||
"type": "cms_page",
|
||||
"order": 1,
|
||||
"icon": "ti ti-home"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Nuestro corporativo",
|
||||
"en": "About Us"
|
||||
},
|
||||
"type": "cms_page",
|
||||
"order": 2,
|
||||
"icon": "ti ti-users"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Soluciones y servicios",
|
||||
"en": "Solutions and services"
|
||||
},
|
||||
"type": "cms_page",
|
||||
"order": 3,
|
||||
"icon": "ti ti-briefcase"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Valor y Beneficios",
|
||||
"en": "Value and Benefits"
|
||||
},
|
||||
"type": "cms_page",
|
||||
"order": 4,
|
||||
"icon": "ti ti-briefcase"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Experiencia de éxito",
|
||||
"en": "Success Experience"
|
||||
},
|
||||
"type": "cms_page",
|
||||
"order": 5,
|
||||
"icon": "ti ti-briefcase"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Blog y contenido",
|
||||
"en": "Blog and content"
|
||||
},
|
||||
"type": "blog_article",
|
||||
"order": 6,
|
||||
"icon": "ti ti-news"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Residentes y usuarios",
|
||||
"en": "Residents and users"
|
||||
},
|
||||
"type": "cms_page",
|
||||
"order": 7,
|
||||
"icon": "ti ti-users"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Contacto",
|
||||
"en": "Contact"
|
||||
},
|
||||
"type": "action",
|
||||
"order": 8,
|
||||
"icon": "ti ti-phone-call"
|
||||
},
|
||||
{
|
||||
"menu_slug": "main-header",
|
||||
"title": {
|
||||
"es": "Legales",
|
||||
"en": "Legal"
|
||||
},
|
||||
"type": "cms_page",
|
||||
"order": 9,
|
||||
"icon": "ti ti-file"
|
||||
}
|
||||
]
|
145
database/data/website-admin/website_seo_profiles.json
Normal file
145
database/data/website-admin/website_seo_profiles.json
Normal file
@ -0,0 +1,145 @@
|
||||
[
|
||||
{
|
||||
"site_id": 1,
|
||||
"type": "page",
|
||||
"title": "AgroForm México | Jardinería Integral con Tecnología y Sostenibilidad",
|
||||
"slug": "agroform-home",
|
||||
"description": "AgroForm México transforma espacios verdes desde 2017 con servicios de jardinería, mantenimiento y diseño innovador. Combinamos sostenibilidad, tecnología y excelencia para embellecer y proteger tu inversión.",
|
||||
"schema_org": {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "AgroForm México",
|
||||
"url": "https://agroform.com.mx",
|
||||
"logo": "https://agroform.com.mx/assets/logo.png",
|
||||
"description": "Servicios de jardinería, mantenimiento de áreas verdes y paisajismo sostenible en México.",
|
||||
"foundingDate": "2017",
|
||||
"areaServed": "MX",
|
||||
"sameAs": [
|
||||
"https://www.facebook.com/agroformmx",
|
||||
"https://www.instagram.com/agroformmx"
|
||||
]
|
||||
},
|
||||
"noindex": false,
|
||||
"nofollow": false,
|
||||
"locale": "es-MX",
|
||||
"geo_location": {
|
||||
"geo.region": "MX",
|
||||
"geo.placename": "México"
|
||||
},
|
||||
"og_type": "website",
|
||||
"og_title": "AgroForm México | Jardinería Integral con Tecnología y Sostenibilidad",
|
||||
"og_description": "Creamos y cuidamos jardines, parques y espacios verdes sostenibles con tecnología de punta y personal altamente capacitado.",
|
||||
"og_image": "https://agroform.com.mx/assets/og-image.jpg",
|
||||
"og_url": "https://agroform.com.mx",
|
||||
"og_site_name": "AgroForm México",
|
||||
"twitter_card": "summary_large_image",
|
||||
"twitter_title": "AgroForm México",
|
||||
"twitter_description": "Soluciones integrales en jardinería y paisajismo sostenible para parques y espacios verdes.",
|
||||
"twitter_image": "https://agroform.com.mx/assets/twitter-card.jpg",
|
||||
"twitter_site": "@agroformmx",
|
||||
"twitter_creator": "@agroformmx",
|
||||
"json_ld": {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "AgroForm México",
|
||||
"url": "https://agroform.com.mx",
|
||||
"description": "Empresa mexicana líder en jardinería integral, mantenimiento de áreas verdes y paisajismo con enfoque tecnológico y sostenible."
|
||||
},
|
||||
"created_by": 1,
|
||||
"updated_by": 1,
|
||||
"created_at": "2025-05-24T17:00:00",
|
||||
"updated_at": "2025-05-24T17:00:00"
|
||||
},
|
||||
{
|
||||
"site_id": 2,
|
||||
"type": "page",
|
||||
"title": "CleanFy México | Soluciones Integrales de Limpieza y Sanitización",
|
||||
"slug": "cleanfy-home",
|
||||
"description": "CleanFy es tu socio estratégico en limpieza profesional y sanitización en México. Con personal capacitado, tecnología avanzada y enfoque sostenible, garantizamos espacios seguros, limpios y saludables.",
|
||||
"schema_org": {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "CleanFy México",
|
||||
"url": "https://cleanfy.mx",
|
||||
"logo": "https://cleanfy.mx/assets/logo.png",
|
||||
"description": "Empresa líder en soluciones integrales de limpieza, sanitización y mantenimiento para hogares, oficinas, industrias y más.",
|
||||
"foundingDate": "2017",
|
||||
"areaServed": "MX",
|
||||
"sameAs": [
|
||||
"https://www.facebook.com/cleanfymx",
|
||||
"https://www.instagram.com/cleanfymx"
|
||||
]
|
||||
},
|
||||
"noindex": false,
|
||||
"nofollow": false,
|
||||
"locale": "es-MX",
|
||||
"geo_location": {
|
||||
"geo.region": "MX",
|
||||
"geo.placename": "México"
|
||||
},
|
||||
"og_type": "website",
|
||||
"og_title": "CleanFy México | Soluciones Integrales de Limpieza y Sanitización",
|
||||
"og_description": "Transformamos espacios en ambientes impecables y seguros. Limpieza profesional, protocolos tecnológicos, y compromiso con la calidad y la salud.",
|
||||
"og_image": "https://cleanfy.mx/assets/og-image.jpg",
|
||||
"og_url": "https://cleanfy.mx",
|
||||
"og_site_name": "CleanFy México",
|
||||
"twitter_card": "summary_large_image",
|
||||
"twitter_title": "CleanFy México",
|
||||
"twitter_description": "Empresa profesional de limpieza y sanitización con tecnología, compromiso y excelencia.",
|
||||
"twitter_image": "https://cleanfy.mx/assets/twitter-card.jpg",
|
||||
"twitter_site": "@cleanfymx",
|
||||
"twitter_creator": "@cleanfymx",
|
||||
"json_ld": {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "CleanFy México",
|
||||
"url": "https://cleanfy.mx",
|
||||
"description": "Empresa mexicana especializada en limpieza y sanitización profesional para empresas, oficinas y hogares. Tecnología, personal capacitado y sostenibilidad al servicio de la salud y productividad."
|
||||
}
|
||||
}
|
||||
,
|
||||
{
|
||||
"site_id": 3,
|
||||
"type": "page",
|
||||
"title": "RealCity México | Próximamente la Nueva Plataforma Inmobiliaria",
|
||||
"slug": "realcity-coming-soon",
|
||||
"description": "Prepárate para una experiencia inmobiliaria moderna y eficiente. RealCity está por llegar para transformar la forma de comprar, vender y rentar propiedades en México.",
|
||||
"schema_org": {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "RealCity México",
|
||||
"url": "https://realcity.com.mx",
|
||||
"logo": "https://realcity.com.mx/assets/logo.png",
|
||||
"description": "Plataforma inmobiliaria innovadora en México, especializada en conectar compradores, vendedores e inversionistas mediante tecnología moderna.",
|
||||
"foundingDate": "2025",
|
||||
"areaServed": "MX"
|
||||
},
|
||||
"noindex": false,
|
||||
"nofollow": false,
|
||||
"locale": "es-MX",
|
||||
"geo_location": {
|
||||
"geo.region": "MX",
|
||||
"geo.placename": "México"
|
||||
},
|
||||
"og_type": "website",
|
||||
"og_title": "RealCity México | Próximamente la Nueva Plataforma Inmobiliaria",
|
||||
"og_description": "Muy pronto una nueva experiencia digital para el sector inmobiliario. Encuentra la propiedad ideal con RealCity México.",
|
||||
"og_image": "https://realcity.com.mx/assets/og-image.jpg",
|
||||
"og_url": "https://realcity.com.mx",
|
||||
"og_site_name": "RealCity México",
|
||||
"twitter_card": "summary_large_image",
|
||||
"twitter_title": "RealCity México",
|
||||
"twitter_description": "Innovación inmobiliaria en México. RealCity es la nueva forma de buscar, publicar y cerrar negocios en bienes raíces.",
|
||||
"twitter_image": "https://realcity.com.mx/assets/twitter-card.jpg",
|
||||
"twitter_site": "@realcitymx",
|
||||
"twitter_creator": "@realcitymx",
|
||||
"json_ld": {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "RealCity México",
|
||||
"url": "https://realcity.com.mx",
|
||||
"description": "RealCity ofrece una plataforma tecnológica avanzada para transformar la experiencia inmobiliaria en México, con servicios digitales para compra, venta y renta de propiedades."
|
||||
}
|
||||
}
|
||||
|
||||
]
|
220
database/data/website-admin/website_sites.json
Normal file
220
database/data/website-admin/website_sites.json
Normal file
@ -0,0 +1,220 @@
|
||||
[
|
||||
{
|
||||
"name": "cleanfy.mx",
|
||||
"slug": "cleanfy-mx",
|
||||
"domain": "cleanfy.mx",
|
||||
"template": "cleaning-services",
|
||||
"status": "active",
|
||||
"is_active": true,
|
||||
"is_indexable": true,
|
||||
"meta_title": "Limpieza Profesional - Cleanfy",
|
||||
"meta_description": "Servicios de limpieza profesional y desinfección para empresas y hogares en México.",
|
||||
"canonical_url": "https://cleanfy.mx",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "index,follow",
|
||||
"config": {
|
||||
"favicon": "/assets/cleanfy/favicon.ico",
|
||||
"primary_color": "#27ae60",
|
||||
"logo": "/assets/cleanfy/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "Cleanfy.mx",
|
||||
"og:image": "/assets/cleanfy/og-image.jpg",
|
||||
"twitter:card": "summary_large_image",
|
||||
"twitter:site": "@cleanfymx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "agroform.com.mx",
|
||||
"slug": "agroform-com-mx",
|
||||
"domain": "agroform.com.mx",
|
||||
"template": "renewable-energy",
|
||||
"status": "coming_soon",
|
||||
"is_active": true,
|
||||
"is_indexable": false,
|
||||
"meta_title": "AgroForm | Agricultura Inteligente",
|
||||
"meta_description": "Soluciones tecnológicas para productores agrícolas: sensores, plataformas y más.",
|
||||
"canonical_url": "https://agroform.com.mx",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "noindex,nofollow",
|
||||
"config": {
|
||||
"maintenance_page": "coming-soon",
|
||||
"primary_color": "#388e3c",
|
||||
"logo": "/assets/agroform/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "AgroForm",
|
||||
"og:description": "Innovación para el campo mexicano.",
|
||||
"twitter:site": "@agroformmx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "realcity.com.mx",
|
||||
"slug": "realcity-com-mx",
|
||||
"domain": "realcity.com.mx",
|
||||
"template": "business-consulting-4",
|
||||
"status": "active",
|
||||
"is_active": true,
|
||||
"is_indexable": true,
|
||||
"meta_title": "RealCity | Bienes Raíces Premium",
|
||||
"meta_description": "Compra y renta de propiedades en zonas exclusivas. Encuentra tu próximo hogar con RealCity.",
|
||||
"canonical_url": "https://realcity.com.mx",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "index,follow",
|
||||
"config": {
|
||||
"template_variant": "real-estate",
|
||||
"primary_color": "#34495e",
|
||||
"logo": "/assets/realcity/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "RealCity",
|
||||
"og:image": "/assets/realcity/og-image.jpg",
|
||||
"og:type": "website",
|
||||
"twitter:site": "@realcitymx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "anonymous.test",
|
||||
"slug": "anonymous-test",
|
||||
"domain": "anonymous.test",
|
||||
"template": "anonymous",
|
||||
"status": "active",
|
||||
"is_active": true,
|
||||
"is_indexable": true,
|
||||
"meta_title": "Anonymous",
|
||||
"meta_description": "Anonymous",
|
||||
"canonical_url": "https://anonymous.test",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "index,follow",
|
||||
"config": {
|
||||
"primary_color": "#34495e",
|
||||
"logo": "/assets/anonymous/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "Anonymous",
|
||||
"og:image": "/assets/anonymous/og-image.jpg",
|
||||
"og:type": "website",
|
||||
"twitter:site": "@anonymousmx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "landwind.test",
|
||||
"slug": "landwind-test",
|
||||
"domain": "landwind.test",
|
||||
"template": "landwind",
|
||||
"status": "active",
|
||||
"is_active": true,
|
||||
"is_indexable": true,
|
||||
"meta_title": "Landwind",
|
||||
"meta_description": "Landwind",
|
||||
"canonical_url": "https://landwind.test",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "index,follow",
|
||||
"config": {
|
||||
"primary_color": "#34495e",
|
||||
"logo": "/assets/landwind/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "Landwind",
|
||||
"og:image": "/assets/landwind/og-image.jpg",
|
||||
"og:type": "website",
|
||||
"twitter:site": "@landwindmx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "limaa-m.test",
|
||||
"slug": "limaa-m-test",
|
||||
"domain": "limaa-m.test",
|
||||
"template": "limaa-m",
|
||||
"status": "active",
|
||||
"is_active": true,
|
||||
"is_indexable": true,
|
||||
"meta_title": "Limaa M",
|
||||
"meta_description": "Limaa M",
|
||||
"canonical_url": "https://limaa-m.test",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "index,follow",
|
||||
"config": {
|
||||
"primary_color": "#34495e",
|
||||
"logo": "/assets/limaa-m/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "Limaa M",
|
||||
"og:image": "/assets/limaa-m/og-image.jpg",
|
||||
"og:type": "website",
|
||||
"twitter:site": "@limaa-mmx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "maximus.test",
|
||||
"slug": "maximus-test",
|
||||
"domain": "maximus.test",
|
||||
"template": "maximus",
|
||||
"status": "active",
|
||||
"is_active": true,
|
||||
"is_indexable": true,
|
||||
"meta_title": "Maximus",
|
||||
"meta_description": "Maximus",
|
||||
"canonical_url": "https://maximus.test",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "index,follow",
|
||||
"config": {
|
||||
"primary_color": "#34495e",
|
||||
"logo": "/assets/maximus/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "Maximus",
|
||||
"og:image": "/assets/maximus/og-image.jpg",
|
||||
"og:type": "website",
|
||||
"twitter:site": "@maximusmx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "notus.test",
|
||||
"slug": "notus-test",
|
||||
"domain": "notus.test",
|
||||
"template": "notus",
|
||||
"status": "active",
|
||||
"is_active": true,
|
||||
"is_indexable": true,
|
||||
"meta_title": "Notus",
|
||||
"meta_description": "Notus",
|
||||
"canonical_url": "https://notus.test",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "index,follow",
|
||||
"config": {
|
||||
"primary_color": "#34495e",
|
||||
"logo": "/assets/notus/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "Notus",
|
||||
"og:image": "/assets/notus/og-image.jpg",
|
||||
"og:type": "website",
|
||||
"twitter:site": "@notusmx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "samuel-coming-soon.test",
|
||||
"slug": "samuel-coming-soon-test",
|
||||
"domain": "samuel-coming-soon.test",
|
||||
"template": "samuel-coming-soon",
|
||||
"status": "active",
|
||||
"is_active": true,
|
||||
"is_indexable": true,
|
||||
"meta_title": "Samuel Coming Soon",
|
||||
"meta_description": "Samuel Coming Soon",
|
||||
"canonical_url": "https://samuel-coming-soon.test",
|
||||
"locale": "es-MX",
|
||||
"robots_directives": "index,follow",
|
||||
"config": {
|
||||
"primary_color": "#34495e",
|
||||
"logo": "/assets/samuel-coming-soon/logo.svg"
|
||||
},
|
||||
"social": {
|
||||
"og:title": "Samuel Coming Soon",
|
||||
"og:image": "/assets/samuel-coming-soon/og-image.jpg",
|
||||
"og:type": "website",
|
||||
"twitter:site": "@samuelcomingsoonmx"
|
||||
}
|
||||
}
|
||||
]
|
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('website_seo_profiles', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('site_id')->nullable()->index();
|
||||
|
||||
// Metadata
|
||||
$table->string('type', 16)->default('page')->index(); // Enum: Content, Landing, Product, Category Blog
|
||||
$table->string('title')->nullable()->index(); // Título del perfil
|
||||
$table->string('slug')->unique();
|
||||
$table->mediumText('description')->nullable(); // Descripción del perfil
|
||||
|
||||
// Tipos de schema adicionales
|
||||
$table->json('schema_org')->nullable();
|
||||
|
||||
// Robots Directives
|
||||
$table->boolean('noindex')->default(false);
|
||||
$table->boolean('nofollow')->default(false);
|
||||
|
||||
// Idioma y Geolocalización
|
||||
$table->string('locale', 8)->default('es-MX')->index(); // Para SEO internacional
|
||||
$table->json('geo_location')->nullable(); // meta geo.region y geo.placename
|
||||
|
||||
// Open Graph
|
||||
$table->string('og_type')->nullable();
|
||||
$table->string('og_title')->nullable();
|
||||
$table->text('og_description')->nullable();
|
||||
$table->string('og_image')->nullable();
|
||||
$table->string('og_url')->nullable();
|
||||
$table->string('og_site_name')->nullable();
|
||||
|
||||
// Twitter Card
|
||||
$table->string('twitter_card')->default('summary_large_image');
|
||||
$table->string('twitter_title')->nullable();
|
||||
$table->text('twitter_description')->nullable();
|
||||
$table->string('twitter_image')->nullable();
|
||||
$table->string('twitter_site')->nullable();
|
||||
$table->string('twitter_creator')->nullable();
|
||||
|
||||
// JSON-LD opcional (almacenado como bloque JSON)
|
||||
$table->json('json_ld')->nullable();
|
||||
|
||||
// Auditoria
|
||||
$table->unsignedMediumInteger('created_by')->nullable();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['site_id', 'type']);
|
||||
$table->index(['site_id', 'type', 'slug']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('website_seo_profiles');
|
||||
}
|
||||
};
|
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('website_sites', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
// Identidad
|
||||
$table->string('name')->index(); // Nombre visible en admin
|
||||
$table->string('slug')->unique(); // Clave técnica
|
||||
$table->string('domain')->unique(); // Dominio principal (sin protocolo)
|
||||
$table->string('template')->nullable(); // Componente layout activo
|
||||
|
||||
// Estado
|
||||
$table->string('status', 16)->default('active')->index(); // Estados especiales del sitio
|
||||
$table->boolean('is_indexable')->default(true)->index(); // SEO: permitir indexado o no
|
||||
|
||||
// SEO
|
||||
$table->unsignedSmallInteger('seo_profile_id')->nullable()->index();
|
||||
$table->string('canonical_url')->nullable(); // Canonical para root
|
||||
|
||||
// Configuración
|
||||
$table->json('config')->nullable(); // favicon, theme, brand, CDN, etc.
|
||||
|
||||
// Auditoría
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['slug', 'status', 'is_indexable']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('seo_profile_id')->references('id')->on('website_seo_profiles')->nullOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
|
||||
Schema::table('website_seo_profiles', function (Blueprint $table) {
|
||||
$table->foreign('site_id')->references('id')->on('website_sites')->cascadeOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('website_sites');
|
||||
|
||||
Schema::table('website_seo_profiles', function (Blueprint $table) {
|
||||
$table->dropForeign(['site_id']);
|
||||
});
|
||||
}
|
||||
};
|
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('website_menus', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('site_id')->index();
|
||||
|
||||
$table->string('title')->index();
|
||||
$table->string('slug')->unique();
|
||||
|
||||
$table->string('description')->nullable();
|
||||
$table->boolean('is_active')->default(true)->index();
|
||||
|
||||
// Auditoría
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['site_id', 'slug', 'is_active']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('site_id')->references('id')->on('website_sites')->cascadeOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('website_menus');
|
||||
}
|
||||
};
|
@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('website_menu_items', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('menu_id')->index();
|
||||
$table->unsignedSmallInteger('parent_id')->nullable()->index();
|
||||
|
||||
$table->json('title'); // i18n multilanguage
|
||||
$table->string('type', 16)->default('cms_page')->index(); // Enum; cms_page | url | laravel_route | blog_article | Evento Json
|
||||
|
||||
// Construcción de enlace
|
||||
$table->unsignedMediumInteger('linkable_id')->nullable()->index(); // Relación polimórfica con:
|
||||
$table->string('linkable_type')->nullable()->index(); // páginas, entradas, productos, etc.
|
||||
|
||||
$table->string('laravel_route')->nullable()->index();
|
||||
$table->string('url')->nullable()->index();
|
||||
$table->string('method')->nullable();
|
||||
$table->string('target', 16)->nullable(); // Enum _self, _blank, etc.
|
||||
$table->string('js_event')->nullable();
|
||||
|
||||
// UI
|
||||
$table->string('icon')->nullable();
|
||||
$table->string('badge')->nullable();
|
||||
$table->string('badge_color')->nullable();
|
||||
|
||||
// Visibilidad
|
||||
$table->json('roles')->nullable();
|
||||
$table->json('permissions')->nullable();
|
||||
$table->boolean('hide_if_authenticated')->default(false)->index();
|
||||
$table->boolean('hide_if_guest')->default(false)->index();
|
||||
$table->timestamp('visible_from')->nullable();
|
||||
$table->timestamp('visible_until')->nullable();
|
||||
|
||||
$table->unsignedSmallInteger('order')->default(0); // Para ordenar en el menú
|
||||
$table->boolean('is_active')->default(true)->index();
|
||||
|
||||
// Auditoría
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['menu_id', 'is_active']);
|
||||
$table->index(['menu_id', 'parent_id', 'is_active']);
|
||||
$table->index(['linkable_id', 'linkable_type']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('menu_id')->references('id')->on('website_menus')->cascadeOnDelete();
|
||||
$table->foreign('parent_id')->references('id')->on('website_menu_items')->nullOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('website_menu_items');
|
||||
}
|
||||
};
|
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('website_contents', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('site_id')->index();
|
||||
$table->unsignedSmallInteger('seo_profile_id')->nullable()->index();
|
||||
|
||||
// Metadata
|
||||
$table->string('title')->index();
|
||||
$table->string('slug')->unique();
|
||||
$table->string('description');
|
||||
$table->json('keywords')->nullable();
|
||||
|
||||
// Template & Type content
|
||||
$table->string('template')->nullable();
|
||||
$table->string('template_variant')->nullable();
|
||||
$table->string('type', 16)->default('page')->index(); // Enum: Content, Landing, Product, Category Blog, Partial
|
||||
$table->string('render_mode', 16)->default('static');
|
||||
$table->string('block_mode', 16)->default('db');
|
||||
$table->string('source', 16)->default('db');
|
||||
$table->string('render_as')->nullable();
|
||||
|
||||
//canonical url
|
||||
$table->string('canonical_url')->nullable();
|
||||
|
||||
// Content
|
||||
$table->json('content_blocks')->nullable(); // Bloques estructurados
|
||||
$table->json('seo_overrides')->nullable();
|
||||
|
||||
// Control
|
||||
$table->boolean('is_draft')->default(true)->index();
|
||||
$table->boolean('is_sensitive')->default(false)->index(); // Allow dangerous Blade content
|
||||
$table->boolean('is_partial')->default(false)->index();
|
||||
|
||||
// Visibilidad
|
||||
$table->json('roles')->nullable();
|
||||
$table->json('permissions')->nullable();
|
||||
$table->boolean('hide_if_authenticated')->default(false)->index();
|
||||
$table->boolean('hide_if_guest')->default(false)->index();
|
||||
$table->timestamp('visible_from')->nullable();
|
||||
$table->timestamp('visible_until')->nullable();
|
||||
|
||||
// Cache
|
||||
$table->boolean('enable_cache')->default(true)->index();
|
||||
$table->unsignedSmallInteger('cache_ttl')->default(60); // minutos
|
||||
|
||||
// Auditoria
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['site_id', 'type']);
|
||||
$table->index(['site_id', 'type', 'slug']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('site_id')->references('id')->on('website_sites')->cascadeOnDelete();
|
||||
$table->foreign('seo_profile_id')->references('id')->on('website_seo_profiles')->nullOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('website_contents');
|
||||
}
|
||||
};
|
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('website_content_blocks', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('content_id')->index();
|
||||
$table->unsignedSmallInteger('parent_id')->nullable()->index();
|
||||
|
||||
$table->string('slug')->nullable();
|
||||
$table->string('type', 32);
|
||||
$table->string('mode', 16)->default('view');
|
||||
$table->string('view_path')->nullable();
|
||||
$table->string('component_class')->nullable();
|
||||
|
||||
$table->boolean('is_enabled')->default(true);
|
||||
$table->boolean('enable_cache')->default(true);
|
||||
$table->unsignedSmallInteger('cache_ttl')->default(60);
|
||||
|
||||
$table->json('settings')->nullable();
|
||||
$table->json('data')->nullable();
|
||||
$table->unsignedSmallInteger('order')->default(0);
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('content_id')->references('id')->on('website_contents')->cascadeOnDelete();
|
||||
$table->foreign('parent_id')->references('id')->on('website_content_blocks')->nullOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('website_content_blocks');
|
||||
}
|
||||
};
|
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('website_content_versions', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('website_content_id')->index();
|
||||
$table->string('version_label')->nullable();
|
||||
$table->longText('content');
|
||||
$table->json('metadata')->nullable();
|
||||
|
||||
// Auditoria
|
||||
$table->unsignedMediumInteger('created_by')->nullable();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('website_content_id')->references('id')->on('website_contents')->cascadeOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('website_content_versions');
|
||||
}
|
||||
};
|
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('sitemap_profiles', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('site_id')->index(); // Soporte multisite
|
||||
|
||||
$table->string('name'); // Nombre del perfil: 'Productos', 'Páginas CMS'
|
||||
$table->string('slug')->unique(); // Clave técnica
|
||||
|
||||
$table->string('entity_type')->nullable(); // Ej: App\Models\Product
|
||||
$table->string('generator_class')->nullable(); // Clase que implementa SitemapUrlGeneratorInterface
|
||||
|
||||
$table->boolean('is_active')->default(true)->index();
|
||||
// Auditoría
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['site_id', 'slug']);
|
||||
$table->index(['site_id', 'slug', 'is_active']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('site_id')->references('id')->on('website_sites')->cascadeOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('sitemap_profiles');
|
||||
}
|
||||
};
|
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('sitemap_rules', function (Blueprint $table) {
|
||||
$table->mediumIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('sitemap_profile_id')->index();
|
||||
$table->string('rule_type'); // Ej: 'priority_override', 'exclude_flag', etc.
|
||||
$table->json('rule_data'); // JSON con parámetros
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['sitemap_profile_id', 'rule_type']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('sitemap_profile_id')->references('id')->on('sitemap_profiles')->cascadeOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('sitemap_rules');
|
||||
}
|
||||
};
|
@ -12,13 +12,26 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('sitemap_urls', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->mediumIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('sitemap_profile_id')->index();
|
||||
$table->string('url')->unique();
|
||||
$table->enum('changefreq', ['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly'])->default('weekly');
|
||||
|
||||
$table->string('changefreq', 16)->default('weekly'); // Enum
|
||||
$table->decimal('priority', 2, 1)->default(0.5);
|
||||
$table->timestamp('lastmod')->nullable();
|
||||
$table->boolean('is_active')->default(true);
|
||||
|
||||
$table->boolean('is_active')->default(true)->index();
|
||||
$table->json('alternate_locales')->nullable(); // SEO internacional
|
||||
|
||||
// Auditoría
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['sitemap_profile_id', 'is_active']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('sitemap_profile_id')->references('id')->on('sitemap_profiles')->cascadeOnDelete();
|
||||
});
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('sitemap_index_files', function (Blueprint $table) {
|
||||
$table->mediumIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('sitemap_profile_id')->index();
|
||||
$table->string('file_name')->unique();
|
||||
$table->string('url');
|
||||
$table->timestamp('generated_at');
|
||||
|
||||
$table->integer('url_count')->default(0);
|
||||
$table->boolean('is_current')->default(true);
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('sitemap_profile_id')->references('id')->on('sitemap_profiles')->cascadeOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('sitemap_index_files');
|
||||
}
|
||||
};
|
@ -14,13 +14,27 @@ return new class extends Migration
|
||||
Schema::create('faq_categories', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->string('name')->unique();
|
||||
$table->unsignedSmallInteger('site_id')->index(); // Soporte multisite
|
||||
|
||||
$table->string('name')->index();
|
||||
$table->string('icon')->nullable();
|
||||
$table->unsignedInteger('order')->default(0)->index();
|
||||
$table->boolean('is_active')->default(true)->index();
|
||||
|
||||
// Auditoria
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->unique(['name', 'site_id']);
|
||||
$table->index(['name', 'is_active', 'site_id']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('site_id')->references('id')->on('website_sites')->cascadeOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('faqs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('category_id')->nullable()->index();
|
||||
$table->string('question');
|
||||
@ -21,10 +21,18 @@ return new class extends Migration
|
||||
$table->boolean('is_active')->default(true)->index();
|
||||
|
||||
// Auditoria
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['category_id', 'is_active']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('category_id')->references('id')->on('faq_categories')->nullOnDelete();
|
||||
$table->foreign('category_id')->references('id')->on('faq_categories')->restrictOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('blog_categories', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('site_id')->index(); // Soporte multisite
|
||||
|
||||
$table->string('name')->index();
|
||||
$table->string('slug')->index();
|
||||
$table->string('full_slug')->nullable()->index(); // NUEVO: Ruta cacheada
|
||||
|
||||
$table->unsignedSmallInteger('parent_id')->nullable()->index();
|
||||
|
||||
$table->string('icon')->nullable(); // NUEVO: Soporte para icono
|
||||
$table->string('group')->nullable()->index(); // NUEVO: Soporte para agrupación (ej: blog, noticias, promociones)
|
||||
|
||||
|
||||
$table->text('description')->nullable();
|
||||
$table->boolean('is_active')->default(true)->index();
|
||||
|
||||
// Auditoría
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('parent_id')->references('id')->on('blog_categories')->nullOnDelete();
|
||||
|
||||
// Indices
|
||||
$table->index(['name', 'is_active', 'site_id']);
|
||||
$table->unique(['slug', 'site_id']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('site_id')->references('id')->on('website_sites')->cascadeOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('blog_categories');
|
||||
}
|
||||
};
|
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('blog_tags', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('site_id')->index(); // Soporte multisite
|
||||
|
||||
$table->string('name')->index();
|
||||
$table->string('slug')->index();
|
||||
|
||||
$table->boolean('is_active')->default(true)->index();
|
||||
|
||||
// Auditoria
|
||||
$table->unsignedMediumInteger('created_by')->nullable()->index();
|
||||
$table->unsignedMediumInteger('updated_by')->nullable()->index();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->unique(['slug', 'site_id']);
|
||||
$table->index(['name', 'is_active']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('site_id')->references('id')->on('website_sites')->cascadeOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('blog_tags');
|
||||
}
|
||||
};
|
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('blog_articles', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('category_id')->index();
|
||||
|
||||
$table->string('title')->index();
|
||||
$table->string('slug')->index();
|
||||
|
||||
$table->text('excerpt')->nullable();
|
||||
$table->longText('content');
|
||||
$table->json('metadata')->nullable();
|
||||
|
||||
$table->boolean('is_published')->default(false)->index();
|
||||
$table->timestamp('published_at')->nullable()->index();
|
||||
|
||||
$table->unsignedMediumInteger('created_by')->index();
|
||||
$table->unsignedMediumInteger('updated_by')->index();
|
||||
|
||||
// Auditoria
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->unique(['slug', 'category_id']);
|
||||
$table->index(['title', 'is_published']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('category_id')->references('id')->on('blog_categories')->restrictOnDelete();
|
||||
$table->foreign('created_by')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('blog_articles');
|
||||
}
|
||||
};
|
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('blog_article_tag', function (Blueprint $table) {
|
||||
$table->smallIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('blog_article_id')->index();
|
||||
$table->unsignedSmallInteger('blog_tag_id')->index();
|
||||
|
||||
// Auditoria
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['blog_article_id', 'blog_tag_id']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('blog_article_id')->references('id')->on('blog_articles')->cascadeOnDelete();
|
||||
$table->foreign('blog_tag_id')->references('id')->on('blog_tags')->cascadeOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('blog_article_tag');
|
||||
}
|
||||
};
|
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('blog_comments', function (Blueprint $table) {
|
||||
$table->mediumIncrements('id');
|
||||
|
||||
$table->unsignedSmallInteger('blog_article_id')->index();
|
||||
|
||||
$table->unsignedMediumInteger('author_id')->nullable()->index();
|
||||
$table->string('author_name')->index();
|
||||
$table->string('author_email')->index();
|
||||
$table->text('comment');
|
||||
|
||||
$table->boolean('is_approved')->default(false)->index();
|
||||
|
||||
// Auditoria
|
||||
$table->unsignedMediumInteger('updated_by')->index();
|
||||
$table->timestamps();
|
||||
|
||||
// Indices
|
||||
$table->index(['blog_article_id', 'is_approved']);
|
||||
|
||||
// Relaciones
|
||||
$table->foreign('blog_article_id')->references('id')->on('blog_articles')->restrictOnDelete();
|
||||
$table->foreign('author_id')->references('id')->on('users')->restrictOnDelete();
|
||||
$table->foreign('updated_by')->references('id')->on('users')->restrictOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('blog_comments');
|
||||
}
|
||||
};
|
@ -1,23 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('sitemap_configurations', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('route');
|
||||
$table->boolean('include')->default(true);
|
||||
$table->decimal('priority', 2, 1)->default(0.5);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('sitemap_configurations');
|
||||
}
|
||||
};
|
70
database/rbac copy/permissions.json
Normal file
70
database/rbac copy/permissions.json
Normal file
@ -0,0 +1,70 @@
|
||||
[
|
||||
"admin.website-admin.settings.general.view",
|
||||
"admin.website-admin.settings.general.update",
|
||||
"admin.website-admin.settings.social.view",
|
||||
"admin.website-admin.settings.social.update",
|
||||
"admin.website-admin.settings.indexing.view",
|
||||
"admin.website-admin.settings.indexing.update",
|
||||
"admin.website-admin.contact.info.view",
|
||||
"admin.website-admin.contact.info.update",
|
||||
"admin.website-admin.contact.form.view",
|
||||
"admin.website-admin.contact.form.update",
|
||||
"admin.website-admin.analytics.google-analytics.view",
|
||||
"admin.website-admin.analytics.google-analytics.update",
|
||||
"admin.website-admin.analytics.google-tags.view",
|
||||
"admin.website-admin.analytics.google-tags.update",
|
||||
"admin.website-admin.analytics.google-search-console.view",
|
||||
"admin.website-admin.analytics.google-search-console.update",
|
||||
"admin.website-admin.analytics.pixel-meta.view",
|
||||
"admin.website-admin.analytics.pixel-meta.update",
|
||||
"admin.website-admin.comunication.messenger.view",
|
||||
"admin.website-admin.comunication.messenger.update",
|
||||
"admin.website-admin.comunication.whatsapp.view",
|
||||
"admin.website-admin.comunication.whatsapp.update",
|
||||
"admin.website-admin.comunication.tawk-to.view",
|
||||
"admin.website-admin.comunication.tawk-to.update",
|
||||
"admin.website-admin.comunication.twitter.view",
|
||||
"admin.website-admin.comunication.twitter.update",
|
||||
"admin.website-admin.translate.google.view",
|
||||
"admin.website-admin.translate.google.update",
|
||||
"admin.website-admin.content.faq.view",
|
||||
"admin.website-admin.content.faq.update",
|
||||
"admin.website-admin.content.faq.create",
|
||||
"admin.website-admin.content.faq.delete",
|
||||
"admin.website-admin.content.gallery.view",
|
||||
"admin.website-admin.content.gallery.update",
|
||||
"admin.website-admin.content.gallery.create",
|
||||
"admin.website-admin.content.gallery.delete",
|
||||
"admin.website-admin.content.legal.view",
|
||||
"admin.website-admin.content.legal.update",
|
||||
"admin.website-admin.content.legal.create",
|
||||
"admin.website-admin.content.legal.delete",
|
||||
"admin.website-admin.seo.sitemap.view",
|
||||
"admin.website-admin.seo.sitemap.update",
|
||||
"admin.website-admin.seo.jsonld.view",
|
||||
"admin.website-admin.seo.jsonld.update",
|
||||
"admin.website-admin.seo.robots.view",
|
||||
"admin.website-admin.seo.robots.update",
|
||||
"admin.website-admin.seo.manifest.view",
|
||||
"admin.website-admin.seo.manifest.update",
|
||||
"admin.website-admin.seo.canonical.view",
|
||||
"admin.website-admin.seo.canonical.update",
|
||||
"admin.website-admin.seo.social-cards.view",
|
||||
"admin.website-admin.seo.social-cards.update",
|
||||
"admin.website-admin.blog.categories.view",
|
||||
"admin.website-admin.blog.categories.update",
|
||||
"admin.website-admin.blog.categories.create",
|
||||
"admin.website-admin.blog.categories.delete",
|
||||
"admin.website-admin.blog.tags.view",
|
||||
"admin.website-admin.blog.tags.update",
|
||||
"admin.website-admin.blog.tags.create",
|
||||
"admin.website-admin.blog.tags.delete",
|
||||
"admin.website-admin.blog.articles.view",
|
||||
"admin.website-admin.blog.articles.update",
|
||||
"admin.website-admin.blog.articles.create",
|
||||
"admin.website-admin.blog.articles.delete",
|
||||
"admin.website-admin.blog.comments.view",
|
||||
"admin.website-admin.blog.comments.update",
|
||||
"admin.website-admin.blog.comments.create",
|
||||
"admin.website-admin.blog.comments.delete"
|
||||
]
|
177
database/rbac copy/roles.json
Normal file
177
database/rbac copy/roles.json
Normal file
@ -0,0 +1,177 @@
|
||||
{
|
||||
"SuperAdmin" : {
|
||||
"permissions" : [
|
||||
"admin.website-admin.settings.general.view",
|
||||
"admin.website-admin.settings.general.update",
|
||||
"admin.website-admin.settings.social.view",
|
||||
"admin.website-admin.settings.social.update",
|
||||
"admin.website-admin.settings.indexing.view",
|
||||
"admin.website-admin.settings.indexing.update",
|
||||
"admin.website-admin.contact.info.view",
|
||||
"admin.website-admin.contact.info.update",
|
||||
"admin.website-admin.contact.form.view",
|
||||
"admin.website-admin.contact.form.update",
|
||||
"admin.website-admin.analytics.google-analytics.view",
|
||||
"admin.website-admin.analytics.google-analytics.update",
|
||||
"admin.website-admin.analytics.google-tags.view",
|
||||
"admin.website-admin.analytics.google-tags.update",
|
||||
"admin.website-admin.analytics.google-search-console.view",
|
||||
"admin.website-admin.analytics.google-search-console.update",
|
||||
"admin.website-admin.analytics.pixel-meta.view",
|
||||
"admin.website-admin.analytics.pixel-meta.update",
|
||||
"admin.website-admin.comunication.messenger.view",
|
||||
"admin.website-admin.comunication.messenger.update",
|
||||
"admin.website-admin.comunication.whatsapp.view",
|
||||
"admin.website-admin.comunication.whatsapp.update",
|
||||
"admin.website-admin.comunication.tawk-to.view",
|
||||
"admin.website-admin.comunication.tawk-to.update",
|
||||
"admin.website-admin.comunication.twitter.view",
|
||||
"admin.website-admin.comunication.twitter.update",
|
||||
"admin.website-admin.translate.google.view",
|
||||
"admin.website-admin.translate.google.update",
|
||||
"admin.website-admin.content.faq.view",
|
||||
"admin.website-admin.content.faq.update",
|
||||
"admin.website-admin.content.faq.create",
|
||||
"admin.website-admin.content.faq.delete",
|
||||
"admin.website-admin.content.gallery.view",
|
||||
"admin.website-admin.content.gallery.update",
|
||||
"admin.website-admin.content.gallery.create",
|
||||
"admin.website-admin.content.gallery.delete",
|
||||
"admin.website-admin.content.legal.view",
|
||||
"admin.website-admin.content.legal.update",
|
||||
"admin.website-admin.content.legal.create",
|
||||
"admin.website-admin.content.legal.delete",
|
||||
"admin.website-admin.seo.sitemap.view",
|
||||
"admin.website-admin.seo.sitemap.update",
|
||||
"admin.website-admin.seo.jsonld.view",
|
||||
"admin.website-admin.seo.jsonld.update",
|
||||
"admin.website-admin.seo.robots.view",
|
||||
"admin.website-admin.seo.robots.update",
|
||||
"admin.website-admin.seo.manifest.view",
|
||||
"admin.website-admin.seo.manifest.update",
|
||||
"admin.website-admin.seo.canonical.view",
|
||||
"admin.website-admin.seo.canonical.update",
|
||||
"admin.website-admin.seo.social-cards.view",
|
||||
"admin.website-admin.seo.social-cards.update",
|
||||
"admin.website-admin.blog.categories.view",
|
||||
"admin.website-admin.blog.categories.update",
|
||||
"admin.website-admin.blog.categories.create",
|
||||
"admin.website-admin.blog.categories.delete",
|
||||
"admin.website-admin.blog.tags.view",
|
||||
"admin.website-admin.blog.tags.update",
|
||||
"admin.website-admin.blog.tags.create",
|
||||
"admin.website-admin.blog.tags.delete",
|
||||
"admin.website-admin.blog.articles.view",
|
||||
"admin.website-admin.blog.articles.update",
|
||||
"admin.website-admin.blog.articles.create",
|
||||
"admin.website-admin.blog.articles.delete",
|
||||
"admin.website-admin.blog.comments.view",
|
||||
"admin.website-admin.blog.comments.update",
|
||||
"admin.website-admin.blog.comments.create",
|
||||
"admin.website-admin.blog.comments.delete"
|
||||
]
|
||||
},
|
||||
"Admin" : {
|
||||
"permissions" : [
|
||||
"admin.website-admin.settings.general.view",
|
||||
"admin.website-admin.settings.general.update",
|
||||
"admin.website-admin.settings.social.view",
|
||||
"admin.website-admin.settings.social.update",
|
||||
"admin.website-admin.settings.indexing.view",
|
||||
"admin.website-admin.settings.indexing.update",
|
||||
"admin.website-admin.contact.info.view",
|
||||
"admin.website-admin.contact.info.update",
|
||||
"admin.website-admin.contact.form.view",
|
||||
"admin.website-admin.contact.form.update",
|
||||
"admin.website-admin.analytics.google-analytics.view",
|
||||
"admin.website-admin.analytics.google-analytics.update",
|
||||
"admin.website-admin.analytics.google-tags.view",
|
||||
"admin.website-admin.analytics.google-tags.update",
|
||||
"admin.website-admin.analytics.google-search-console.view",
|
||||
"admin.website-admin.analytics.google-search-console.update",
|
||||
"admin.website-admin.analytics.pixel-meta.view",
|
||||
"admin.website-admin.analytics.pixel-meta.update",
|
||||
"admin.website-admin.comunication.messenger.view",
|
||||
"admin.website-admin.comunication.messenger.update",
|
||||
"admin.website-admin.comunication.whatsapp.view",
|
||||
"admin.website-admin.comunication.whatsapp.update",
|
||||
"admin.website-admin.comunication.tawk-to.view",
|
||||
"admin.website-admin.comunication.tawk-to.update",
|
||||
"admin.website-admin.comunication.twitter.view",
|
||||
"admin.website-admin.comunication.twitter.update",
|
||||
"admin.website-admin.translate.google.view",
|
||||
"admin.website-admin.translate.google.update",
|
||||
"admin.website-admin.content.faq.view",
|
||||
"admin.website-admin.content.faq.update",
|
||||
"admin.website-admin.content.faq.create",
|
||||
"admin.website-admin.content.faq.delete",
|
||||
"admin.website-admin.content.gallery.view",
|
||||
"admin.website-admin.content.gallery.update",
|
||||
"admin.website-admin.content.gallery.create",
|
||||
"admin.website-admin.content.gallery.delete",
|
||||
"admin.website-admin.content.legal.view",
|
||||
"admin.website-admin.content.legal.update",
|
||||
"admin.website-admin.content.legal.create",
|
||||
"admin.website-admin.content.legal.delete",
|
||||
"admin.website-admin.seo.sitemap.view",
|
||||
"admin.website-admin.seo.sitemap.update",
|
||||
"admin.website-admin.seo.jsonld.view",
|
||||
"admin.website-admin.seo.jsonld.update",
|
||||
"admin.website-admin.seo.robots.view",
|
||||
"admin.website-admin.seo.robots.update",
|
||||
"admin.website-admin.seo.manifest.view",
|
||||
"admin.website-admin.seo.manifest.update",
|
||||
"admin.website-admin.seo.canonical.view",
|
||||
"admin.website-admin.seo.canonical.update",
|
||||
"admin.website-admin.seo.social-cards.view",
|
||||
"admin.website-admin.seo.social-cards.update",
|
||||
"admin.website-admin.blog.categories.view",
|
||||
"admin.website-admin.blog.categories.update",
|
||||
"admin.website-admin.blog.categories.create",
|
||||
"admin.website-admin.blog.categories.delete",
|
||||
"admin.website-admin.blog.tags.view",
|
||||
"admin.website-admin.blog.tags.update",
|
||||
"admin.website-admin.blog.tags.create",
|
||||
"admin.website-admin.blog.tags.delete",
|
||||
"admin.website-admin.blog.articles.view",
|
||||
"admin.website-admin.blog.articles.update",
|
||||
"admin.website-admin.blog.articles.create",
|
||||
"admin.website-admin.blog.articles.delete",
|
||||
"admin.website-admin.blog.comments.view",
|
||||
"admin.website-admin.blog.comments.update",
|
||||
"admin.website-admin.blog.comments.create",
|
||||
"admin.website-admin.blog.comments.delete"
|
||||
]
|
||||
},
|
||||
"Auditor" : {
|
||||
"permissions" : [
|
||||
"admin.website-admin.settings.general.view",
|
||||
"admin.website-admin.settings.social.view",
|
||||
"admin.website-admin.settings.indexing.view",
|
||||
"admin.website-admin.contact.info.view",
|
||||
"admin.website-admin.contact.form.view",
|
||||
"admin.website-admin.analytics.google-analytics.view",
|
||||
"admin.website-admin.analytics.google-tags.view",
|
||||
"admin.website-admin.analytics.google-search-console.view",
|
||||
"admin.website-admin.analytics.pixel-meta.view",
|
||||
"admin.website-admin.comunication.messenger.view",
|
||||
"admin.website-admin.comunication.whatsapp.view",
|
||||
"admin.website-admin.comunication.tawk-to.view",
|
||||
"admin.website-admin.comunication.twitter.view",
|
||||
"admin.website-admin.translate.google.view",
|
||||
"admin.website-admin.content.faq.view",
|
||||
"admin.website-admin.content.gallery.view",
|
||||
"admin.website-admin.content.legal.view",
|
||||
"admin.website-admin.seo.sitemap.view",
|
||||
"admin.website-admin.seo.jsonld.view",
|
||||
"admin.website-admin.seo.robots.view",
|
||||
"admin.website-admin.seo.manifest.view",
|
||||
"admin.website-admin.seo.canonical.view",
|
||||
"admin.website-admin.seo.social-cards.view",
|
||||
"admin.website-admin.blog.categories.view",
|
||||
"admin.website-admin.blog.tags.view",
|
||||
"admin.website-admin.blog.articles.view",
|
||||
"admin.website-admin.blog.comments.view"
|
||||
]
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user