17 Desarrollo web

Consiste en la construcción y mantenimiento de páginas web. Los diseñadores web utilizan programas informáticos para producir páginas que incluyen enlaces a otras páginas, gráficos, elementos de texto y fotografías. El diseño de estos elementos puede ser presentado en forma de texto o mediante dibujos sobre papel.

Para implementar estas ideas, se utilizan programas informáticos, bibliotecas de código abierto y entornos de desarrollo (frameworks).Un diseñador web debe comprender tanto la tecnología como los valores artísticos implicados en el proceso.

desarrolloweb4
desarrolloweb3
desarrolloweb2
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> className  [in template "20099#20125#61500" at line 168, column 14]

----
Tip: If the failing expression is known to 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: #if className == "com.liferay.journal...  [in template "20099#20125#61500" at line 168, column 9]
----
1<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")/> 
2<#assign	requestContainsCategory = themeDisplay.getURLCurrent()?contains('categories') /> 
3 
4<#assign novedadesPortalUtil = serviceLocator.findService("com.abaco.portales.novedades.service.NovedadesPortalUtil") /> 
5<#assign categoryIdRequest = paramUtil.getLong(request, "categoryId")> 
6<#assign publisherEntriesQuery = novedadesPortalUtil.publisherEntriesQuery(portletPreferences, groupId, categoryIdRequest)> 
7<#assign orderedEntries = novedadesPortalUtil.ordenarNovedadesPortal(publisherEntriesQuery)> 
8 
9<#if orderedEntries?has_content> 
10 
11		<#assign unionListadoOrdenado = []> 
12    <#assign contenidosPaginaActual = []> 
13    <#assign numeroDestacadas = 0> 
14 
15    <#-- Usar el servicio para combinar y ordenar las listas --> 
16    <#list orderedEntries as k, v> 
17        <#if k == "destacadas"> 
18            <#assign numeroDestacadas = v?size> 
19        </#if> 
20        <#assign unionListadoOrdenado = unionListadoOrdenado + v > 
21    </#list> 
22		 
23		<#if unionListadoOrdenado?has_content> 
24        <#-- Configurar paginación --> 
25        <#assign totalItems = unionListadoOrdenado?size /> 
26        <#assign itemsPerPage = delta?number />  <#-- Número de elementos por página --> 
27        <#assign currentPage = paramUtil.getInteger(request, "cur", 1) /> 
28        <#assign totalPages = ((totalItems + itemsPerPage - 1) / itemsPerPage)?int /> 
29        <#assign start = (currentPage - 1) * itemsPerPage /> 
30        <#assign end = start + itemsPerPage /> 
31 
32        <#-- Asegurarse de que end no supere totalItems --> 
33        <#if (end > totalItems)> 
34            <#assign end = totalItems /> 
35        </#if> 
36 
37        <#-- Crear una lista de elementos para la página actual --> 
38        <#list (start..end-1) as index> 
39            <#if (index < totalItems)> 
40                <#assign contenido = unionListadoOrdenado[index] /> 
41                <#-- Agregar a la lista de la página actual --> 
42                <#assign contenidosPaginaActual = contenidosPaginaActual + [contenido] /> 
43            </#if> 
44        </#list> 
45    </#if> 
46 
47 
48    <div class="adt-novedades" id="adt-novedades-jda"> 
49        <#assign conta = 1/> 
50        <#list contenidosPaginaActual as curEntry> 
51            <#assign renderer = curEntry.getAssetRenderer() className = renderer.getClassName() /> 
52            <#if className == "com.liferay.journal.model.JournalArticle"> 
53                <#assign journalArticle = renderer.getArticle() 
54                    ddmStructureName = journalArticle.getDDMStructure().getName("es_ES") 
55                    templateKey = "" 
56                    categories = curEntry.getCategories() 
57                /> 
58								 
59								 
60								<#if requestContainsCategory> 
61										<#assign	validEntry =  false /> 
62										<#assign	requestCategoryId = themeDisplay.getURLCurrent()?substring(themeDisplay.getURLCurrent()?last_index_of('/')+1) /> 
63										<#if requestCategoryId?is_number> 
64											<#assign	requestCategoryId = requestCategoryId?number /> 
65											<#list categories as cat> 
66												<#if cat.categoryId == requestCategoryId> 
67													<#assign	validEntry =  true /> 
68												</#if> 
69											</#list> 
70											<#if !validEntry> 
71												<#continue> 
72											</#if>											 
73										</#if> 
74										 
75 
76								</#if> 
77								 
78                <#assign viewURL = (!stringUtil.equals(assetLinkBehavior, "showFullContent"))?then(assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry, true), assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry)) /> 
79                ${request.setAttribute("viewURL", viewURL )} 
80                ${request.setAttribute("categories", categories )} 
81								 
82 
83                <#-- Procedimiento --> 
84                <#if ddmStructureName == "Procedimiento"> 
85                    <#assign templateKey = "944524" /> <#-- Plantilla novedades_procedimientos --> 
86                </#if> 
87 
88                <#-- Contenido web --> 
89                <#if ddmStructureName == "Contenido web"> 
90                    <#assign templateKey = "109055"/> <#-- Plantilla novedades_contenido_web--> 
91                </#if> 
92								 
93								 <#-- Contenido web extendido--> 
94                <#if ddmStructureName == "Contenido web extendido"> 
95                    <#assign templateKey = "1243488"/> <#-- Plantilla novedades_contenido_web_extendido--> 
96                </#if> 
97 
98                <#-- Enlace --> 
99                <#if ddmStructureName == "Enlace"> 
100                    <#assign templateKey = "4859236"/> <#-- Plantilla novedades_enlace--> 
101                </#if> 
102								 
103								<#-- Normativa --> 
104                <#if ddmStructureName == "Normativa"> 
105                    <#assign templateKey = "273977"/> <#-- Plantilla novedades_normativa--> 
106                </#if> 
107								 
108								<#-- Evento --> 
109                <#if ddmStructureName == "Evento"> 
110                    <#assign templateKey = "1873301"/> <#-- Plantilla novedades_evento--> 
111                </#if> 
112 
113                <#if conta == 1> 
114                    <div class="adt-novedades__container"> 
115                        <div class="adt-novedades__first"> 
116                            <div class="card mb-3"> 
117                                <@liferay_journal["journal-article"] 
118                                    articleId=journalArticle.getArticleId() 
119                                    ddmTemplateKey="${templateKey}" 
120                                    showTitle=false 
121                                    groupId=journalArticle.getGroupId() 
122                                /> 
123                            </div> 
124                        </div> 
125                        <#assign conta++/> 
126                <#elseif conta < 4> 
127                    <#if conta ==2> 
128                        <div class="adt-novedades__second"> 
129                    </#if> 
130                    <div class="card mb-3"> 
131                        <@liferay_journal["journal-article"] 
132                            articleId=journalArticle.getArticleId() 
133                            ddmTemplateKey="${templateKey}" 
134                            showTitle=false 
135                            groupId=journalArticle.getGroupId() 
136                        /> 
137                    </div> 
138                    <#assign conta++/> 
139                <#elseif (conta == 4)> 
140                    <#-- Cierro contenedor-second(flex) --> 
141                    </div> 
142                    <#-- Cierro contenedor(flex) --> 
143                    </div> 
144                    <#-- Abro Segundo contenedor(grid) --> 
145                    <div class="adt-novedades__grid"> 
146                        <div class="card mb-3"> 
147                            <@liferay_journal["journal-article"] 
148                                articleId=journalArticle.getArticleId() 
149                                ddmTemplateKey="${templateKey}" 
150                                showTitle=false 
151                                groupId=journalArticle.getGroupId() 
152                            /> 
153                        </div> 
154                        <#assign conta++/> 
155                <#elseif (conta >= 4)> 
156                    <div class="card mb-3"> 
157                        <@liferay_journal["journal-article"] 
158                            articleId=journalArticle.getArticleId() 
159                            ddmTemplateKey="${templateKey}" 
160                            showTitle=false 
161                            groupId=journalArticle.getGroupId() 
162                        /> 
163                    </div> 
164                    <#assign conta++/> 
165                </#if> 
166            </#if> 
167        </#list> 
168        <#if className == "com.liferay.journal.model.JournalArticle"> 
169            <#if (conta == 2)> 
170                <#-- Cierro contenedor(flex) ya que solo hay un valor --> 
171                </div> 
172            <#elseif (conta == 3)> 
173                <#-- Cierro contenedor (flex) y el second ya que solo hay dos valores --> 
174                    </div> 
175                </div> 
176            <#elseif (conta >= 4)> 
177                <#-- Cierro contenedor(grid) --> 
178                </div> 
179            </#if> 
180        </#if> 
181    </div> 
182</#if> 
183 
184<style> 
185 .adt-novedades__second .journal-content-article { 
186 		height: 100%; 
187
188 .adt-novedades .card .card-container { 
189		height: 100%; 
190
191</style>