{% extends 'base.html.twig' %} {% block title %}Mapa de parcelas – HuertosCastellon.es{% endblock %} {% block meta_description %}Explora el mapa interactivo de parcelas de huertos urbanos en Castellón. Filtra por tamaño y precio, elige la tuya y resérvala en segundos.{% endblock %} {% block stylesheets %} {% endblock %} {% block body %} {# ═══════════════════════════════════════════════════════════════════════ CABECERA ═══════════════════════════════════════════════════════════════════════ #}

Mapa de parcelas

Haz clic en una parcela verde del mapa para ver sus detalles y reservarla.

{# Leyenda + stats #}
Libre Pendiente Ocupada
{# ══════════════════════════════════════════════════════════════════ FILTROS ═══════════════════════════════════════════════════════════════════ #}

{% if parcelas is empty %}
🌱

Todavía no hay parcelas configuradas.

{% else %} {# ══════════════════════════════════════════════════════════════════ MAPA SVG — diseño premium ═══════════════════════════════════════════════════════════════════ #}
{%- set cell = 92 -%} {%- set gap = 18 -%} {%- set eTop = 80 -%} {%- set eBot = 70 -%} {%- set svgW = gridCols * (cell + gap) + gap -%} {%- set svgH = gridRows * (cell + gap) + gap + eTop + eBot -%} {%- set gY = eTop -%} {%- set gH = gridRows * (cell + gap) + gap -%} {% set numPostes = ((svgW - 16) / 70)|round %} {% for pi in range(1, numPostes) %} {%- set px = 8 + pi * ((svgW - 16) / numPostes)|round -%} {% endfor %} {%- set shedX = 10 -%} {%- set shedW = 86 -%} {%- set shedH = 62 -%} ALMACÉN HERR. HUERTOS URBANOS CASTELLÓN PLANO INTERACTIVO DE PARCELAS {%- set compX = svgW - 96 -%} {%- set compW = 86 -%} ZONA COMPOSTAJE {% if gridRows >= 2 %} {%- set pipeY = eTop + gap + cell + (gap / 2)|round -%} TUBERÍA PRINCIPAL {% for c in range(0, gridCols - 1) %} {%- set tapXc = (c + 1) * (cell + gap) + (gap / 2)|round -%} 💧 {% endfor %} {% endif %} {%- set sideTapY = eTop + (gH / 2)|round -%} 💧 💧 {%- set gateTop = gY + gH - 14 -%} {% for bi in range(-3, 4) %} {% if bi != 0 %} {% endif %} {% endfor %} ENTRADA PRINCIPAL {%- set cX = svgW - 30 -%} {%- set cY = gY + gH - 30 -%} N {% for p in parcelas %} {%- set x = p.posX * (cell + gap) + gap -%} {%- set y = eTop + p.posY * (cell + gap) + gap -%} {%- set w = p.ancho * (cell + gap) - gap -%} {%- set h = p.alto * (cell + gap) - gap -%} {%- set cx = x + w / 2 -%} {%- set cy = y + h / 2 -%} {%- set esPendiente = p.id in parcelasPendientes -%} {# Colores por estado y tamaño #} {% if p.estado.value == 'ocupada' %} {%- set frameC = '#37474f' -%} {%- set surfC = '#607d8b' -%} {%- set glowC = 'rgba(84,110,122,.3)' -%} {%- set rowAlpha = 'rgba(255,255,255,.1)' -%} {%- set estadoFiltro = 'ocupada' -%} {% elseif esPendiente %} {%- set frameC = '#7c3d12' -%} {%- set surfC = '#d4742a' -%} {%- set glowC = 'rgba(212,116,42,.3)' -%} {%- set rowAlpha = 'rgba(255,255,255,.14)' -%} {%- set estadoFiltro = 'pendiente' -%} {% else %} {% if p.tamano <= 15 %} {%- set surfC = '#52b788' -%} {% elseif p.tamano <= 30 %} {%- set surfC = '#40916c' -%} {% else %} {%- set surfC = '#2d6a4f' -%} {% endif %} {%- set frameC = '#1b4332' -%} {%- set glowC = 'rgba(64,145,108,.35)' -%} {%- set rowAlpha = 'rgba(255,255,255,.16)' -%} {%- set estadoFiltro = 'libre' -%} {% endif %} {%- set imagenesJson = [] -%} {%- for img in p.imagenes -%} {%- set imagenesJson = imagenesJson|merge([{'src': asset('uploads/parcelas/' ~ img.nombreArchivo)}]) -%} {%- endfor -%} P{{ p.numero }} {{ p.tamano }} m² {% if p.estado.value == 'libre' and not esPendiente %} LIBRE {{ p.precio }}€ {% elseif esPendiente %} PENDIENTE {% else %} OCUPADA 🔒 {% endif %} {% endfor %}
{# ══════════════════════════════════════════════════════════════════ TARJETAS PARCELAS LIBRES ═══════════════════════════════════════════════════════════════════ #}

Parcelas disponibles

{% set hayLibres = false %} {% for p in parcelas %} {% if p.isLibre() %} {% set hayLibres = true %}
{% if p.imagenes|length > 0 %} Parcela {{ p.numero }} — huerto urbano Castellón {% else %}
🌿
{% endif %}
Parcela nº {{ p.numero }}
{% if p.tamano <= 15 %}Pequeña{% elseif p.tamano <= 30 %}Mediana{% else %}Grande{% endif %} · {{ p.tamano }} m²
Libre
{{ p.precio }}€/mes
{{ p.tamano }} m² Agua incluida {% if p.descripcion %} Con descripción {% endif %}
Reservar esta parcela
{% endif %} {% endfor %} {% if not hayLibres %}
🔒

No hay parcelas libres en este momento.

Vuelve pronto o contáctanos para lista de espera.

{% endif %}
{% endif %}
{# ═══════════════════════════════════════════════════════════════════════ MODAL ═══════════════════════════════════════════════════════════════════════ #} {% endblock %} {% block javascripts %} {% endblock %}