Si estáis trabajando con sites multi-lenguaje, seguramente querréis disponer de un menú con los distintos idiomas en los que se ofrece el site. Si además, esto es algo que ya dominabais en MOSS 2007, seguramente habréis intentado incluir en vuestra página (seguramente en la Master) el control: VariationsLabelMenu.ascx, que se encuentra en la carpeta:
<Program Files>Common FilesMicrosoft Shared DebugWeb Server Extensions14TemplateControlTemplates
Si lo hacéis, veréis que el listado deseado no aparece por ningún sitio, esto es porque este control trae alguna novedad en la versión 2010. Para empezar, en la versión del 2007, el archivo VariationsLableMenu.ascx, tenía un código similar al siguiente:
1 |
<span style="color: #606060" id="lnum1"> 1:</span> <span style="color: #0000ff"><</span><span style="color: #800000">PublishingWebControls:VariationDataSource</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">="LabelMenuDataSource"</span> |
1 |
<span style="color: #606060" id="lnum2"> 2:</span> <span style="color: #ff0000">LabelMenuConfiguration</span><span style="color: #0000ff">="1"</span> <span style="color: #ff0000">Filter</span><span style="color: #0000ff">=""</span> <span style="color: #ff0000">runat</span><span style="color: #0000ff">="server"</span><span style="color: #0000ff">/></span> |
1 |
<span style="color: #606060" id="lnum3"> 3:</span> |
1 |
<span style="color: #606060" id="lnum4"> 4:</span> <span style="color: #0000ff"><</span><span style="color: #800000">PublishingWebControls:VariationsLabelEcbMenu</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="varlabelmenu1"</span> |
1 |
<span style="color: #606060" id="lnum5"> 5:</span> <span style="color: #ff0000">DataSourceID</span><span style="color: #0000ff">="LabelMenuDataSource"</span> <span style="color: #ff0000">DisplayText</span><span style="color: #0000ff">="Menu"</span> <span style="color: #ff0000">IsCallbackMode</span><span style="color: #0000ff">="true"</span> |
1 |
<span style="color: #606060" id="lnum6"> 6:</span> <span style="color: #ff0000">runat</span><span style="color: #0000ff">="server"</span><span style="color: #0000ff">/></span> |
Sin embargo, en la versión 2010, únicamente define el control “VariationDataSource”, de ahí que al agregarlo en la página no aparezca nada.
El control “VariationsLabelEcbMenu” se ha quedado obsoleto, parece ser que por problemas de rendimiento: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.publishing.webcontrols.variationslabelecbmenu.aspx
Si queremos sacar el listado de variantes, tenemos que tratar directamente contra el DataSource. En este caso hemos utilizado un DataList:
1 |
<span style="color: #606060" id="lnum1"> 1:</span> <span style="color: #0000ff"><</span><span style="color: #800000">asp:DataList</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">="DataList1"</span> <span style="color: #ff0000">Font-Size</span><span style="color: #0000ff">="8pt"</span> <span style="color: #ff0000">RepeatDirection</span><span style="color: #0000ff">="Horizontal"</span> |
1 |
<span style="color: #606060" id="lnum2"> 2:</span> <span style="color: #ff0000">runat</span><span style="color: #0000ff">="server"</span> <span style="color: #ff0000">DataSourceID</span><span style="color: #0000ff">="LabelMenuDataSource"</span> <span style="color: #ff0000">ShowHeader</span><span style="color: #0000ff">="False"</span> |
1 |
<span style="color: #606060" id="lnum3"> 3:</span> <span style="color: #ff0000">ShowFooter</span><span style="color: #0000ff">="False"</span> <span style="color: #ff0000">Font-Bold</span><span style="color: #0000ff">="True"</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum4"> 4:</span> <span style="color: #0000ff"><</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum5"> 5:</span> <span style="color: #0000ff"><</span><span style="color: #800000">a</span> <span style="color: #ff0000">href</span><span style="color: #0000ff">="<%# DataBinder.Eval(Container.DataItem, "</span><span style="color: #ff0000">NavigateUrl</span><span style="color: #0000ff">") %>"</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum6"> 6:</span> <span style="background-color: #ffff00"><%</span><pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #606060" id="lnum1"> 1:</span> # DataBinder.Eval(Container.DataItem, <span style="color: #006080">"DisplayText"</span>) |
%>
1 |
<span style="color: #606060" id="lnum7"> 7:</span> <span style="color: #0000ff"></</span><span style="color: #800000">a</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum8"> 8:</span> <span style="color: #0000ff"></</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum9"> 9:</span> <span style="color: #0000ff"><</span><span style="color: #800000">SeparatorTemplate</span><span style="color: #0000ff">></span> | <span style="color: #0000ff"></</span><span style="color: #800000">SeparatorTemplate</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum10"> 10:</span> <span style="color: #0000ff"></</span><span style="color: #800000">asp:DataList</span><span style="color: #0000ff">></span> |
Ahora bien, metemos ese código directamente en el fichero “VariationsLabelMenu.ascx” ??? Pues yo prefiero crear un ascx personalizado y, o bien lo agrego directamente a la master, o bien hago uso del SharePoint:DelegateControl que viene definido para ese control:
1 |
<span style="color: #606060" id="lnum1"> 1:</span> <span style="color: #0000ff"><</span><span style="color: #800000">SharePoint:DelegateControl</span> <span style="color: #ff0000">runat</span><span style="color: #0000ff">="server"</span> <span style="color: #ff0000">ControlId</span><span style="color: #0000ff">="VariationsFlagControl"</span> <span style="color: #0000ff">/></span> |
La definición del ControlId, la podemos encontrar en el fichero: VariationsFlagControl.xml, que está en:
<Program Files>Common FilesMicrosoft SharedWeb Server Extensions14TEMPLATEFEATURESPublishingVariationsFlagControl.xml
y que tiene el siguiente contenido:
1 |
<span style="color: #606060" id="lnum1"> 1:</span> <span style="color: #008000"><!-- _lcid="1033" _version="14.0.4750" _dal="1" --></span> |
1 |
<span style="color: #606060" id="lnum2"> 2:</span> <span style="color: #008000"><!-- _LocalBinding --></span> |
1 |
<span style="color: #606060" id="lnum3"> 3:</span> <span style="color: #0000ff"><</span><span style="color: #800000">Elements</span> |
1 |
<span style="color: #606060" id="lnum4"> 4:</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://schemas.microsoft.com/sharepoint/"</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum5"> 5:</span> <span style="color: #0000ff"><</span><span style="color: #800000">Control</span> |
1 |
<span style="color: #606060" id="lnum6"> 6:</span> <span style="color: #ff0000">Sequence</span><span style="color: #0000ff">="50"</span> |
1 |
<span style="color: #606060" id="lnum7"> 7:</span> <span style="color: #ff0000">Id</span><span style="color: #0000ff">="GlobalSiteLink0"</span> |
1 |
<span style="color: #606060" id="lnum8"> 8:</span> <span style="color: #ff0000">ControlSrc</span><span style="color: #0000ff">="~/_controltemplates/VariationsLabelMenu.ascx"</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum9"> 9:</span> <span style="color: #0000ff"></</span><span style="color: #800000">Control</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum10"> 10:</span> <span style="color: #0000ff"><</span><span style="color: #800000">Control</span> |
1 |
<span style="color: #606060" id="lnum11"> 11:</span> <span style="color: #ff0000">Sequence</span><span style="color: #0000ff">="50"</span> |
1 |
<span style="color: #606060" id="lnum12"> 12:</span> <span style="color: #ff0000">Id</span><span style="color: #0000ff">="VariationsFlagControl"</span> |
1 |
<span style="color: #606060" id="lnum13"> 13:</span> <span style="color: #ff0000">ControlSrc</span><span style="color: #0000ff">="~/_controltemplates/VariationsLabelMenu.ascx"</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum14"> 14:</span> <span style="color: #0000ff"></</span><span style="color: #800000">Control</span><span style="color: #0000ff">></span> |
1 |
<span style="color: #606060" id="lnum15"> 15:</span> <span style="color: #0000ff"></</span><span style="color: #800000">Elements</span><span style="color: #0000ff">></span> |
Para apuntarlo a nuestro nuevo ascx, basta con cambiar al ControlSrc del Id=VariationsFlagControl.
Siguiendo cualquiera de los 2 mecanismos, lo que obtenemos finalmente es nuestro menú de los idiomas (variantes) disponibles, que al pintarse desde un Repeater o un DataList, podemos personalizarlos como queramos!
Para acabar, cuando se implementa un portal multi-lingüe, siempre aparece la pregunta de cómo debe comportarse cuando el usuario cambia de idioma. Debe ir a la home de ese idioma? debe cambiar el idioma pero manteniendo la página en la que estábamos?… pues bien, podemos lograr cualquiera de las 2 cosas con tan sólo cambiar la propiedad “LabelMenuConfiguration” del control VariationDataSource. Los valores disponibles y su funcionamiento lo tenéis en el siguiente enlace: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.publishing.webcontrols.variationdatasource.labelmenuconfiguration.aspx
Os dejo algunas de referencias que me han sido de ayuda para entender este tema:
- Variation Label Menu 2010: http://www.2at.nl/blog/archive/2010/06/14/Variation%20Label%20Menu%202010.aspx
- How to: Customize the Variations Label Control Logic: http://msdn.microsoft.com/en-us/library/ms551625.aspx
- Variations Label Menu en MOSS 2007: http://www.2at.nl/blog/archive/2006/09/18/Variations_Label_Menu.aspx
Para acabar, quiero agradecer la ayuda de Juan Carlos González y de mi compañero Paco Martí.
Espero que os sea de utilidad.
Saludosss!
29 agosto, 2010 at 7:31 pm
Excelente post Luis!
Un saludo
JC’s
29 agosto, 2010 at 8:10 pm
Muuuchas gracias!!
Un saludo.