-
Acesso à informação
Divisor de acesso à informação
-
Transparência São Paulo
Divisor de transparência São Paulo
-
Legislação
Legislação
-
Ouvidoria
Ouvidoria
- 156
Java method "com.liferay.portal.vulcan.internal.template.RESTClientTemplateContextContributor$RESTClient.get(String)" threw an exception when invoked on com.liferay.portal.vulcan.internal.template.RESTClientTemplateContextContributor$RESTClient object "com.liferay.portal.vulcan.internal.template.RESTClientTemplateContextContributor$RESTClient@3e1158bb"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign relatedWebContents = restClie... [in template "20095#20121#34253" in function "getRelatedWebContents" at line 108, column 5] - Reached through: @renderChildrenPanels entry, treeData... [in template "20095#20121#34253" in macro "renderPanels" at line 354, column 21] - Reached through: @renderPanels childEntry, "${lastIds}... [in template "20095#20121#34253" in macro "renderPanels" at line 368, column 25] - Reached through: @renderPanels entry, entry?index, "Ma... [in template "20095#20121#34253" at line 454, column 13] ----
1<#assign prefix = "psp" />
2
3<#function getTreeData navigationEntry>
4 <#assign hasMultipleColumns = navigationEntry.getChildren()?size lt 4 />
5 <#assign type = "vocabulary-tree" />
6
7 <#if navigationEntry.getLayout()??>
8 <#assign type = "page-tree" />
9 </#if>
10
11 <#assign isVocabulary = type == 'vocabulary-tree' />
12 <#assign columnsDisplay = isVocabulary?then((hasMultipleColumns)?then('multiple-columns', 'single-column'), '') />
13 <#assign class = type + " " + columnsDisplay />
14
15 <#return {"type": type, "columnsDisplay": columnsDisplay, "class": class } />
16</#function>
17
18<#function getCategoryId entry customURL>
19 <#assign categoryId = "" />
20 <#assign hasCustomURL = customURL?has_content />
21
22 <#if hasCustomURL>
23 <#assign categoryId = entry.getURL()?keep_after("v/") />
24 </#if>
25
26 <#return categoryId />
27</#function>
28
29<#function getCustomURL entry>
30 <#assign customURL = '' />
31
32 <#if entry.getExpandoAttributes()["url-personalizada"]??>
33 <#assign customURL = entry.getExpandoAttributes()["url-personalizada"] />
34 </#if>
35
36 <#return customURL />
37</#function>
38
39<#function replaceWhiteSpaces stringName>
40 <#return stringName?replace(" ", "-") />
41</#function>
42
43<#function removeSpecialChar stringName>
44 <#assign cleanString = stringName?lower_case />
45 <#assign cleanString = cleanString?replace("[ãâáà]", "a", "r")?replace("[éêē]", "e", "r")?replace("[õóô]", "o", "r")?replace("í", "i")?replace("ú", "u")?replace("ç", "c") />
46
47 <#return cleanString />
48</#function>
49
50<#function getRelativeURL>
51 <#assign homeURL = themeDisplay.getURLHome() />
52 <#assign portalURL = themeDisplay.getPortalURL() />
53 <#assign url = homeURL?replace(portalURL, "")?remove_ending('/') />
54
55 <#return url />
56</#function>
57
58<#function getURL entry customURL hasOnlyMainPage=false>
59 <#assign hasCustomURL = customURL?has_content />
60 <#assign url = entry.getURL() />
61
62 <#if hasCustomURL>
63 <#assign normalizedCategoryName = removeSpecialChar(entry.getName()) />
64 <#assign formattedCategoryName = replaceWhiteSpaces(normalizedCategoryName) />
65 <#assign relativeURL = '/' + formattedCategoryName />
66
67 <#assign url = customURL + relativeURL />
68
69 <#if hasOnlyMainPage>
70 <#assign url = customURL />
71 </#if>
72
73 </#if>
74
75 <#return url />
76</#function>
77
78<#function getDesktopRootCategoriesURL entry customURL isVocabulary, hasOnlyMainPage, parentCategoryId>
79 <#assign url = entry.getURL() />
80
81 <#if isVocabulary>
82 <#assign url = getURL(entry, customURL, hasOnlyMainPage) />
83 <#assign categoryQueries = '?rootCategoryId=' + getCategoryId(entry, customURL) />
84 <#assign url += categoryQueries />
85 </#if>
86
87 <#if parentCategoryId?has_content>
88 <#assign url = getURL(entry, customURL, hasOnlyMainPage) />
89 <#assign categoryQueries = '?rootCategoryId=' + parentCategoryId + '&categoryId=' + getCategoryId(entry, customURL) />
90 <#assign url += categoryQueries />
91 </#if>
92
93 <#return url />
94</#function>
95
96<#function getDesktopSubCategoriesQueries entry customURL>
97 <#assign categoryQueries = '&categoryId=' + getCategoryId(entry, customURL) />
98
99 <#return categoryQueries />
100</#function>
101
102<#function getDesktopWebContentQueries entry id>
103 <#assign webContentQueries = '&webContent=' + id />
104 <#return webContentQueries />
105</#function>
106
107<#function getRelatedWebContents categoryId>
108 <#assign relatedWebContents = restClient.get('/headless-delivery/v1.0/sites/' + themeDisplay.getSiteGroupId() + '/structured-contents?fields=title,id,contentFields&flatten=true&filter=taxonomyCategoryIds/any(t:t eq ' + categoryId + ')').items![] />
109
110 <#return relatedWebContents />
111</#function>
112
113<#function getRedirectURLData contentFields>
114 <#assign redirectURL = '' />
115 <#assign isExternalLink = false />
116
117 <#list contentFields as contentField>
118 <#if contentField.name == "redirectUrl">
119 <#assign redirectURL = contentField.contentFieldValue.data />
120 </#if>
121
122 <#if contentField.name == 'isExternalLink'>
123 <#assign isExternalLink = contentField.contentFieldValue.data == 'true' />
124 </#if>
125 </#list>
126
127 <#assign redirectData = {"redirectURL": redirectURL, "target": isExternalLink?then('__blank', ''), "isExternalLink": isExternalLink} />
128 <#return redirectData />
129</#function>
130
131<#-- Desktop -->
132<#macro renderRootItem navigationEntry customURL>
133 <#assign url = navigationEntry.getRegularURL()?has_content?string(navigationEntry.getURL(), '#') />
134
135 <#if customURL?has_content>
136 <#assign url = getRelativeURL() + customURL />
137 </#if>
138
139 <li class="${prefix}-mega-menu__root-item">
140 <div class="d-flex align-items-center justify-content-center">
141
142 <#if navigationEntry.hasChildren()>
143 <span class="first-level">${navigationEntry.getName()}</span>
144 <#else>
145 <a class="${prefix}-mega-menu__root-item-link ${prefix}-mega-menu-link d-flex align-items-center" title="${navigationEntry.getName()} (Cabeçalho - Desktop)" href="${url}">
146 <span class="first-level">${navigationEntry.getName()}</span>
147 </a>
148 </#if>
149
150 <#if navigationEntry.hasChildren()>
151 <i class="${prefix}-mega-menu__root-item-icon material-icon text-4 mt-1 ml-1">arrow_drop_down</i>
152 </#if>
153 </div>
154
155 <#if navigationEntry.hasChildren()>
156 <#assign treeData = getTreeData(navigationEntry) />
157 <@renderBox navigationEntry treeData url />
158 </#if>
159 </li>
160</#macro>
161
162<#macro renderBox navigationEntry treeData customURL>
163 <div class="${prefix}-mega-menu-box ${treeData.class}">
164 <div class="${prefix}-mega-menu-box__wrapper px-0">
165
166 <div class="spacer" style="height: 8px"></div>
167
168 <div class="${prefix}-mega-menu-box__body">
169 <div class="${prefix}-mega-menu-box__columns">
170
171 <#list navigationEntry.getChildren() as navigationEntryChild>
172 <#assign isVocabulary = treeData.type == 'vocabulary-tree' />
173 <#assign isSingleColumn = treeData.columnsDisplay == 'single-column' />
174 <#assign hasOnlyMainPage = isVocabulary && isSingleColumn />
175 <#assign parentCategoryId = getCategoryId(navigationEntry, customURL) />
176 <#assign url = getDesktopRootCategoriesURL(navigationEntryChild, customURL, isVocabulary, hasOnlyMainPage, parentCategoryId) />
177
178 <div class="${prefix}-mega-menu-box__column">
179
180 <div class="${prefix}-mega-menu-box__column-title">
181 <#if url?has_content>
182 <a href="${url}" class="${prefix}-mega-menu-link second-level" title="${navigationEntryChild.getName()} (Cabeçalho - Desktop)">
183 ${navigationEntryChild.getName()}
184 </a>
185 <#else>
186 <span class="">${navigationEntryChild.getName()}</span>
187 </#if>
188 </div>
189
190 <#if treeData.columnsDisplay == 'multiple-columns'>
191 <div class="${prefix}-mega-menu-box__divider"></div>
192
193 <ul class="${prefix}-mega-menu-box__column-items">
194 <#if navigationEntryChild.hasChildren() >
195
196 <#list navigationEntryChild.getChildren() as navigationEntryGrandChild>
197 <#assign url = url?keep_before('&categoryId') />
198 <#assign url += getDesktopSubCategoriesQueries(navigationEntryGrandChild, customURL) />
199
200 <a class="${prefix}-mega-menu-link d-inline-flex w-100 third-level" href="${url}" title="${navigationEntryGrandChild.getName()} (Cabeçalho - Desktop)">
201 <li class="${prefix}-mega-menu-box__column-item w-100">
202 <span class="text-3 font-weight-normal">
203 ${navigationEntryGrandChild.getName()}
204 </span>
205 </li>
206 </a>
207 </#list>
208
209 <#else>
210
211 <#assign categoryId = getCategoryId(navigationEntryChild, customURL) />
212 <#assign relatedWebContents = getRelatedWebContents(categoryId) />
213
214 <#if relatedWebContents?size gt 0>
215 <#list relatedWebContents as navigationEntryGrandChild>
216
217 <#assign url = getRedirectURLData(navigationEntryGrandChild.contentFields).redirectURL />
218 <#assign target = getRedirectURLData(navigationEntryGrandChild.contentFields).target />
219
220 <a class="${prefix}-mega-menu-link d-inline-flex w-100 third-level" href="${url}" title="${navigationEntryGrandChild.title} (Cabeçalho - Desktop)" target="${target}">
221 <li class="${prefix}-mega-menu-box__column-item w-100">
222 <span class="text-3 font-weight-normal">
223 ${navigationEntryGrandChild.title}
224 </span>
225 </li>
226 </a>
227 </#list>
228 </#if>
229
230 </#if>
231 </ul>
232 </#if>
233
234 </div>
235 </#list>
236
237 </div>
238 </div>
239
240 </div>
241 </div>
242</#macro>
243
244<div class="d-none d-lg-block">
245 <nav class="${prefix}-mega-menu" id="mega-menu">
246 <ul class="${prefix}-mega-menu__root-items">
247 <#list entries as entry>
248 <#assign customURL = getCustomURL(entry) />
249 <@renderRootItem entry customURL />
250 </#list>
251 <#if themeDisplay.isSignedIn()>
252 <li class="ml-3"><@liferay.user_personal_bar /></li>
253 </#if>
254 </ul>
255 </nav>
256</div>
257
258<#-- Mobile -->
259<#macro renderChildrenPanels entry treeData customURL showNextLevelIcon>
260 <#assign categoryId = getCategoryId(entry, customURL) />
261 <#assign relatedWebContents = getRelatedWebContents(categoryId) />
262 <#assign hasRelatedWebContents = relatedWebContents?size gt 0 />
263
264 <#if entry.hasChildren()>
265 <#list entry.getChildren() as childEntry>
266 <#assign categoryId = getCategoryId(childEntry, customURL) />
267 <#assign relatedWebContents = getRelatedWebContents(categoryId) />
268 <#assign hasRelatedWebContents = relatedWebContents?size gt 0 />
269 <#assign categoryId = getCategoryId(entry, customURL) />
270 <#assign hasNextLevel = (childEntry.hasChildren() || hasRelatedWebContents) && treeData.type == 'vocabulary-tree' && treeData.columnsDisplay != 'single-column' />
271 <#assign hasOnlyMainPage = treeData.type == 'vocabulary-tree' && treeData.columnsDisplay == 'single-column' />
272 <#assign panelsLink = panelLinkIds?join(';') + ';' + childEntry?index />
273 <#assign url = childEntry.getURL() />
274
275 <#if customURL?has_content>
276 <#assign url = getRelativeURL() + getURL(childEntry, customURL, hasOnlyMainPage) />
277
278 <#if panelsLink?length gte 7 || categoryId?has_content>
279 <#assign url = getRelativeURL() + getURL(entry, customURL, hasOnlyMainPage) />
280 <#assign categoryQueries = '?rootCategoryId=' + getCategoryId(entry, customURL) + '&' + 'categoryId=' + getCategoryId(childEntry, customURL) />
281 <#else>
282 <#if hasOnlyMainPage>
283 <#assign categoryQueries = '?rootCategoryId=' + getCategoryId(childEntry, customURL) />
284 </#if>
285 </#if>
286
287 <#assign url += categoryQueries />
288 </#if>
289
290 <li class="psp-levels-menu__item ${childEntry.isSelected()?string('selected', '')}">
291 <#if hasNextLevel && showNextLevelIcon>
292 <a class="psp-levels-menu__item-link"
293 href="${url}"
294 title="${childEntry.getName()} (Cabeçalho - Mobile)"
295 data-levels-panel-link="${panelsLink}">
296 <#else>
297 <a class="psp-levels-menu__item-link" href="${url}" title="${childEntry.getName()} (Cabeçalho - Mobile)">
298 </#if>
299
300 <span>${childEntry.getName()}</span>
301
302 <#if hasNextLevel && showNextLevelIcon>
303 <span class="ml-auto text-6 mt-1"><i class="material-icon mt-1">chevron_right</i></span>
304 </#if>
305
306 </a>
307 </li>
308 </#list>
309
310 <#elseif hasRelatedWebContents>
311
312 <#list relatedWebContents as relatedWebContent>
313 <#assign categoryId = getCategoryId(entry, customURL) />
314 <#assign panelsLink = panelLinkIds?join(';') + ';' + relatedWebContent?index />
315
316 <#assign url = getRedirectURLData(relatedWebContent.contentFields).redirectURL />
317 <#assign target = getRedirectURLData(relatedWebContent.contentFields).target />
318
319 <li class="psp-levels-menu__item">
320 <#if hasNextLevel && showNextLevelIcon>
321 <a class="psp-levels-menu__item-link"
322 href="${url}"
323 target="${target}"
324 title="${relatedWebContent.title} (Cabeçalho - Mobile)"
325 data-levels-panel-link="${panelsLink}">
326 <#else>
327 <a class="psp-levels-menu__item-link" href="${url}" target="${target}" title="${relatedWebContent.title} (Cabeçalho - Mobile)">
328 </#if>
329 <span>${relatedWebContent.title}</span>
330 </a>
331 </li>
332 </#list>
333 </#if>
334</#macro>
335
336<#macro renderPanels entry lastIds lastPanelName treeData customURL>
337 <#if entry.hasChildren() || hasRelatedWebContents>
338 <#assign panelLinkIds = "0;${lastIds}"?split(';') />
339 <#assign prevPanelLinkId = panelLinkIds[0..panelLinkIds?size-2]?join(';') />
340
341 <#if panelLinkIds?size lte 3>
342 <#assign showNextLevelIcon = panelLinkIds?size lt 3>
343
344 <div class="psp-levels-menu__panel secondary-level" data-levels-panel-id="${panelLinkIds?join(';')}">
345 <div class="psp-levels-menu__panel__header">
346 <span>${lastPanelName}</span>
347
348 <a class="psp-levels-menu__back" href="#" data-levels-panel-link="${prevPanelLinkId}" title="Voltar menu">
349 <i class="material-icon text-4">chevron_left</i>
350 </a>
351 </div>
352
353 <ul class="psp-levels-menu__items">
354 <@renderChildrenPanels entry treeData customURL showNextLevelIcon />
355 </ul>
356 </div>
357
358 <#assign hasNextLevel = treeData.type == 'vocabulary-tree' && treeData.columnsDisplay == 'multiple-columns' />
359
360 <#if hasNextLevel>
361 <#list entry.getChildren() as childEntry>
362 <#assign categoryId = getCategoryId(childEntry, customURL) />
363 <#assign relatedWebContents = getRelatedWebContents(categoryId) />
364 <#assign hasRelatedWebContents = relatedWebContents?size gt 0 />
365
366 <#if childEntry.hasChildren() || hasRelatedWebContents>
367 <#assign prevPanelName = entry.getName() />
368 <@renderPanels childEntry "${lastIds};${childEntry?index}" entry.getName() treeData customURL />
369 </#if>
370 </#list>
371 </#if>
372 </#if>
373 </#if>
374</#macro>
375
376<div class="d-lg-none">
377
378 <div class="psp-levels-menu" id="levels-menu">
379 <div class="psp-levels-menu__panel active" data-levels-panel-id="0">
380 <div class="d-flex flex-column justify-content-between h-100 overflow-scroll">
381 <div>
382 <div class="psp-levels-menu__header">
383 <div class="d-flex align-items-center justify-content-between w-100">
384 <span>Menu</span>
385 <a class="psp-levels-menu__close-button text-muted text-8" title="Fechar menu" id="levels-menu-close-button" href="#">
386 <i class="material-icon">close</i>
387 </a>
388 </div>
389
390 <div class="${prefix}-horizontal-list__accessibility-icons">
391 <button class="d-flex align-items-center" title="Aumentar texto">
392 <span class="sr-only">Aumentar texto</span>
393 <i class="psp-icon-increase"></i>
394 </button>
395 <button class="d-flex align-items-center" title="Diminuir texto">
396 <span class="sr-only">Diminuir texto</span>
397 <i class="psp-icon-decrease"></i>
398 </button>
399 <button class="d-flex align-items-center" title="Contrastar">
400 <span class="sr-only">Contrastar</span>
401 <i class="psp-icon-contrast"></i>
402 </button>
403 <a class="d-flex align-items-center" href="/web/prefeitura-de-sao-paulo/acessibilidade" title="Acessibilidade">
404 <span>Acessibilidade</span>
405 <span class="sr-only">Acessibilidade Mobile</span>
406 </a>
407 </div>
408 </div>
409 <ul class="psp-levels-menu__items">
410 <#list entries as entry>
411 <#assign entryURL = entry.getURL()!'#' />
412
413 <li class="psp-levels-menu__item ${entry.isSelected()?string('selected', '')}">
414 <#if entry.hasChildren()>
415 <a class="psp-levels-menu__item-link"
416 href="${entryURL}"
417 title="${entry.getName()} (Cabeçalho - Mobile)"
418 data-levels-panel-link="0;${entry?index}">
419 <#else>
420 <a class="psp-levels-menu__item-link" title="${entry.getName()} (Cabeçalho - Mobile)" href="${entryURL}">
421 </#if>
422
423 <span>${entry.getName()}</span>
424
425 <#if entry.hasChildren()>
426 <span class="ml-auto text-6 mt-1"><i class="material-icon mt-1">chevron_right</i></span>
427 </#if>
428
429 </a>
430 </li>
431 </#list>
432 </ul>
433 </div>
434
435 <ul class="psp-levels-menu__items psp-levels-menu__secondary-items h-100">
436 <li class="psp-levels-menu__item">
437 <a href="https://legislacao.prefeitura.sp.gov.br/" class="color-inherit" title="Legislação (Cabeçalho - Mobile)" target="_blank">
438 Legislação
439 </a>
440 </li>
441 <li class="psp-levels-menu__item">
442 <a href="https://sp156.prefeitura.sp.gov.br/portal/servicos/informacao?t=1353&conteudo=932" class="color-inherit" title="Ouvidoria (Cabeçalho - Mobile)" target="_blank">
443 Ouvidoria
444 </a>
445 </li>
446 </ul>
447 </div>
448 </div>
449
450 <#list entries as entry>
451 <#assign treeData = getTreeData(entry) />
452 <#assign customURL = getCustomURL(entry) />
453
454 <@renderPanels entry entry?index "Mais opções" treeData customURL />
455 </#list>
456 </div>
457
458</div>
459
460<#-- Init -->
461<script>
462 (() => {
463 window.PSP_LEVELS_MENU = new PSP.LevelsMenu(document.getElementById('levels-menu'));
464 window.PSP_MEGA_MENU = new PSP.MegaMenu(document.getElementById('mega-menu'));
465 })()
466</script>
Notícia na íntegra
Prefeitura credencia 3 mil táxis e cria 5 bolsões para embarque de passageiros durante o GP de Fórmula 1
A Prefeitura de São Paulo, por meio do Departamento de Transportes Públicos (DTP), criou cinco bolsões de táxi para atender aos passageiros que utilizarem esse tipo de transporte para o Grande Prêmio São Paulo de Fórmula 1, no Autódromo de Interlagos, na Zona Sul, entre nos dias 2 e 3 de novembro de 2024. Para maior conforto do público, serão credenciados 3.000 táxis para o evento.
A equipe do DTP estará presente para organização da área de embarque e para orientar o público e esclarecer dúvidas. Os táxis estarão distribuídos em bolsões devidamente identificados no entorno do Autódromo para facilitar a localização.
Localização dos Bolsões:
- Bolsão A: Avenida Rubens Montanaro de Borba (entre a Avenida Jangadeiro e a Rua Angelina Regolin Cardoso de Mendonça) com a Avenida Jacinto Júlio (entre a Avenida Feliciano Correia e Rua Quirino Landi)
- Bolsão B: Avenida Interlagos entre a Praça Enzo Ferrari e Avenida do Rio Bonito
- Bolsão C: Avenida Senador Teotônio Vilela entre o Portão 7 do Autódromo e a Avenida Interlagos
- Bolsão D: Avenida Interlagos (pista sentido Centro - lado esquerdo) entre a Avenida Teotônio Vilela e a Avenida do Rio Bonito
- Bolsão E: Avenida do Rio Bonito, entre a Avenida Interlagos e a Avenida Antônio Barbosa da Silva Sandoval
Tarifas do Táxi Comum
- Bandeira 1 (das 6h às 20h, de segunda a sábado): R$ 6 mais R$ 4,25 por quilômetro rodado;
- Bandeira 2 (das 20h às 6h, de segunda a sábado, e o dia todo aos domingos e feriados): acréscimo de 30% sobre a tarifa quilométrica.
Credenciamento dos taxistas
A distribuição das credenciais aos taxistas será realizada no local abaixo, por ordem de chegada, a partir de 30 de outubro, das 9h às 16h. Será liberada uma credencial para cada alvará de estacionamento, que deverá ser fixada no lado direito superior do para-brisa do veículo.
- Associação das Empresas de Táxi de Frota do Município de São Paulo - ADETAX: Rua Contos Gauchescos, 165, Vila Santa Catarina.
SECOM - Prefeitura da Cidade de São Paulo
E-mail:
imprensa@prefeitura.sp.gov.br
Facebook I
Twitter I
Instagram I
TikTok I
YouTube I
Acervo de Vídeos I
LinkedIn
HAND TALK
Clique neste componente para ter acesso as configurações do plugin Hand Talk
Em nosso site, utilizamos cookies, que são arquivos salvos no seu computador para auxiliar a coletar informações sobre suas preferências e sobre outras páginas da internet visitadas por você a fim de otimizar sua experiência de navegação em nosso site, apresentando conteúdos personalizados. Ao selecionar "Aceitar todos", você consente com a utilização de cookies. Saiba mais