Conozca los diferentes servicios que ofrecemos a nuestros clientes
Atención y Servicios
CEMEX cuenta con un completo servicio de atención al cliente que va desde la atención permanente cuando y donde quieran a través del CANAL CEMEX, hasta el apoyo y asesoramiento personalizado del equipo comercial y técnico de la compañía.
Se ha producido un error al procesar la plantilla.
Java method "com.sun.proxy.$Proxy141.getLayout(long, boolean, long)" threw an exception when invoked on com.sun.proxy.$Proxy141 object "com.mediamonks.cemex.evolution.hook.layout.CustomLayoutLocalService@64de80fd"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign pageLayout = layoutLocalServi... [in template "20116#20152#48708377" at line 153, column 29] ----
1<!--Page Links Three Columns Images-->
2<style>
3 .container {
4 padding-left: 0;
5 padding-right: 0;
6 }
7 @media (min-width: 1200px){
8 .container {
9 max-width: 1400px;
10 }
11 }
12
13 .ng-page-links-three-columns-images{
14 margin-top:20px;
15 margin-bottom: 50px;
16 padding-left:15px;
17 padding-right:15px;
18 }
19
20 .ng-item-card-wrapper {
21 padding: 0 10px !important;
22 }
23
24 @media(max-width:768px){
25 .ng-item-card-wrapper{
26 padding:0 !important;
27 }
28 }
29
30 .ng-item-card-wrapper.first{
31 padding-left: 0 !important;
32 }
33
34 .ng-item-card-wrapper.last {
35 padding-right: 0 !important;
36 }
37
38 .ng-page-links-three-columns-images .ng-list__item {
39 list-style: none;
40 border: 1px solid #ccc;
41 margin-bottom: 22px;
42 }
43
44 .ng-page-links-three-columns-images .ng-list__item .ng-list__item-image {
45 width: 100%;
46 height: 177px;
47 background-position: center;
48 background-repeat: no-repeat;
49 background-size: cover;
50 clear: both;
51 border-bottom: solid 3px rgb(62, 127, 201);
52 }
53
54 .ng-page-links-three-columns-images .ng-list__item .ng-list__item-title {
55 display: block;
56 font-size: 24px;
57 font-weight: bold;
58 line-height: 1.5;
59 text-align: left;
60 overflow: hidden;
61 margin: 15px 0 15px 22px;
62 padding: 0;
63 height: 45px;
64 }
65
66 .ng-page-links-three-columns-images .ng-list__item .ng-list__item-description {
67 display: block;
68 text-align: left;
69 overflow: hidden;
70 margin: 15px 22px 15px 22px;
71 padding: 0;
72 min-height: 125px;
73 max-height: 125px;
74 }
75
76 .ng-page-links-three-columns-images .ng-list__item .ng-list__button-container {
77 padding-bottom: 30px;
78 padding-left: 22px;
79 }
80
81 .ng-button-link {
82 border: 1px solid #000;
83 color: #000;
84 padding: 6px 36px 10px;
85 }
86
87 .ng-button-link .ng-button-link__label {
88 font-size: 10px;
89 font-weight: 900;
90 line-height: 1;
91 letter-spacing: 2px;
92 text-align: center;
93 text-transform: uppercase;
94 }
95
96 @media screen and (min-width: 1024px) {
97 .ng-page-links-three-columns-images .margin-left20 {
98 margin-left: 20px;
99 }
100 }
101 .ng-edit-content {
102 float: right;
103 font-size: 14px;
104 margin-top: 4px;
105 color: #ccc;
106 }
107
108 .ng-edit-content:hover {
109 color: #45474E;
110 }
111 .ng-image-gradient:before {
112 background-image: linear-gradient(to top,transparent,rgba(0,0,0,0.1) 54%,rgba(0,0,0,0.7));
113 }
114</style>
115<#if entries?has_content>
116 <div class="ng-page-links-three-columns-images">
117 <div class="container">
118 <div class="row">
119 <!-- start header html -->
120
121 <!-- end header html -->
122
123 <!-- start item loop -->
124 <#list entries as entry>
125 <#assign renderer = entry.getAssetRenderer()/>
126 <#assign className = renderer.getClassName()/>
127 <#assign classPK = renderer.getClassPK()/>
128
129 <#if className == "com.liferay.journal.model.JournalArticle" >
130 <#assign journalArticle = renderer.getArticle()/>
131 <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(themeDisplay.getLocale()))/>
132
133 <!-- start item data -->
134 <#assign entryViewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse,entry, true)!"" />
135 <#assign entrySummary = entry.getDescription()!"" />
136 <#assign entryTitle = document.valueOf("//dynamic-element[@name='displayTitle']")!"" />
137 <#assign entryImage = document.valueOf("//dynamic-element[@name='image']")!"" />
138 <#assign entrylinkUrl = document.valueOf("//dynamic-element[@name='linkUrl']")!"" />
139 <#-- start link to a page entry --><#--com.liferay.portal.service.LayoutLocalService-->
140 <#-- First we get the node and the text -->
141 <#--getURL example: 53@public@112817-->
142
143 <#assign URLnode = document.selectSingleNode("//dynamic-element[@name='linkToPage']/dynamic-content")!"" />
144 <#assign getURL = URLnode.getText()!"" />
145 <#assign pageURL = "" />
146 <#--Then we have to split the url to get the Layout ID and the Group ID -->
147 <#if getURL?trim != "">
148 <#assign entryLayoutId = getURL?substring(0 , getURL?index_of("@"))!"" />
149 <#assign splitedURL = getURL?keep_after("@")!"" />
150 <#assign entryGroupId = splitedURL?substring(splitedURL?index_of("@") + 1)!"" />
151
152 <#assign layoutLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.LayoutLocalService')!"" />
153 <#assign pageLayout = layoutLocalService.getLayout(entryGroupId?number, false, entryLayoutId?number)!"" />
154 <#assign pageURL = pageLayout.getFriendlyURL()!"" />
155 </#if>
156 <#-- end link to a page entry -->
157 <#assign baseURL = themeDisplay.getPortalURL() + (themeDisplay.getPortalURL()?trim?lower_case?index_of("cemexusa.com") != -1)?then('','/web/cemex-usa') />
158 <!-- end item data -->
159
160 <!-- start item html -->
161 <div class="col-xs-12 col-md-4 ng-item-card-wrapper <#if entry?counter % 3 == 0>last <#elseif entry?counter == 1 || (entry?counter - 1) % 3 == 0>first</#if>">
162 <li class="ng-list__item clearfix">
163 <#if entryImage?? && entryImage?trim != "">
164 <div class="ng-list__item-image ng-border-bottom__light-color ng-image-gradient" style="background-image: url(${entryImage})"></div>
165 </#if>
166 <div>
167 <#if entryTitle?? && entryTitle?trim != "">
168 <div class="ng-list__item-title">${entryTitle}
169 <#if themeDisplay.isSignedIn()>
170 <a class="ng-edit-content" href="<@getEntryEditURL />"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>
171 </#if>
172 </div>
173 </#if>
174
175 <#if entrySummary?? && entrySummary?trim != "">
176 <div class="ng-list__item-description"><@cutString entrySummary 25/></div>
177 </#if>
178
179 <div class="ng-list__button-container">
180 <#if getURL?? && getURL != "">
181 <a class="ng-button-link" href="${pageURL?trim}">
182 <span class="ng-button-link__label"><@liferay.language key="translations.btn.see-more"/></span>
183 </a>
184 <#elseif entrylinkUrl?? && entrylinkUrl != "">
185 <a class="ng-button-link" target="_blank" href="${entrylinkUrl?trim}">
186 <span class="ng-button-link__label"><@liferay.language key="translations.btn.see-more"/></span>
187 </a>
188 <#else>
189 <a class="ng-button-link" href="${entryViewURL}">
190 <span class="ng-button-link__label"><@liferay.language key="translations.btn.see-more"/></span>
191 </a>
192 </#if>
193 </div>
194 </div>
195 </li>
196 </div>
197 <!-- end item html -->
198
199 <#-- start macros -->
200 <#macro getEntryEditURL>
201 <#if renderer.hasEditPermission(themeDisplay.getPermissionChecker())>
202 <#assign redirectURL = renderResponse.createRenderURL() />
203
204 ${redirectURL.setParameter("struts_action", "/asset_publisher/add_asset_redirect")}
205 ${redirectURL.setWindowState("pop_up")}
206
207 <#assign editPortletURL = renderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL) />
208
209 <#if validator.isNotNull(editPortletURL)>
210 <#assign entryEditURL = "javascript:Liferay.Util.openWindow({dialog: {width: 960}, id:'" + renderResponse.getNamespace() + "editAsset', title: '" + entryTitle + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});" />
211 ${entryEditURL}
212 </#if>
213 </#if>
214 </#macro>
215
216 <#macro cutString inputString numberOfWords>
217 <#assign words = inputString />
218 <span>
219 <#list words?split(' ') as word>
220 ${word}
221 <#if word?index == numberOfWords>
222 …
223 <#break>
224 </#if>
225 </#list>
226 </span>
227 </#macro>
228
229 <#macro getOffsetClasses index>
230 <#if index % 2 == 0>
231 col-md-offset-2
232 <#else>
233 margin-left20
234 </#if>
235 </#macro>
236 <#-- end macros -->
237 </#if>
238 </#list>
239 <!-- end item loop -->
240
241 </div>
242 </div>
243 </div>
244</#if>
245
246<#macro getEntryEditURL>
247 <#if renderer.hasEditPermission(themeDisplay.getPermissionChecker())>
248 <#assign redirectURL = renderResponse.createRenderURL() />
249
250 ${redirectURL.setParameter("struts_action", "/asset_publisher/add_asset_redirect")}
251 ${redirectURL.setWindowState("pop_up")}
252
253 <#assign editPortletURL = renderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL) />
254
255 <#if validator.isNotNull(editPortletURL)>
256 <#assign entryEditURL = "javascript:Liferay.Util.openWindow({dialog: {width: 960}, id:'" + renderResponse.getNamespace() + "editAsset', title: '" + entryTitle + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});" />
257 ${entryEditURL}
258 </#if>
259 </#if>
260 </#macro>