Publicador de contenidos

Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> nivelist  [in template "20100#20136#422041" at line 178, column 36]

----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #list nivelist as niveL  [in template "20100#20136#422041" at line 178, column 29]
----
1<style type="text/css"> 
2    .searchTemplate .searchTitle{ 
3        padding: 20px 0px; 
4        background: #f2f2f2; 
5        text-align: center; 
6
7    .searchTemplate .searchTitle h4{ 
8        font-style: italic; 
9        font-weight: 600; 
10        color: #3d3b41; 
11        width: 100% 
12
13    @media (min-width: 768px){ 
14        .searchTemplate .formSearch{ 
15            padding: 30px 50px; 
16            background-color: #f8f8f8; 
17            width: 100%; 
18
19
20    @media (max-width: 767px){ 
21        .searchTemplate .formSearch{ 
22            padding: 30px 30px; 
23            background-color: #f8f8f8; 
24            width: 100%; 
25
26
27    .searchTemplate .formSearch form{ 
28        width: 100%; 
29
30    .searchTemplate .formSearch .searchCont{ 
31        display: flex; 
32        align-items: center; 
33        padding: 15px 0px; 
34
35    .searchTemplate .formSearch .searchCont label{ 
36        font-weight: 600; 
37        float: left; 
38        width: 120px; 
39        text-align: right; 
40        padding: 0px 10px; 
41
42    .searchTemplate .formSearch .radioSearch span{ 
43        font-weight: 600; 
44        height: 60px; 
45        width: 100px; 
46        display: block; 
47        float: left; 
48        padding-right: 15px; 
49        text-align: right; 
50
51    .searchTemplate .formSearch .radioSearch label{ 
52        max-width: 150px; 
53
54    .searchTemplate .formSearch .radioSede #sede2{ 
55        display: none; 
56
57    .searchTemplate .formSearch button { 
58        background-color: #ed6b00; 
59        border-color: #ed6b00; 
60        color: #fff; 
61        display: inline-block; 
62        font-weight: 600; 
63        text-align: center; 
64        white-space: nowrap; 
65        vertical-align: middle; 
66        user-select: none; 
67        border: 0px solid transparent; 
68        padding: .375rem .75rem; 
69        font-size: 1.2rem; 
70        line-height: 1.5; 
71        border-radius: .0px; 
72        float: right; 
73
74 
75    .searchTemplate .formSearch button#limpiar{ 
76        margin-left: 20px; 
77
78 
79    .searchTemplate .formSearch input[type=text], .searchTemplate .formSearch select{ 
80        width: 100%; 
81        float: left; 
82        display: block; 
83        padding: .375rem .75rem; 
84        font-size: 1rem; 
85        line-height: 1.5; 
86        color: #495057; 
87        background-color: #fff; 
88        background-clip: padding-box; 
89        border: 2px solid #c2c1c2; 
90        border-radius: 0rem; 
91
92    .searchTemplate .formSearch #facultad{ 
93 
94
95    .searchTemplate .formSearch #nivel{ 
96 
97
98    .searchTemplate #itemContainer{ 
99        width: 100%; 
100
101    .searchTemplate .informacion-pregrado{ 
102        padding: 25px; 
103        border-bottom: 2px dotted #979797; 
104
105    .searchTemplate .informacion-pregrado .col-md-4{ 
106        display: flex; 
107        align-items: center; 
108
109    .searchTemplate .informacion-pregrado .verprograma{ 
110        background-color: #0056b3; 
111        color: #fff; 
112        display: inline-block; 
113        text-decoration: none; 
114        font-weight: 600; 
115        text-align: center; 
116        white-space: nowrap; 
117        vertical-align: middle; 
118        padding: .375rem .75rem; 
119        font-size: 1.2rem; 
120        line-height: 1.5; 
121        border-radius: 5px; 
122
123</style> 
124<#if entries?has_content> 
125    <#list entries as entry> 
126        <#assign renderer = entry.getAssetRenderer() /> 
127        <#assign className = renderer.getClassName() /> 
128        <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry) /> 
129        <#if assetLinkBehavior != "showFullContent"> 
130            <#assign viewURL=renderer.getURLViewInContext(renderRequest, renderResponse, viewURL) /> 
131        </#if> 
132 
133        <#assign docXml=saxReaderUtil.read(renderer.getArticle().getContent()) /> 
134 
135        <#assign struct=renderer.getArticle().getDDMStructure() /> 
136        <#assign nodos=struct.getDefinition() /> 
137 
138        <#assign json=nodos?eval /> 
139        <#assign fields=json.fields /> 
140 
141        <#list fields as field> 
142            <#if field.options??> 
143                <#if field?index == 1> 
144                    <#assign faculist = field.options> 
145                </#if> 
146                <#if field?index == 2> 
147                    <#assign nivelist = field.options> 
148                </#if> 
149                <#if field?index == 4> 
150                    <#assign modalist = field.options> 
151                </#if> 
152                <#if field?index == 5> 
153                    <#assign jornlist = field.options> 
154                </#if> 
155                <#if field?index == 7> 
156                    <#assign sedelist = field.options> 
157                </#if> 
158            </#if> 
159        </#list> 
160    </#list> 
161</#if> 
162<div class="searchTemplate"> 
163    <div class="searchTitle row" style="margin-left: 0px; margin-right: 0px;"> 
164        <h4>Encuentre su programa de interés</h4> 
165    </div> 
166    <div class="row" style="margin-left: 0px; margin-right: 0px;"> 
167        <div class="formSearch"> 
168            <form id=""> 
169                <div class="row" style="margin-left: 0px; margin-right: 0px;"> 
170                    <div class="col-md-8 searchCont"> 
171                        <label for="search">Programa</label> 
172                        <input type="text" id="search" placeholder="Ejemplo: Biología aplicada"> 
173                    </div> 
174                    <div class="col-md-4 searchCont"> 
175                        <label for="nivel-filtro" >Nivel</label> 
176                        <select id="nivel-filtro"> 
177                            <option value="0" selected></option> 
178                            <#list nivelist as niveL> 
179                                <option value="${niveL.value}">${niveL.value}</option> 
180                            </#list> 
181                        </select> 
182                    </div> 
183                </div> 
184                <div class="row" style="margin-left: 0px; margin-right: 0px;"> 
185                    <div class="col-md-12 searchCont"> 
186                        <label for="facultad-filtro">Facultad</label> 
187                        <select id="facultad-filtro"> 
188                            <option value="0" selected></option> 
189                            <#list faculist as facuL> 
190                                <option value="${facuL.value}">${facuL.value}</option> 
191                            </#list> 
192                        </select> 
193                    </div> 
194                </div> 
195                <div class="row" style="margin-left: 0px; margin-right: 0px;"> 
196                    <div class="col-md-4 radioSearch radioSede"> 
197                        <span>Sede</span> 
198                        <#list sedelist as sedeL> 
199                            <label id="sede${sedeL?index}"><input type="radio" name="sede-filtro" value="${sedeL.value}">${sedeL.value?chop_linebreak}</input></label><br> 
200                        </#list> 
201                    </div> 
202                    <div class="col-md-4 radioSearch"> 
203                        <span>Jornada</span> 
204                        <#list jornlist as jornL> 
205                            <label><input type="radio" name="jorn-filtro" value="${jornL.value}"> 
206                            ${jornL.value}</input></label><br> 
207                        </#list> 
208                    </div> 
209                                   
210                </div> 
211                <button id="limpiar" onclick="clearFilters(); return false;">Limpiar</button> 
212                <button id="buscar" onclick="updateFilters(); return false;">Buscar</button> 
213            </form> 
214        </div> 
215    </div> 
216    <div class="row list" style="margin-left: 0px; margin-right: 0px;"> 
217            <ul id="itemContainer"> 
218                <#if entries?has_content> 
219                    <#list entries as entry> 
220                        <#assign renderer = entry.getAssetRenderer() /> 
221                        <#assign className = renderer.getClassName() /> 
222                        <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry) /> 
223                        <#if assetLinkBehavior != "showFullContent"> 
224                            <#assign viewURL=renderer.getURLViewInContext(renderRequest, renderResponse, viewURL) /> 
225                        </#if> 
226                        <li> 
227                            <#assign docXml=saxReaderUtil.read(renderer.getArticle().getContent()) /> 
228 
229                                <#assign matricula=docXml.valueOf("//dynamic-element[@name='Textobovx']/dynamic-content/text()") /> 
230 
231                                <#assign modalidad=docXml.valueOf("//dynamic-element[@name='Modalidad']/dynamic-content/text()") /> 
232 
233                                <#assign duracion=docXml.valueOf("//dynamic-element[@name='Texto3hhx']/dynamic-content/text()") /> 
234 
235                                <#assign sede=docXml.selectNodes("//dynamic-element[@name='Sede']") /> 
236 
237                                <#assign jornada=docXml.valueOf("//dynamic-element[@name='Jornada']/dynamic-content") /> 
238 
239                                <#assign nivel=docXml.valueOf("//dynamic-element[@name='Nivel']/dynamic-content/text()") /> 
240 
241                                <#assign facultad=docXml.valueOf("//dynamic-element[@name='Facultad']/dynamic-content/text()") /> 
242 
243                                <#assign titulo=docXml.valueOf("//dynamic-element[@name='TituloQueOtorga']/dynamic-content/text()") /> 
244 
245                                <#assign urlp=docXml.valueOf("//dynamic-element[@name='URLDePrograma']/dynamic-content/text()") /> 
246 
247                                <div class="informacion-pregrado row" style="margin-left: 0px; margin-right: 0px;"> 
248                                    <div class="col-md-8"> 
249                                        <h4 class="header-title">${entry.getTitle(locale)}</h4> 
250                                        <div class="contenido"> 
251                                            <b>Título: </b>${titulo}<br> 
252                                            <b>Modalidad: </b><span class="modalidad">${modalidad}</span> - <span class="jornada">${jornada}</span><br> 
253                                            <b>Duración: </b>${duracion}<br> 
254                                            <b>Sede: </b><span class="sede"> 
255                                                <#list sede as entry> 
256                                                    ${entry.valueOf("dynamic-content")} 
257                                                </#list> 
258                                            </span><br> 
259                                            <span style="display: none;" class="nivel">${nivel}</span> 
260                                            <span style="display: none;" class="facultad">${facultad}</span> 
261                                        </div> 
262                                    </div> 
263                                    <div class="col-md-4"> 
264                                        <a class="verprograma" href="${urlp}">Ver programa</a> 
265                                    </div> 
266                                </div> 
267                            </li> 
268                    </#list> 
269                </#if> 
270            </ul> 
271        </div> 
272</div> 
273<script type="text/javascript"> 
274 
275$(document).ready(function(){ 
276	$('#itemContainer li').each(function() { 
277		$(this).hide(); 
278	}); 
279	return false; 
280}); 
281 
282 
283 
284var 
285	sede= null, jornad= null, moda= null, facultad= null, nivel= null, words= null; 
286facultad = $( "#facultad-filtro option:selected" ).text(); 
287nivel = $( "#nivel-filtro option:selected" ).text(); 
288function updateFilters() { 
289  	$('#itemContainer li').hide().filter(function() { 
290    	var 
291	        self = $(this), 
292			result = true; // not guilty until proven guilty 
293	    if (sede && (sede != '')) { 
294	        result = result && true === ($(this).find('.sede').text().toLowerCase().indexOf(sede) > -1); 
295
296	    if (moda && (moda != '')) { 
297	        result = result && moda === $(this).find('.modalidad').text(); 
298
299	    if (nivel && (nivel != '')) { 
300	        result = result && nivel === $(this).find('.nivel').text(); 
301
302	    if (facultad && (facultad != '')) { 
303	        result = result && facultad === $(this).find('.facultad').text(); 
304
305	    if (jornad && (jornad != '')) { 
306	        result = result && true === ($(this).find('.jornada').text().toLowerCase().indexOf(jornad) > -1); 
307
308	    if (words && (words != '')) { 
309	        result = result && true === (normalize($(this).find('.informacion-pregrado').text().toLowerCase()).indexOf(normalize(words)) > -1); 
310
311    	return result; 
312  	}).show(); 
313
314 
315var normalize = (function() { 
316  	var from = "ÃÀÁÄÂÈÉËÊÌÍÏÎÒÓÖÔÙÚÜÛãàáäâèéëêìíïîòóöôùúüûÑñÇç",  
317      	to   = "AAAAAEEEEIIIIOOOOUUUUaaaaaeeeeiiiioooouuuuNnCc", 
318      	mapping = {}; 
319  
320  	for(var i = 0, j = from.length; i < j; i++ ){ 
321  	    mapping[ from.charAt( i ) ] = to.charAt( i ); 
322
323  	return function( str ) { 
324      	var ret = []; 
325      	for( var i = 0, j = str.length; i < j; i++ ) { 
326          	var c = str.charAt( i ); 
327          	if( mapping.hasOwnProperty( str.charAt( i ) ) ){ 
328				ret.push( mapping[ c ] ); 
329			}else{ 
330				ret.push( c ); 
331
332
333      	return ret.join( '' ); 
334
335})(); 
336 
337function clearFilters(){ 
338    $('#search').prop('value', ""); 
339    $('[name=sede-filtro]').prop('checked', false); 
340    $('[name=jorn-filtro]').prop('checked', false); 
341    $('[name=moda-filtro]').prop('checked', false); 
342    $("#facultad-filtro option[value=0]").prop('selected', 'selected'); 
343    $("#nivel-filtro option[value=0]").prop('selected', 'selected'); 
344    sede= null, jornad= null, moda= null, words= null; 
345    $('#itemContainer li').each(function() { 
346		$(this).hide(); 
347    }); 
348    return false; 
349
350 
351$('[name=sede-filtro]').click(function() { 
352	sede = $('[name=sede-filtro]:checked').val().toLowerCase(); 
353	updateFilters(); 
354}); 
355 
356$('[name=jorn-filtro]').click(function() { 
357	jornad = $('[name=jorn-filtro]:checked').val().toLowerCase(); 
358	updateFilters(); 
359}); 
360 
361$('[name=moda-filtro]').click(function() { 
362	moda = $('[name=moda-filtro]:checked').val(); 
363	updateFilters(); 
364}); 
365 
366$('#nivel-filtro').on('change', function() { 
367	nivel = $( "#nivel-filtro option:selected" ).text(); 
368	updateFilters(); 
369}); 
370 
371$('#facultad-filtro').on('change', function() { 
372	facultad = $( "#facultad-filtro option:selected" ).text(); 
373	updateFilters(); 
374}); 
375 
376$('#search').on("keyup",function() { 
377	words = $( "#search").val().toLowerCase(); 
378	updateFilters(); 
379}); 
380</script>