Extension indoor du réseau mobile public
Indoor Mobile Coverage
Extension du réseau mobile public dans vos locaux d’entreprise pour une couverture homogène et de qualité sur toutes vos surfaces.

Idéal pour :

Votre bâtiment ne capte pas le réseau mobile public ?
La solution Indoor Mobile Coverage s’adapte aux particularités de tout type de bâtiment.
Zones blanches
Stades
Sous-sols
Bureaux
Hôpitaux
Centres commerciaux
Bâtiments HQE
Entrepôts
Sites industriels
Parkings
Notre solution
Avec Indoor Mobile Coverage, profitez d’une couverture mobile optimale sur l’ensemble de la surface de vos locaux professionnels.
Compatibilité 2G/4G/5G
Une solution compatible pour garantir la qualité de vos appels et de votre accès Internet.
Large couverture
Des équipements déployés en fonction de vos surfaces, pour couvrir tous vos locaux.
Mono ou multi-opérateur
Tous vos collaborateurs et clients peuvent bénéficier de la couverture réseau mobile optimisée quelque soit leur opérateur en option.
Accompagnement
De l’élaboration de votre projet jusqu’à la mise en service de la solution et au support.
Comment ça marche ?
La solution Indoor Mobile Coverage s’adapte aux particularités de tout type de bâtiment.

Java method "com.sun.proxy.$Proxy111.getFriendlyURLLayout(long, boolean, String)" threw an exception when invoked on com.sun.proxy.$Proxy111 object "com.liferay.portal.service.impl.LayoutLocalServiceImpl@7aa62365"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: authorPage = layoutLocalService.getFr... [in template "20102#20129#1341914" at line 32, column 45] ----
1<#assign local = themeDisplay.getLocale()
2 layouts = themeDisplay.getLayouts()
3 extendedSeq = []
4 finalSeq = []
5 assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
6 layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
7<!-- Get the tags from the webcontent and create a new sequence with the string -->
8<#assign
9 inputTags = .vars['reserved-article-asset-tag-names'].data
10 inputTagsSeq = inputTags?split(",")>
11<#setting locale= local>
12
13
14<#list layouts as mainpage>
15 <#if mainpage.getFriendlyURL(local) == '/business'>
16 <#list mainpage.getChildren() as homeSubPages>
17 <#if homeSubPages.getFriendlyURL(local) == '/business/blog'>
18 <#list homeSubPages.getChildren() as articlesHomepage>
19 <#if articlesHomepage.getFriendlyURL(local) == '/business/blog/articles'>
20 <#list articlesHomepage.getChildren() as categoryPages>
21 <#list categoryPages.getChildren() as subCategoryPages>
22 <#list subCategoryPages.getChildren() as articleElement>
23 <!-- Get the tag for the target article Page -->
24 <#assign plId = articleElement.getPlid()
25 layoutEntry = assetEntryLocalService.fetchEntry("com.liferay.portal.kernel.model.Layout", plId)
26 assetTags = layoutEntry.getTags()>
27 <#assign
28 tagList = []
29 dateArticle = articleElement.getExpandoBridge().getAttribute('Blog display date from')
30 authorPageUrl = articleElement.getExpandoBridge().getAttribute('Blog author page url')
31 authorTruncatedUrl = "/business" + authorPageUrl?keep_after("/business")
32 authorPage = layoutLocalService.getFriendlyURLLayout(groupId, false, authorTruncatedUrl)
33 authorImage = authorPage.getExpandoBridge().getAttribute('Blog image url')
34 articleImage = articleElement.getExpandoBridge().getAttribute('Blog image url')>
35 <#list assetTags as tag>
36 <#assign tagList += [tag.name]>
37 </#list>
38 <!-- Insert element in the extendedSeq -->
39 <#assign layoutHash = {"tags": tagList,
40 "friendlyUrl": articleElement.friendlyURL, "articleTitle": articleElement.getHTMLTitle(local),
41 "articleDescription": articleElement.getDescription(local),
42 "date": dateArticle?datetime, "authorFriendlyUrl": authorPage.getRegularURL(request),
43 "authorName": authorPage.getHTMLTitle(local),
44 "authorImage": authorImage, "articleImage": articleImage,
45 "categoryName": categoryPages.getHTMLTitle(local),
46 "categoryUrl": categoryPages.getRegularURL(request),
47 "subCategoryName": subCategoryPages.getHTMLTitle(local),
48 "subCategoryUrl": subCategoryPages.getRegularURL(request)}
49 extendedSeq += [layoutHash] />
50 </#list>
51 </#list>
52 </#list>
53 </#if>
54 </#list>
55 </#if>
56 </#list>
57 </#if>
58</#list>
59
60<#list extendedSeq?sort_by("date")?reverse as reversedSeq>
61 <#if finalSeq?size lt 3>
62 <!-- Boolean to get out of the loop and only add once the element to the final sequence-->
63 <#assign tagsFound = false>
64 <#list reversedSeq.tags as tag>
65 <#if tagsFound != true>
66 <#list inputTagsSeq as inputTag>
67 <#if inputTag == tag>
68 <#assign finalSeq += [reversedSeq]
69 tagsFound = true>
70 <#break>
71 </#if>
72 </#list>
73 <#else>
74 <#break>
75 </#if>
76 </#list>
77 <#else>
78 <#break>
79 </#if>
80</#list>
81
82<section class="module module-cards-article" >
83 <div class="container">
84 <div class="row justify-content-center">
85 <div class="col-lg-12">
86 <div class="title-wrapper">
87 <h3 class="bottom-cut">${Title.getData()}</h3>
88 </div>
89
90 <div class="content-list">
91 <div class="row">
92 <#list finalSeq as articles>
93 <div class="col-lg-4">
94 <div class="card card-article card-article-small">
95 <div class="card-wrapper">
96 <div>
97 <div class="card-img-wrapper">
98 <a data-senna-off="true" href="${articles.friendlyUrl}">
99 <img src="${articles.articleImage}" class="img-fluid object-fit" alt="">
100 </a>
101 </div>
102
103 <div class="card-text-wrapper">
104 <div class="badge-wrapper">
105 <a data-senna-off="true" href="${articles.categoryUrl}" class="badge badge-small badge-blue-business ">${articles.categoryName}</a>
106 <a data-senna-off="true" href="${articles.subCategoryUrl}" class="badge badge-small badge-blue-business ">${articles.subCategoryName}</a>
107 </div>
108
109 <h3><a data-senna-off="true" href="${articles.friendlyUrl}">${articles.articleTitle}</a></h3>
110 <p>${articles.articleDescription}</p>
111 </div>
112 </div>
113 <div>
114 <a data-senna-off="true" href="${articles.friendlyUrl}" class="btn btn-link"
115 <#if LinkLabel.LinkAriaLabel?? &&
116 LinkLabel.LinkAriaLabel?has_content &&
117 LinkLabel.LinkAriaLabel.getData()?has_content>
118 aria-label="${LinkLabel.LinkAriaLabel.getData()}"</#if>>
119 ${LinkLabel.getData()} <i class="icon-chevron-right"></i>
120 </a>
121
122 <#if articles.authorImage?? && articles.authorImage?has_content
123 && articles.authorName?? && articles.authorName?has_content
124 && articles.date?? && articles.date?has_content
125 && articles.articleImage?? && articles.articleImage?has_content>
126 <div class="card-details-wrapper">
127 <div class="author">
128 <div class="author-img-wrapper">
129 <img src="${articles.authorImage}" class="img-fluid object-fit" alt="">
130 </div>
131 <div>
132 <p class="title">${AuthorLabel.getData()}</p>
133 <a data-senna-off="true" href="${articles.authorFriendlyUrl}"
134 class="value stretched-link"
135 <#if AuthorLabel.AuthorAriaLabel?? &&
136 AuthorLabel.AuthorAriaLabel?has_content &&
137 AuthorLabel.AuthorAriaLabel.getData()?has_content>
138 aria-label="${AuthorLabel.AuthorAriaLabel.getData()} ${articles.authorName}"</#if>>
139 ${articles.authorName}
140 </a>
141 </div>
142 </div>
143 <div class="date">
144 <p class="title">${PublicationLabel.getData()}</p>
145 <p class="value">${articles.date?string["dd MMMM yyyy"]}</p>
146 </div>
147 </div>
148 </#if>
149 </div>
150 </div>
151 </div>
152 </div>
153 </#list>
154 </div>
155 </div>
156 </div>
157 </div>
158 </div>
159</section>








Nos experts répondent à vos questions
Des questions sur un article ? Besoin de conseils pour trouver la solution qui répondra à vos problématiques ICT ?
Vous avez des questions ?
Contactez-nous gratuitement au 8002 4000 ou au +352 2424 4000 depuis l'étranger de lundi à vendredi de 8h à 18h.
Pourquoi POST ?
Découvrez les forces de POST : innovations, certifications, engagements RSE.