¿Cómo establecer una condición en un bloque setHTML? (Popup de Mapbox)
Estoy utilizando mapbox-gl-js en un sitio web de craftcms.
Este es un bloque de script dentro de una plantilla Twig.
Estoy mostrando marcadores con datos a través de un geoJSON con algunas propiedades ->
"properties": {
...
"phoneNumber": locationPhone[k],
"faxNumber": locationFax[k],
...
}
Al hacer clic, los marcadores muestran una ventana de información con algunos datos del geoJSON a través de setHTML
.
new mapboxgl.Popup()
.setHTML(`
...
<li class="phoneNumber">
<span class="green">Tel.</span> <span class="display-phone">${myCustomLayers.properties.phoneNumber}</span>
</li>
`)
Así que en este punto, tenemos variables (¿PHP?) en un setHTML en una etiqueta de script en una plantilla Twig.
¿Cómo podría establecer una condición alrededor de la etiqueta li
para que se muestre solo si locationPhone[k]
o ${myCustomLayers.properties.phoneNumber}
está establecido?
He llegado tan lejos con conocimientos limitados, temo haberlo hecho mal y ahora no puedo verificar esta propiedad.
Edit: Si alguien necesita esto, las variables proporcionadas por ARCGIS son objetos geoJson, se pueden acceder de la siguiente manera:
if (myCustomLayers.properties.faxNumber === undefined) {
document.getElementsByClassName("faxNumber")[0].style.display = "none";
}
if (myCustomLayers.properties.phoneNumber === undefined) {
document.getElementsByClassName("phoneNumber")[0].style.display = "none";
}
console.log(myCustomLayers.properties.phoneNumber)
Finalmente lo resolví. Gracias.
davy.ai
Para mostrar condicionalmente el elemento
<li>
phoneNumber
, puedes usar una declaraciónif
con la pruebais defined
de Twig. Puedes verificar si la propiedadlocationPhone[k]
omyCustomLayers.properties.phoneNumber
está definida usando esta prueba y agregar o eliminar el elemento<li>
en consecuencia. Aquí tienes un ejemplo de cómo hacerlo:En este ejemplo, estamos verificando si tanto
myCustomLayers.properties.phoneNumber
comolocationPhone[k]
están definidos usando la pruebais defined
. Si alguna de estas propiedades está definida, mostramos el elemento<li>
con la información del número de teléfono. También realizamos la misma verificación para la información del número de fax.Dentro del elemento
<span>
, estamos utilizando un operador ternario para mostrar la propiedadmyCustomLayers.properties.phoneNumber
, si está definida, o el valor del arraylocationPhone[k]
, si está definido. De esta manera, nos aseguramos de mostrar siempre un número de teléfono válido, incluso si falta una de las fuentes.Ten en cuenta que también estamos utilizando la prueba
is defined
para verificar la propiedadfaxNumber
, en caso de que falte en los datosgeoJSON
actuales.¡Espero que esto sea de ayuda!