Flag of Ukraine
SymfonyCasts stands united with the people of Ukraine

Plantilla de elementos Contentful

Video not working?

It looks like your browser may not support the H264 codec. If you're using Linux, try a different browser or try installing the gstreamer0.10-ffmpeg gstreamer0.10-plugins-good packages.

Thanks! This saves us from needing to use Flash or encode videos in multiple formats. And that let's us get back to making more videos :). But as always, please feel free to message us.

¡Nuestra plantilla "ítem" para habilidades ya se está utilizando! Así que, ¡vamos a terminarla!

Ya sabemos qué aspecto queremos que tengan las habilidades... así que vamos a robarlo de templates/main/homepage.html.twig. Busca el bloque featured_skills, copia el aspecto de una de esas habilidades y pégalo en skill.html.twig. Añadamos también dump(item.object) en la parte superior. Ya hemos creado antes una plantilla de artículo, así que sabemos que item.object debería darnos el "objeto" subyacente que representa esta entrada de Contentful.

Si nos dirigimos y actualizamos... ¡genial! Esto vuelca un objeto ContentfulEntry. Y, aunque no puedas verlo desde aquí, esta clase tiene un método get() que podemos utilizar para leer cualquiera de los datos subyacentes de Contentful.

Para las habilidades, si escarbamos un poco... tenemos campos como title y shortDescription. ¡Usémoslos! Por ejemplo, en el <h3>, digamos {{ item.object.get('title') }}. Y... ¡sí! Eso renderiza el título.

Para el <img src="">, sustituye lo de asset() por item.object.get('image'), seguido de .file.url, que es específico de Contentful. Rellena también el atributo altcon item.object.get('title').

Lo último que tenemos que actualizar es la URL. Pero Si hubiéramos creado una página de "demostración de habilidades" en Symfony, ¡podríamos utilizar la función de ruta de Twig y enlazar a esa ruta! Sin embargo, cada página de habilidad se crea en realidad a través de una ruta dinámica gracias al bundle Contentful. Y, para crear esas rutas, utiliza el sistema de rutas CMF.

Así que, para enlazar, tenemos que utilizar ese sistema. Por ejemplo, path('cmf_routing_object') y pasar _route_object a item.object.

Si estuvieras utilizando Sylius o Ibexa CMS, utilizarías alguna función de su sistema para crear este enlace: esto es específico del sistema de enrutamiento CMF.

Si nos dirigimos a él y lo probamos... ¡sí! Y si hacemos clic en él... ¡doble sí!

Celebrémoslo eliminando el dump()... y borrando el bloque featured_skillsde nuestra plantilla de página de inicio. Ya no lo necesitaremos. Incluso podemos rehacer este <h2> dentro del administrador de diseños. Hagámoslo: añade un bloque Título llamado "Habilidades destacadas", hazlo "Título 2"... y dale la misma clase CSS:text-center mb-4.

La Rejilla ya está en un contenedor... pero queremos todo esto en un contenedor. Así que añade una Columna, envuélvela en un Contenedor, mueve los bloques Rejilla y Título dentro de ella... entonces ya no necesitaremos un Contenedor justo ahí. Elimina el bloque "Características Habilidades"... y finalmente pulsa "Publicar y continuar editando". Mientras esperamos, elimina también ese bloque de la plantilla Twig.

Y ahora... ¡sí! ¡El aspecto es perfecto!

La vista de elementos publicitarios

Vale, ya que estamos hablando de vistas de elementos, vamos a personalizar la plantilla de elementos para nuestro otro modelo de contenido dentro de Contentful: Publicidad. Sólo vamos a renderizarlo en un lugar, en una página específica de habilidades justo... aquí. Vamos a comprobarlo.

Publica este diseño... y luego edita el diseño individual de la habilidad. Antes hemos utilizado el bloque Campo de entrada Contentful para mostrar el campo advertisements, que es una "entidad referenciada". Sí, si modificas una habilidad en Contentful, abajo en la parte inferior, el campo "Anuncio" te permite elegir entre los Anuncios de nuestro sistema.

Haz clic en el icono Twig de la barra de herramientas de depuración web... busca "elemento", y desplázate hacia abajo.. No es ninguna sorpresa: está utilizando la plantilla estándar "item" de Contentful. Y, buena noticia, ya sabemos cómo anularla.

Ve a nuestra configuración, copia la sección contentful_entry/skill y pégala a continuación. A continuación, sustituye skill por ad para el nombre de la sección, template y, por último, establece content_type en advertisement... porque ése es el nombre interno de ese tipo en Contentful.

¡Vale! Vamos a añadir esa plantilla. En contentful_entry, crea un nuevo archivo llamadoad.html.twig... y luego simplemente añade algo de texto: Advertisement.

Momento de la verdad. Vuelve, actualiza... ¡ya lo tenemos! ¡Ha sido fácil!

Para el contenido real de la plantilla, simplemente pegaré algo. Una vez más, utilizaremositem.object.get() para leer el campo url. También hay un campo image y un camposhortText. Y ahora... ¡ya lo tenemos!

Lo siguiente: ¿Qué pasaría si quisiéramos crear una Cuadrícula de elementos en nuestro sitio, pero hacer que esa única Cuadrícula tuviera un aspecto diferente al de todas las demás cuadrículas del sitio? Podemos hacerlo creando una "vista de bloque" adicional para un bloque existente.

Leave a comment!

0
Login or Register to join the conversation
Cat in space

"Houston: no signs of life"
Start the conversation!

What PHP libraries does this tutorial use?

// composer.json
{
    "require": {
        "php": ">=8.1.0",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "babdev/pagerfanta-bundle": "^3.7", // v3.7.0
        "doctrine/doctrine-bundle": "^2.7", // 2.7.0
        "doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.2
        "doctrine/orm": "^2.13", // 2.13.3
        "easycorp/easyadmin-bundle": "^4.4", // v4.4.1
        "netgen/layouts-contentful": "^1.3", // 1.3.2
        "netgen/layouts-standard": "^1.3", // 1.3.1
        "pagerfanta/doctrine-orm-adapter": "^3.6",
        "sensio/framework-extra-bundle": "^6.2", // v6.2.8
        "stof/doctrine-extensions-bundle": "^1.7", // v1.7.0
        "symfony/console": "5.4.*", // v5.4.14
        "symfony/dotenv": "5.4.*", // v5.4.5
        "symfony/flex": "^1.17|^2", // v2.2.3
        "symfony/framework-bundle": "5.4.*", // v5.4.14
        "symfony/monolog-bundle": "^3.0", // v3.8.0
        "symfony/proxy-manager-bridge": "5.4.*", // v5.4.6
        "symfony/runtime": "5.4.*", // v5.4.11
        "symfony/security-bundle": "5.4.*", // v5.4.11
        "symfony/twig-bundle": "5.4.*", // v5.4.8
        "symfony/ux-live-component": "^2.x-dev", // 2.x-dev
        "symfony/ux-twig-component": "^2.x-dev", // 2.x-dev
        "symfony/validator": "5.4.*", // v5.4.14
        "symfony/webpack-encore-bundle": "^1.15", // v1.16.0
        "symfony/yaml": "5.4.*", // v5.4.14
        "twig/extra-bundle": "^2.12|^3.0", // v3.4.0
        "twig/twig": "^2.12|^3.0" // v3.4.3
    },
    "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.2
        "symfony/debug-bundle": "5.4.*", // v5.4.11
        "symfony/maker-bundle": "^1.47", // v1.47.0
        "symfony/stopwatch": "5.4.*", // v5.4.13
        "symfony/web-profiler-bundle": "5.4.*", // v5.4.14
        "zenstruck/foundry": "^1.22" // v1.22.1
    }
}
userVoice