Construir una miga de pan en Typo3

En mi trabajo con la página web de Activa Sistemas me he encontrado con varios desafíos que he tenido que ir resolviendo tras algunas consultas en foros sobre TYPO3. El problema es que la mejor información al respecto suelo encontrarla en sitios en alemán, lengua que no conozco en absoluto. Es por ello que trataré de reunir todas mis experiencias y explicar diversas soluciones que he ido adaptando a las necesidades de nuestra web.

La que ahora me ocupa trata sobre la creación de una miga de pan (breadcrumb en inglés), o hilo de Ariadna como también se le conoce. Una miga de pan en una página web es una barra de navegación que indica la ruta seguida por el usuario desde la página inicial hasta la página abierta actualmente y que permite volver rápidamente a cualquier página de nivel superior sin pasar necesariamente por el menú.

Navegando por diversas webs y foros podemos encontrar muchas formas de crear una miga de pan en TYPO3, por ejemplo con el código siguiente:

temp.migadepan = HMENU
temp.migadepan {
  special = rootline
  special.range = 0|8
  includeNotInMenu = 1
  1 = TMENU
  1 {
    NO.linkWrap = | >  |*||*| |
    NO.stdWrap.htmlSpecialChars = 1
    NO.ATagTitle.field = abstract // description // title
    CUR = 1
    CUR.doNotLinkIt = 1
  }
}

Y luego dentro de la etiqueta page.marks:

BREADCRUMB = COA
BREADCRUMB {
  10 < temp.migadepan
}

No me entretendré mucho en explicar este código, pues es uno de los que más fácilmente se pueden encontrar. Los apartados más importantes son:
special.range = 0|8   # con esto introducimos en la miga de pan cualquier nivel de submenús.
includeNotInMenu = 1  # esta línea sirve para agregar en la miga de pan las páginas que no aparecen en el menú (como el Mapa Web en www.activasistemas.com)
NO.linkWrap = | >&nbsp; |*||*| |  # este código es para mostrar las entradas en la miga de pan separadas por un «>» (símbolo mayor que)
CUR.doNotLinkIt = 1  # con esta línea conseguimos que la página actual aparezca en la miga de pan sin enlace.

Con este código, la miga de pan aparecerá en el lugar donde en la plantilla hayamos puesto la etiqueta ###BREADCRUMB###

El problema de este sencillo hilo de Ariadna es que, cuando entremos en una noticia creada con la extensión tt_news, en la miga de pan aparecerá como último nivel el nombre de la página que utiliza tt_news como SinglePID («noticia» en el caso de la web de Activa Sistemas). Si queremos que en lugar de ello aparezca el título de la noticia, debemos realizar un pequeño cambio en el código anterior y añadir algunas líneas más:

includeNotInMenu = 0   # quitamos de la miga de pan las páginas que no se encuentran en el menú.

Y dentro de la etiqueta page.marks escribimos lo siguiente:

BREADCRUMB = COA
BREADCRUMB {
  10 < temp.migadepan
  20 = RECORDS
  20 {
    dontCheckPid = 1
    tables = tt_news
    source.data = GPvar:tx_ttnews|tt_news
    conf.tt_news = TEXT
    conf.tt_news.field = title
    stdWrap {
      wrap = &nbsp;>&nbsp; |
      required = 1
    }
  }
}

Con todo este código le estamos diciendo a TypoScript que cuando exista (required = 1), tome el título de la noticia de la tabla tx_ttnews y lo pinte en nuestra miga de pan.

¿Hemos terminado? Efectivamente no. Algunos se habrán percatado del ejemplo que puse anteriormente para explicar la línea includeNotInMenu = 1. Con estos cambios ahora aparecen los títulos de las noticias, pero el resto de páginas que no se encuentran en el menú no apareceran (recordad el ejemplo del mapa web de Activa Sistemas).

La solución a este problema me llevó un buen rato y un buen quebradero de cabeza, pero al final encontré la respuesta en algo tan sencillo como una condición (para aclararnos, un «IF … ELSE»). Básicamente se trata de decirle a TypoScript que cuando esté dentro de las páginas de las noticias tome el valor includeNotInMenu = 0 y en el resto de páginas lo ponga a 1. Pero ¡ojo!, TypoScript no acepta condicionales dentro de llaves («{ }»), así que hay que repetir algo de código para que la condición funcione correctamente. Finalmente, nuestro código queda así:

# Supongamos que el PID de la página principal de tt_news es 164
[PIDinRootline = 164]
temp.migadepan = HMENU
temp.migadepan {
  special = rootline
  special.range = 0|8
  includeNotInMenu = 0
  1 = TMENU
  1 {
    NO.linkWrap = | >&nbsp; |*||*| |
    NO.stdWrap.htmlSpecialChars = 1
    NO.ATagTitle.field = abstract // description // title
    CUR = 1
    CUR.doNotLinkIt = 1
  }
}
[else]
temp.migadepan = HMENU
temp.migadepan {
  special = rootline
  special.range = 0|8
  includeNotInMenu = 1
  1 = TMENU
  1 {
    NO.linkWrap = | >&nbsp; |*||*| |
    NO.stdWrap.htmlSpecialChars = 1
    NO.ATagTitle.field = abstract // description // title
    CUR = 1
    CUR.doNotLinkIt = 1
  }
}
[end]

Y hasta aquí mi primer post sobre TYPO3 y TypoScript, espero que con este código os haya ayudado. Puede que algunos lectores más avanzados que yo conozcan una solución mucho más fácil y sencilla, en ese caso desde Activa Sistemas invitamos a que compartan ese conocimiento con todo el mundo: no podemos defender el Software Libre sin una política clara de Conocimiento Libre.

[DKB url=»http://www.activasistemas.com/Desarrollo-web.81.0.html» text=»Desarrollo web avanzado» desc=»
Conozca cómo aplicar la tecnología web de la forma más eficiente posible en su empresa» title=»Desarrollo web avanzado» type=»large» style=»stitched» color=»red» height=»» width=»» opennewwindow=»yes» nofollow=»yes»]