Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#44717" at line 117, column 25]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#44717" at line 117, column 16]
----
1<style> 
2@media screen and (min-width: 768px) and (max-width: 992px) { 
3  .wrapper-dpt-tin-image{ 
4    display: flex; 
5
6  .dpt-tin-image  .title-dpt-tin-image{ 
7    height: 114px; 
8
9  .dpt-tin-video .title-dpt-tin-video { 
10    height: 105px; 
11
12
13</style> 
14 
15<style> 
16  .main-img-news { 
17      border-radius: 10px; 
18      width: 100%; 
19      aspect-ratio: 4 / 3; 
20      object-fit: cover; 
21
22 
23  .title-main-news { 
24      color: rgba(3, 95, 181, 1); 
25      font-family: Roboto; 
26      font-size: clamp(16px, 3vw, 22px); 
27      font-weight: 700; 
28      text-align: left; 
29
30 
31 
32  .sub-news { 
33      margin-top: 4rem; 
34      border-top: 3px solid rgba(3, 95, 181, 1); 
35
36 
37  .wrap-subnews-tnb:hover { 
38      cursor: pointer; 
39
40 
41 
42  .wrap-col-sub-news { 
43      height: 650px; 
44      overflow-y: auto; 
45
46 
47  @media (max-width: 1024px) { 
48      .sub-news { 
49          margin-top: 0rem; 
50          padding-top: 0.5rem; 
51
52 
53      .ddxd { 
54          margin-top: 60px; 
55
56
57 
58  @media (max-width: 576px) { 
59      .sub-news { 
60          margin-top: 0rem; 
61          padding-top: 0.5rem; 
62
63 
64      .ddxd { 
65          margin-top: 60px; 
66
67
68 
69 
70  .cursor-pointer { 
71      cursor: pointer; 
72
73 
74  .wrap-subnews-tnb { 
75      list-style: none; 
76      width: 100%; 
77      padding: 0; 
78      margin: 0; 
79      list-style-type: square; 
80
81  .wrap-subnews-tnb li { 
82      list-style-type: square; 
83      cursor: pointer; 
84      border-bottom: 1px solid #EBEBEB; 
85      min-height: 45px; 
86      margin: 0 5px 0 25px; 
87      padding: 10px 0; 
88      font-size: clamp(14px, 3vw, 16px); 
89      font-weight: 500; 
90      line-height: 22.4px; 
91      color: #2E2E2E; 
92      transition: all 0.2s; 
93
94  .wrap-subnews-tnb li::marker { 
95      color: #035FB5; 
96
97 
98  .wrap-subnews-tnb li:hover::marker { 
99      color: #DE6F18; 
100
101 
102  .wrap-subnews-tnb li:last-child { 
103      border-bottom: none; 
104
105  .wrap-subnews-tnb li:hover { 
106      color: #035FB5; 
107
108 
109</style> 
110 
111<div class="row mx-0 ddxd" id="khoitinnoibattrangchu"> 
112 
113  <div class="col-12 col-lg-8 px-0 pr-lg-3"> 
114      <#assign indexLocal=0 /> 
115      <#if entries?has_content> 
116      <#list entries as curEntry> 
117      <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
118      <#if className=="com.liferay.journal.model.JournalArticle" && 
119      curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal < 1> 
120      <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
121      description=article.getDescription(locale) ddmTemplateKey=article.getDDMTemplateKey() 
122      curEntry=curEntry 
123      viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
124      indexLocal=indexLocal + 1 /> 
125      <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
126      <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
127      <#else> 
128      <#assign 
129      smallImageUrl="https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
130  </#if> 
131  <div id="tinnoibat-trangchu"> 
132      <img onclick="location.href='${viewURL}'" src="${htmlUtil.escape(smallImageUrl)}" alt="${htmlUtil.escape(title)}" 
133           class="w-100 main-img-news cursor-pointer" id="img-main" /> 
134      <div class="title-main-news p-2 cursor-pointer" id="div-a-main" 
135           onclick="location.href='${viewURL}'"> 
136          ${htmlUtil.escape(title)} 
137      </div> 
138 
139 
140  </div> 
141</#if> 
142</#list> 
143</#if> 
144</div> 
145<div class="col-12 col-lg-4 pr-2 custom-thin-scroll wrap-col-sub-news pl-0 pl-lg-3" id="khoitinbencanh-trangchu"> 
146  <div class="sub-news"> 
147      <ul class=" wrap-subnews-tnb" > 
148          <#assign subNewsCount=0 /> 
149          <#assign indexLocal=0 /> 
150          <#if entries?has_content> 
151          <#list entries as curEntry> 
152          <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
153          <#if className=="com.liferay.journal.model.JournalArticle" && 
154          curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
155          <#if indexLocal gt 0> 
156          <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
157          description=article.getDescription(locale) ddmTemplateKey=article.getDDMTemplateKey() 
158          curEntry=curEntry 
159          viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
160          subNewsCount=subNewsCount + 1 /> 
161          <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
162          <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
163          <#else> 
164          <#assign 
165          smallImageUrl="https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
166      </#if> 
167 
168      <li class="main-item-box sub-news-item home-tinnoibat-tinmoi-news" 
169          data-title="${htmlUtil.escape(title)}" 
170          data-image="${htmlUtil.escape(smallImageUrl)}"> 
171          <a  title="${htmlUtil.escape(title)}" 
172              href="${htmlUtil.escape(viewURL)}"> 
173              ${htmlUtil.escape(title)} 
174          </a> 
175      </li> 
176  </#if> 
177  <#assign indexLocal=indexLocal + 1 /> 
178</#if> 
179</#list> 
180</#if> 
181</ul> 
182</div> 
183</div> 
184</div> 
185 
186<script> 
187  $(document).ready(function() { 
188      const $subNewsItems = $('.sub-news-item'); 
189      const $mainNewsImage = $('#img-main'); 
190      const $mainNewsTitle = $('#div-a-main'); 
191 
192      // Store default main news information 
193      const defaultMainNews = { 
194          title: $mainNewsTitle.text(), 
195          image: $mainNewsImage.attr('src'), 
196          link: $mainNewsTitle.closest('a').attr('href') 
197      }; 
198 
199      $subNewsItems.each(function() { 
200          // Handle mouseover event 
201          $(this).on('mouseover', function() { 
202              const $newsItem = $(this).find('.home-tinnoibat-tinmoi-news'); 
203              const title = $newsItem.prevObject[0].dataset.title; 
204              const image = $newsItem.prevObject[0].dataset.image; 
205              const link = $(this).find('.home-tinnoibat-tinmoi-news-a').attr('href'); 
206              if ($mainNewsImage.length && title && image) { 
207                  $mainNewsImage.attr('src', image); 
208                  $mainNewsTitle.text(title).attr('title', title); 
209                  $mainNewsTitle.closest('a').attr('href', link); 
210
211          }); 
212          $(this).on('mouseout', function() { 
213              $mainNewsImage.attr('src', defaultMainNews.image); 
214              $mainNewsTitle.text(defaultMainNews.title).attr('title', defaultMainNews.title); 
215              $mainNewsTitle.closest('a').attr('href', defaultMainNews.link); 
216          }); 
217      }); 
218  }); 
219 
220  (function () { 
221      var el = document.querySelector('#tinnoibat-trangchu'); 
222      var elDivLichLamViec = document.querySelector('#khoitinbencanh-trangchu'); 
223      if (!el || !elDivLichLamViec) return; 
224 
225      function updateHeight() { 
226          requestAnimationFrame(() => { 
227              if (window.innerWidth >= 992) { 
228                  elDivLichLamViec.style.height = el.clientHeight + 'px'; 
229              } else { 
230                  elDivLichLamViec.style.height = '368px'; 
231
232          }); 
233
234 
235      if (window.ResizeObserver) { 
236          var resizeObserver = new ResizeObserver(updateHeight); 
237          resizeObserver.observe(el); 
238
239 
240      window.addEventListener('resize', updateHeight); 
241      updateHeight(); 
242  })(); 
243 
244 
245</script> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#958410" at line 102, column 27]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#958410" at line 102, column 18]
----
1<style> 
2    .main-img-news { 
3        border-radius: 10px; 
4        width: 100%; 
5        aspect-ratio: 4 / 3; 
6        object-fit: cover; 
7
8 
9    .title-main-news { 
10        color: rgba(3, 95, 181, 1); 
11        font-family: Roboto; 
12        font-size: clamp(16px, 3vw, 22px); 
13        font-weight: 700; 
14        text-align: left; 
15
16 
17 
18    .sub-news { 
19        margin-top: 4rem; 
20        border-top: 3px solid rgba(3, 95, 181, 1); 
21
22 
23    .wrap-subnews-tnb:hover { 
24        cursor: pointer; 
25
26 
27 
28    .wrap-col-sub-news { 
29        height: 650px; 
30        overflow-y: auto; 
31
32 
33    @media (max-width: 1024px) { 
34        .sub-news { 
35            margin-top: 0rem; 
36            padding-top: 0.5rem; 
37
38 
39        .ddxd { 
40            margin-top: 60px; 
41
42
43 
44    @media (max-width: 576px) { 
45        .sub-news { 
46            margin-top: 0rem; 
47            padding-top: 0.5rem; 
48
49 
50        .ddxd { 
51            margin-top: 60px; 
52
53
54 
55 
56    .cursor-pointer { 
57        cursor: pointer; 
58
59 
60    .wrap-subnews-tnb { 
61        list-style: none; 
62        width: 100%; 
63        padding: 0; 
64        margin: 0; 
65        list-style-type: square; 
66
67    .wrap-subnews-tnb li { 
68        list-style-type: square; 
69        cursor: pointer; 
70        border-bottom: 1px solid #EBEBEB; 
71        min-height: 45px; 
72        margin: 0 5px 0 25px; 
73        padding: 10px 0; 
74        font-size: clamp(14px, 3vw, 16px); 
75        font-weight: 500; 
76        line-height: 22.4px; 
77        color: #2E2E2E; 
78        transition: all 0.2s; 
79
80    .wrap-subnews-tnb li::marker { 
81        color: #035FB5; 
82
83 
84    .wrap-subnews-tnb li:hover::marker { 
85        color: #DE6F18; 
86
87 
88    .wrap-subnews-tnb li:last-child { 
89        border-bottom: none; 
90
91    .wrap-subnews-tnb li:hover { 
92        color: #035FB5; 
93
94</style> 
95 
96<div class="row mx-0 ddxd"> 
97 
98    <div class="col-12 col-lg-8 px-0 pr-lg-3"> 
99        <#assign indexLocal=0 /> 
100        <#if entries?has_content> 
101        <#list entries as curEntry> 
102        <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
103        <#if className=="com.liferay.journal.model.JournalArticle" && 
104        curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal < 1> 
105        <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
106        description=article.getDescription(locale) ddmTemplateKey=article.getDDMTemplateKey() 
107        curEntry=curEntry 
108        viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
109        indexLocal=indexLocal + 1 /> 
110        <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
111        <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
112        <#else> 
113        <#assign 
114        smallImageUrl="/documents/37638/0/ảnh-đại-diện-đà-nẵng-01.jpg"> 
115    </#if> 
116    <div id="tinnoibat-trangchu"> 
117        <img onclick="location.href='${viewURL}'" src="${htmlUtil.escape(smallImageUrl)}" alt="${htmlUtil.escape(title)}" 
118             class="w-100 main-img-news cursor-pointer" id="img-main2" /> 
119        <div class="title-main-news p-2 cursor-pointer" id="div-a-main2" 
120             onclick="location.href='${viewURL}'"> 
121            ${htmlUtil.escape(title)} 
122        </div> 
123    </div> 
124</#if> 
125</#list> 
126</#if> 
127</div> 
128<div class="col-12 col-lg-4 pr-2 custom-thin-scroll wrap-col-sub-news pl-0 pl-lg-3" id="khoitinbencanh-trangchu"> 
129    <div class="sub-news"> 
130        <ul class=" wrap-subnews-tnb" > 
131            <#assign subNewsCount=0 /> 
132            <#assign indexLocal=0 /> 
133            <#if entries?has_content> 
134            <#list entries as curEntry> 
135            <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
136            <#if className=="com.liferay.journal.model.JournalArticle" && 
137            curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
138            <#if indexLocal gt 0> 
139            <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
140            description=article.getDescription(locale) ddmTemplateKey=article.getDDMTemplateKey() 
141            curEntry=curEntry 
142            viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
143            subNewsCount=subNewsCount + 1 /> 
144            <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
145            <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
146            <#else> 
147            <#assign 
148            smallImageUrl="/documents/37638/0/ảnh-đại-diện-đà-nẵng-01.jpg"> 
149        </#if> 
150 
151        <li class="main-item-box sub-news-item2 home-tinnoibat-tinmoi-news2" 
152            data-title="${htmlUtil.escape(title)}" 
153            data-image="${htmlUtil.escape(smallImageUrl)}" 
154            onclick="location.href='${viewURL}'" 
155            title ="${htmlUtil.escape(title)}"> 
156            ${htmlUtil.escape(title)} 
157        </li> 
158    </#if> 
159    <#assign indexLocal=indexLocal + 1 /> 
160</#if> 
161</#list> 
162</#if> 
163</ul> 
164</div> 
165</div> 
166 
167</div> 
168<script> 
169    $(document).ready(function() { 
170        const $subNewsItems = $('.sub-news-item2'); 
171        const $mainNewsImage = $('#img-main2'); 
172        const $mainNewsTitle = $('#div-a-main2'); 
173 
174        // Store default main news information 
175        const defaultMainNews = { 
176            title: $mainNewsTitle.text(), 
177            image: $mainNewsImage.attr('src'), 
178            link: $mainNewsTitle.closest('a').attr('href') 
179        }; 
180 
181        function sanitizeHTML(str) { 
182            return $('<div>').text(str).html(); 
183
184 
185        $subNewsItems.each(function() { 
186            // Handle mouseover event 
187            $(this).on('mouseover', function() { 
188                const $newsItem = $(this).find('.home-tinnoibat-tinmoi-news2'); 
189                const title = $newsItem.prevObject[0].dataset.title; 
190                const image = $newsItem.prevObject[0].dataset.image; 
191                const link = $(this).find('.home-tinnoibat-tinmoi-news-a2').attr('href'); 
192                if ($mainNewsImage.length && title && image) { 
193                    setTimeout(function() { 
194                        $mainNewsImage.attr('src', image); 
195                        $mainNewsTitle.text(title).attr('title', title); 
196                        $mainNewsTitle.closest('a').attr('href', link); 
197                    }, 300); 
198
199            }); 
200 
201            // Handle mouseout event 
202            $(this).on('mouseout', function() { 
203                $mainNewsImage.attr('src', defaultMainNews.image); 
204                $mainNewsTitle.text(defaultMainNews.title).attr('title', defaultMainNews.title); 
205                $mainNewsTitle.closest('a').attr('href', defaultMainNews.link); 
206            }); 
207        }); 
208    }); 
209 
210    (function () { 
211        var el = document.querySelector('#tinnoibat-trangchu'); 
212        var elDivLichLamViec = document.querySelector('#khoitinbencanh-trangchu'); 
213        if (!el || !elDivLichLamViec) return; 
214 
215        function updateHeight() { 
216            requestAnimationFrame(() => { 
217                if (window.innerWidth >= 992) { 
218                    elDivLichLamViec.style.height = el.clientHeight + 'px'; 
219                } else { 
220                    elDivLichLamViec.style.height = '368px'; 
221
222            }); 
223
224 
225        if (window.ResizeObserver) { 
226            var resizeObserver = new ResizeObserver(updateHeight); 
227            resizeObserver.observe(el); 
228
229 
230        window.addEventListener('resize', updateHeight); 
231        updateHeight(); 
232    })(); 
233 
234 
235</script> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#175002" at line 74, column 27]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#175002" at line 74, column 18]
----
1<style> 
2    .custom-thin-scroll::-webkit-scrollbar { 
3        width: 4px; 
4
5 
6    .custom-thin-scroll::-webkit-scrollbar-track { 
7        background: #E0E0E04D; 
8        border-radius: 10px; 
9
10 
11    .custom-thin-scroll::-webkit-scrollbar-thumb { 
12        background: #ACB0B3; 
13        border-radius: 10px; 
14
15    .tc-thonbao .custom-list-w-icon { 
16        list-style: none; 
17        padding: 0; 
18        margin: 0; 
19
20 
21    .tc-thonbao .custom-list-w-icon li { 
22        position: relative; 
23        padding: 5px 5px 5px 30px; 
24        font-size: clamp(14px, 3vw, 16px); 
25        font-weight: 500; 
26        color: #2E2E2E; 
27        cursor: pointer; 
28        transition: all 0.2s; 
29
30    .tc-thonbao .custom-list-w-icon li .li-content::before { 
31        content: ''; 
32        position: absolute; 
33        left: -30px; 
34        top: 5px; 
35        width: 20px; 
36        min-height: 20px; 
37        -webkit-mask: var(--urlIcon) no-repeat center; 
38        mask: var(--urlIcon) no-repeat center; 
39        background: #2E2E2E; 
40
41 
42 
43    .tc-thonbao .custom-list-w-icon li.list-icon-dark::before { 
44        background-color: #5F676D; 
45        transition: background-color 0.2s; 
46
47 
48 
49    .tc-thonbao .custom-list-w-icon li .li-content:hover::before { 
50        background-color: #DE6F18; 
51
52 
53    .tc-thonbao .custom-list-w-icon li:hover { 
54        color: #035FB5; 
55
56    .tc-thonbao { 
57        overflow-y: auto; 
58        position: relative; 
59        display: flex; 
60        flex-direction: column; 
61
62 
63    .tc-thonbao .custom-list-w-icon { 
64        display: flex; 
65        flex-direction: column; 
66        gap: 3px; 
67
68</style> 
69 
70<div class="tc-thonbao custom-thin-scroll" id="khoithonghaobencanh" style="height: 350px;"> 
71    <ul class="custom-list-w-icon " 
72        style="--urlIcon: url('/documents/37638/39612/icon-ring.png/5fb9d93c-a89e-9857-ea76-daee9e2f3cb7?t=1737532773610');"> 
73        <#list entries as curEntry> 
74        <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
75        <#if className=="com.liferay.journal.model.JournalArticle" && 
76        curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
77        <#assign title=curEntry.getTitle(locale) 
78        viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" /> 
79        <li class="list-icon-dark" > 
80            <a class="li-content" href="${viewURL}" title="${title}"> 
81                ${title} 
82            </a> 
83        </li> 
84    </#if> 
85</#list> 
86</ul> 
87</div> 
88<script> 
89    (function () { 
90        var ell = document.querySelector('#khoitinnoibattrangchu'); 
91        var blockchinhquyen02cap = document.querySelector('#chinhquyen02cap'); 
92        var ellDivThongBao = document.querySelector('#khoithonghaobencanh'); 
93        var ellBanDo = document.querySelector('#fragment-5202-nsbd'); 
94 
95        if (!ell || !ellBanDo || !ellDivThongBao) return; 
96 
97        function updateHeight() { 
98            requestAnimationFrame(() => { 
99                if (window.innerWidth >= 992) { 
100                    ellDivThongBao.style.height = (ell.clientHeight + blockchinhquyen02cap.clientHeight - ellBanDo.clientHeight - 60) + 'px'; 
101                } else { 
102                    ellDivThongBao.style.setProperty('height', '350px', 'important'); 
103
104            }); 
105
106        window.addEventListener('resize', updateHeight); 
107        setTimeout(updateHeight, 1000); 
108    })(); 
109</script> 
banner cannot click
banner cannot click

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#46830" at line 103, column 25]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#46830" at line 103, column 16]
----
1<style> 
2  /* block 11 */ 
3  .title-big-news-block11 { 
4    font-family: Roboto; 
5    font-size: clamp(16px, 3vw, 24px); 
6    font-weight: 700; 
7    text-align: left; 
8    color: #2E2E2E; 
9
10 
11  .wrap-big-news-block11 { 
12    /*background-color: #E0E0E04D;*/ 
13    border-radius: 10px; 
14
15 
16  .wrap-big-news-block11:hover { 
17    cursor: pointer; 
18 
19    .title-big-news-block11 { 
20      color: #035FB5; 
21
22
23 
24  .img-lo57 { 
25    width: 100%; 
26    aspect-ratio: 4 / 3; 
27    object-fit: cover; 
28
29 
30  .img-nho-block11 { 
31    border-radius: 10px 10px 0 0; 
32
33 
34  .tin-nho-block11 { 
35    border-radius: 10px; 
36    /*background-color: rgba(224, 224, 224, 0.3);*/ 
37    /*border-bottom: 1px solid rgba(235, 235, 235, 1)*/ 
38
39 
40  .title-tin-nho-block11 { 
41    height: 110px; 
42    overflow-y: auto; 
43    font-family: Roboto; 
44    font-size: clamp(14px, 2vw, 16px); 
45    font-weight: 500; 
46    text-align: left; 
47    color: rgba(46, 46, 46, 1); 
48    scrollbar-width: none; 
49    -ms-overflow-style: none; 
50
51 
52  .title-tin-nho-block11::-webkit-scrollbar { 
53    display: none; 
54
55 
56  .inner-bg-gray:hover { 
57    cursor: pointer; 
58 
59    .title-tin-nho-block11 { 
60      color: rgba(3, 95, 181, 1); 
61
62 
63    img { 
64      box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); 
65
66
67 
68  .item-small-news .inner-bg-gray { 
69    background-color: rgba(224, 224, 224, 0.3); 
70    height: 100%; 
71    width: 100%; 
72    border-radius: 8px; 
73    overflow: hidden; 
74    border-bottom: 1px solid rgba(235, 235, 235, 1); 
75
76 
77  @media (max-width: 992px) { 
78    .title-tin-nho-block11 { 
79      height: 100px; 
80
81
82  .wrap-col-5 { 
83    background: #E0E0E04D; 
84    height: 99%; 
85    border-radius: 10px; 
86
87  .tin-nho-block11 .under-ws{ 
88    bottom: 0; 
89    left: 0; 
90    width: 100%; 
91    height: 34px; 
92 
93    background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #EBEBEB 69.12%); 
94
95</style> 
96 
97 
98<div class="row"> 
99  <div class="col-12 col-lg-5 mb-1 mb-lg-0 px-0 px-lg-3"> 
100    <div class="wrap-col-5"> 
101      <#assign indexLocal=0 /> 
102      <#list entries as curEntry> 
103      <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
104      <#if className=="com.liferay.journal.model.JournalArticle" && 
105      curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 4> 
106      <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() noiDung=article.getContent() 
107      idBaiViet=article.getId() 
108      viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
109      indexLocal=indexLocal + 1 /> 
110      <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
111      <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
112      <#else> 
113      <#assign smallImageUrl="https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
114    </#if> 
115    <#if indexLocal==1> 
116    <div class="row"> 
117      <div class="col-12"> 
118        <a class="wrap-big-news-block11" href="${viewURL}" title="${title}"> 
119          <img src="${smallImageUrl}" alt="" class="img-lo57" style="border-radius: 10px 10px 0 0; aspect-ratio: 1.28;"> 
120          <div class="title-big-news-block11 p-2 p-lg-3"> 
121            ${title} 
122          </div> 
123        </a> 
124      </div> 
125    </div> 
126  </#if> 
127</#if> 
128</#list> 
129</div> 
130 
131</div> 
132<div class="col-12 col-lg-7 px-0 px-lg-3"> 
133  <div class="row"> 
134    <#assign subNewsCount=0 /> 
135    <#assign indexLocal=0 /> 
136    <#if entries?has_content> 
137    <#list entries as curEntry> 
138    <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
139    <#if className=="com.liferay.journal.model.JournalArticle" && 
140    curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 7> 
141    <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() noiDung=article.getContent() 
142    idBaiViet=article.getId() 
143    viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
144    subNewsCount=subNewsCount + 1 /> 
145    <#assign indexLocal=indexLocal + 1 /> 
146    <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
147    <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
148    <#else> 
149    <#assign smallImageUrl="/documents/37638/0/ảnh-đại-diện-đà-nẵng-01.jpg"> 
150  </#if> 
151  <#if subNewsCount lte 7 && indexLocal gt 1> 
152  <div class="col-6 col-lg-4 item-small-news mb-2"> 
153    <a class="inner-bg-gray" href="${viewURL}" title='${title}'> 
154      <div class="row"> 
155        <div class="col-12"> 
156          <div class="tin-nho-block11 position-relative" > 
157            <img src="${smallImageUrl}" alt="" class="img-nho-block11 img-lo57"> 
158            <div class="p-2 p-lg-3 title-tin-nho-block11"> 
159              ${title} 
160            </div> 
161            <div class="under-ws position-absolute"></div> 
162          </div> 
163        </div> 
164      </div> 
165    </a> 
166  </div> 
167</#if> 
168</#if> 
169</#list> 
170</#if> 
171</div> 
172</div> 
173</div> 
banner cannot click
chinhphu

CỔNG THÔNG TIN ĐIỆN TỬ
CHÍNH PHỦ

dichvucong

CỔNG DỊCH VỤ CÔNG
TRỰC TUYẾN

chinhphu

CÔNG BÁO THÀNH PHỐ

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#45397" at line 64, column 22]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#45397" at line 64, column 13]
----
1<style> 
2    .cddhubnd .custom-list-w-icon-tinvb { 
3        list-style: none; 
4        padding: 0; 
5        margin: 0; 
6 
7
8 
9    .cddhubnd .custom-list-w-icon-tinvb li{ 
10        padding: 15px 5px 15px 45px; 
11        cursor:  pointer; 
12        transition: all 0.2s; 
13
14 
15    .li-content{ 
16        position: relative; 
17
18    .cddhubnd .custom-list-w-icon-tinvb li a{ 
19        font-size: clamp(14px, 3vw, 16px); 
20        font-weight: 500; 
21        color: #2E2E2E; 
22        text-decoration: none; 
23        transition: all 0.2s; 
24
25 
26    .cddhubnd .custom-list-w-icon-tinvb li.list-bg { 
27        margin-bottom: 16px; 
28        background: #E0E0E04D; 
29
30 
31    .cddhubnd .custom-list-w-icon-tinvb li .li-content::before { 
32        content: ''; 
33        position: absolute; 
34        left: -30px; 
35        top: 3px; 
36        width: 20px; 
37        min-height: 20px; 
38        -webkit-mask: var(--urlIcon) no-repeat center; 
39        mask: var(--urlIcon) no-repeat center; 
40        background: #2E2E2E; 
41
42 
43    .cddhubnd .custom-list-w-icon-tinvb li.list-icon-grey .li-content::before  { 
44        background-color: #848A8F; 
45        transition: background-color 0.2s; 
46
47 
48    .cddhubnd .custom-list-w-icon-tinvb li:hover .li-content::before  { 
49        background-color: #DE6F18; 
50
51 
52    .cddhubnd .custom-list-w-icon-tinvb li:hover a{ 
53        color: #035FB5; 
54
55    .vb-thuong-item.vb-item > .custom-list-w-icon > li::before { 
56        top: 30px; 
57
58</style> 
59<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")> 
60<div class="cddhubnd"> 
61    <ul class="custom-list-w-icon-tinvb" style="--urlIcon: url('/documents/37638/39612/book-icon.svg/1c253d07-0391-ab9e-5997-ea95bdb37598?t=1737516649655');"> 
62        <#list entries as curEntry> 
63            <#assign 
64            renderer=curEntry.getAssetRenderer() 
65            className=renderer.getClassName()  
66			groupId = curEntry.getGroupId() 
67			group = groupLocalService.getGroup(groupId) 
68			friendlyURL = group.getFriendlyURL() /> 
69            <#if className=="com.liferay.journal.model.JournalArticle" && 
70            curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
71                <#assign title=curEntry.getTitle(locale) 
72                viewURL="${themeDisplay.getPathFriendlyURLPublic()}${friendlyURL}/-/${renderer.getUrlTitle()}" /> 
73                <li class="list-bg list-icon-grey"> 
74                    <div class="li-content"> 
75                        <a href="${viewURL}" title="${title}"> 
76                            ${title} 
77                        </a> 
78                    </div> 
79                </li> 
80            </#if> 
81        </#list> 
82    </ul> 
83</div> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#46416" at line 114, column 16]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#46416" at line 114, column 5]
----
1<style> 
2  .schedule-item { 
3    display: flex; 
4    align-items: flex-start; 
5    gap: clamp(4px, 2vw, 10px); 
6    margin-bottom: 15px; 
7    cursor: pointer; 
8
9 
10  .schedule-item-title p { 
11    margin: 0; 
12    color: #2E2E2E; 
13    font-size: clamp(14px, 2vw, 16px); 
14    font-weight: 700; 
15    transition: color 0.2s ease; 
16
17 
18  .schedule-item-time p { 
19    margin: 0; 
20    font-size: clamp(12px, 2vw, 14px); 
21    color: #5F676D; 
22
23 
24  .schedule-item:hover .schedule-item-title p { 
25    color: #035FB5; 
26
27 
28  .schedule-item:hover .schedule-item-icon::before { 
29    border-color: #DE6F18; 
30    filter: drop-shadow(0 0 2px #DE6F18); 
31
32 
33  .schedule-item:hover .schedule-item-icon::after { 
34    background-color: #DE6F18; 
35
36 
37  .schedule-item-content { 
38    flex: 1; 
39
40 
41  .schedule-item-icon { 
42    width: 12px; 
43    height: 12px; 
44    position: relative; 
45    display: inline-flex; 
46    align-items: center; 
47    justify-content: center; 
48    margin-top: 5px; 
49
50 
51  .schedule-item-icon::before { 
52    content: ''; 
53    position: absolute; 
54    width: 12px; 
55    height: 12px; 
56    border: 1px solid; 
57    border-radius: 50%; 
58
59 
60  .schedule-item-icon::after { 
61    content: ''; 
62    width: 6px; 
63    height: 6px; 
64    border-radius: 50%; 
65
66 
67  .schedule-item-icon.blue::before { 
68    border-color: #0066CC; 
69
70 
71  .schedule-item-icon.blue::after { 
72    background-color: #0066CC; 
73
74 
75  .schedule-item-icon::before { 
76    border-color: #0066CC; 
77
78 
79  .schedule-item-icon::after { 
80    background-color: #0066CC; 
81
82 
83  .blue-link { 
84    color: #0066CC; 
85    text-decoration: none; 
86
87 
88  .blue-link:hover { 
89    text-decoration: underline; 
90
91 
92  /*.side-news-block {*/ 
93  /*    overflow-y: auto;*/ 
94  /*}*/ 
95 
96  .video{ 
97	width: 100% !important; 
98	height: auto !important; 
99
100.yui3-widget{ 
101	width: 100% !important; 
102	height: auto !important; 
103
104</style> 
105 
106<#assign dateFormatDay = "dd" /> 
107<#assign monthFormatDay = "MM" /> 
108<#assign yearFormatDay = "yyyy" /> 
109<#assign dateFormatTime = "HH:mm" /> 
110<div class="container-box custom-thin-scroll"> 
111  <div class="box-content"> 
112    <#list entries as curEntry> 
113    <#assign 
114    renderer = curEntry.getAssetRenderer() 
115    className = renderer.getClassName() /> 
116    <#if className == "com.liferay.journal.model.JournalArticle" && curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
117    <#assign 
118    title = curEntry.getTitle(locale) 
119    viewURL = "${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
120    createTime = dateUtil.getDate(curEntry.getPublishDate(), dateFormatTime, locale) 
121    createDay = dateUtil.getDate(curEntry.getPublishDate(), dateFormatDay, locale) 
122    createMonth = dateUtil.getDate(curEntry.getPublishDate(), monthFormatDay, locale) 
123    createYear = dateUtil.getDate(curEntry.getPublishDate(), yearFormatDay, locale)/> 
124    <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
125    <#assign smallImageUrl = curEntry.getAssetRenderer().getThumbnailPath(renderRequest) > 
126    <#else> 
127    <#assign smallImageUrl = "/documents/37629/39524/carousel-11.png" > 
128  </#if> 
129  <a class="schedule-item" href="${viewURL}" title="${title}"> 
130    <div class="schedule-item-icon"></div> 
131    <div class="schedule-item-content"> 
132      <div class="schedule-item-title"> 
133        <p>${title}</p> 
134      </div> 
135      <div class="schedule-item-time"> 
136        <p>${createTime} | ${createDay}/${createMonth}/${createYear}</p> 
137      </div> 
138    </div> 
139  </a> 
140</#if> 
141</#list> 
142</div> 
143</div> 
144 
145<script> 
146 
147  // (function() { 
148  //     var el = document.querySelector('.wrap-tin-noi-bat-no-tabs'); 
149  //     var heightTinNoiBat = 0; 
150  //     var elDivLichLamViec = document.querySelector('#fragment-15506-qbul'); 
151  // 
152  //     if (el) { 
153  //         heightTinNoiBat = el.offsetHeight; 
154  //         var width = window.innerWidth; 
155  // 
156  //         function updateHeight() { 
157  //             if (elDivLichLamViec && width > 992) { 
158  //                 elDivLichLamViec.style.height = heightTinNoiBat - 99 + 'px'; 
159  //             } 
160  //         } 
161  // 
162  //         var resizeObserver = new ResizeObserver(updateHeight); 
163  //         resizeObserver.observe(el); 
164  //         updateHeight(); 
165  //     } 
166  // })(); 
167 
168  (function() { 
169    var el = document.querySelector('.wrap-tin-noi-bat-no-tabs'); 
170    var heightTinNoiBat = 0; 
171    var elDivLichLamViec = document.querySelector('.side-news-block-content'); 
172 
173    if (el) { 
174      heightTinNoiBat = el.offsetHeight; 
175 
176      function updateHeight() { 
177        if (elDivLichLamViec && window.innerWidth > 992) { 
178          elDivLichLamViec.style.height = heightTinNoiBat - 65 + 'px'; 
179
180
181 
182      var resizeObserver = new ResizeObserver(updateHeight); 
183      resizeObserver.observe(el); 
184      updateHeight(); 
185
186  })(); 
187 
188 
189 
190 
191 
192</script> 
banner cannot click

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#47215" at line 38, column 21]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#47215" at line 38, column 12]
----
1<style> 
2  ul.custom-simple-list-w-icon { 
3 
4    cursor: pointer; 
5    list-style-position: bottom; 
6
7 
8  ul.custom-simple-list-w-icon li { 
9    position: relative; 
10    text-align: start!important; 
11    padding: 5px 5px 5px 20px; 
12    color: #2E2E2E; 
13    font-size: clamp(14px, 2vw, 16px); 
14    font-weight: 500; 
15
16  ul.custom-simple-list-w-icon li::before { 
17    content: ''; 
18    position: absolute; 
19    left: 5px; 
20    top: 12px; 
21    width: 10px; 
22    height: 10px; 
23    background-color: #035FB5; 
24    -webkit-mask: var(--urlIcon) no-repeat center; 
25    mask: var(--urlIcon) no-repeat center; 
26    transition: background-color 0.3s; 
27
28  ul.custom-simple-list-w-icon li:hover::before{ 
29    background-color: #DE6F18; 
30
31 
32  ul.custom-simple-list-w-icon li:hover { 
33    color: #035FB5; 
34
35</style> 
36<ul class="custom-simple-list-w-icon" style="--urlIcon: url('/documents/37638/39612/list-style-square-icon.svg/80e3941c-0052-6c5d-1976-2d29526843ac?t=1737538625301');"> 
37  <#list entries as curEntry> 
38  <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
39  <#if className=="com.liferay.journal.model.JournalArticle" && 
40  curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
41  <#assign title=curEntry.getTitle(locale) 
42  viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}"/> 
43  <li> 
44    <a href="${viewURL}" title="${title}">${title}</a> 
45  </li> 
46</#if> 
47</#list> 
48</ul> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#47215" at line 38, column 21]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#47215" at line 38, column 12]
----
1<style> 
2  ul.custom-simple-list-w-icon { 
3 
4    cursor: pointer; 
5    list-style-position: bottom; 
6
7 
8  ul.custom-simple-list-w-icon li { 
9    position: relative; 
10    text-align: start!important; 
11    padding: 5px 5px 5px 20px; 
12    color: #2E2E2E; 
13    font-size: clamp(14px, 2vw, 16px); 
14    font-weight: 500; 
15
16  ul.custom-simple-list-w-icon li::before { 
17    content: ''; 
18    position: absolute; 
19    left: 5px; 
20    top: 12px; 
21    width: 10px; 
22    height: 10px; 
23    background-color: #035FB5; 
24    -webkit-mask: var(--urlIcon) no-repeat center; 
25    mask: var(--urlIcon) no-repeat center; 
26    transition: background-color 0.3s; 
27
28  ul.custom-simple-list-w-icon li:hover::before{ 
29    background-color: #DE6F18; 
30
31 
32  ul.custom-simple-list-w-icon li:hover { 
33    color: #035FB5; 
34
35</style> 
36<ul class="custom-simple-list-w-icon" style="--urlIcon: url('/documents/37638/39612/list-style-square-icon.svg/80e3941c-0052-6c5d-1976-2d29526843ac?t=1737538625301');"> 
37  <#list entries as curEntry> 
38  <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
39  <#if className=="com.liferay.journal.model.JournalArticle" && 
40  curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
41  <#assign title=curEntry.getTitle(locale) 
42  viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}"/> 
43  <li> 
44    <a href="${viewURL}" title="${title}">${title}</a> 
45  </li> 
46</#if> 
47</#list> 
48</ul> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#47215" at line 38, column 21]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#47215" at line 38, column 12]
----
1<style> 
2  ul.custom-simple-list-w-icon { 
3 
4    cursor: pointer; 
5    list-style-position: bottom; 
6
7 
8  ul.custom-simple-list-w-icon li { 
9    position: relative; 
10    text-align: start!important; 
11    padding: 5px 5px 5px 20px; 
12    color: #2E2E2E; 
13    font-size: clamp(14px, 2vw, 16px); 
14    font-weight: 500; 
15
16  ul.custom-simple-list-w-icon li::before { 
17    content: ''; 
18    position: absolute; 
19    left: 5px; 
20    top: 12px; 
21    width: 10px; 
22    height: 10px; 
23    background-color: #035FB5; 
24    -webkit-mask: var(--urlIcon) no-repeat center; 
25    mask: var(--urlIcon) no-repeat center; 
26    transition: background-color 0.3s; 
27
28  ul.custom-simple-list-w-icon li:hover::before{ 
29    background-color: #DE6F18; 
30
31 
32  ul.custom-simple-list-w-icon li:hover { 
33    color: #035FB5; 
34
35</style> 
36<ul class="custom-simple-list-w-icon" style="--urlIcon: url('/documents/37638/39612/list-style-square-icon.svg/80e3941c-0052-6c5d-1976-2d29526843ac?t=1737538625301');"> 
37  <#list entries as curEntry> 
38  <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
39  <#if className=="com.liferay.journal.model.JournalArticle" && 
40  curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
41  <#assign title=curEntry.getTitle(locale) 
42  viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}"/> 
43  <li> 
44    <a href="${viewURL}" title="${title}">${title}</a> 
45  </li> 
46</#if> 
47</#list> 
48</ul> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#47215" at line 38, column 21]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#47215" at line 38, column 12]
----
1<style> 
2  ul.custom-simple-list-w-icon { 
3 
4    cursor: pointer; 
5    list-style-position: bottom; 
6
7 
8  ul.custom-simple-list-w-icon li { 
9    position: relative; 
10    text-align: start!important; 
11    padding: 5px 5px 5px 20px; 
12    color: #2E2E2E; 
13    font-size: clamp(14px, 2vw, 16px); 
14    font-weight: 500; 
15
16  ul.custom-simple-list-w-icon li::before { 
17    content: ''; 
18    position: absolute; 
19    left: 5px; 
20    top: 12px; 
21    width: 10px; 
22    height: 10px; 
23    background-color: #035FB5; 
24    -webkit-mask: var(--urlIcon) no-repeat center; 
25    mask: var(--urlIcon) no-repeat center; 
26    transition: background-color 0.3s; 
27
28  ul.custom-simple-list-w-icon li:hover::before{ 
29    background-color: #DE6F18; 
30
31 
32  ul.custom-simple-list-w-icon li:hover { 
33    color: #035FB5; 
34
35</style> 
36<ul class="custom-simple-list-w-icon" style="--urlIcon: url('/documents/37638/39612/list-style-square-icon.svg/80e3941c-0052-6c5d-1976-2d29526843ac?t=1737538625301');"> 
37  <#list entries as curEntry> 
38  <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
39  <#if className=="com.liferay.journal.model.JournalArticle" && 
40  curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
41  <#assign title=curEntry.getTitle(locale) 
42  viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}"/> 
43  <li> 
44    <a href="${viewURL}" title="${title}">${title}</a> 
45  </li> 
46</#if> 
47</#list> 
48</ul> 

CHỈ ĐẠO ĐIỀU HÀNH CỦA CHÍNH PHỦ

VB CHỈ ĐẠO ĐIỀU HÀNH CHÍNH PHỦ

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 12]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 1]
----
1<style> 
2    /* block 10 */ 
3    .img-news-block-10 { 
4        width: 100%; 
5        aspect-ratio: 4 / 3; 
6        object-fit: cover; 
7        border-radius: 10px; 
8        transition: 0.3s ease; 
9
10 
11    .title-first-news-block-10 { 
12        font-size: clamp(14px, 3vw, 18px); 
13        font-weight: 700; 
14        line-height: 25.2px; 
15        text-align: left; 
16        color: rgba(46, 46, 46, 1); 
17
18 
19    .line-block-10 { 
20        height: 1px; 
21        background-color: rgba(235, 235, 235, 1); 
22
23    .icon-news-block-10 { 
24        border-right: 1px solid rgb(129, 128, 128); 
25        padding-right: 10px; 
26
27    .title-sub-news-block-10 { 
28        position: relative; 
29        padding: 15px 5px 15px 45px; 
30        font-size: clamp(14px, 3vw, 16px); 
31        font-weight: 500; 
32        color: #2E2E2E; 
33        cursor: pointer; 
34        transition: all 0.2s; 
35
36    .title-sub-news-block-10::before { 
37        content: ''; 
38        position: absolute; 
39        left: 5px; 
40        top: 20px; 
41        width: 20px; 
42        height: 20px; 
43        background-color: #2E2E2E; 
44        transition: background-color 0.2s; 
45        -webkit-mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
46        mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
47
48    .title-sub-news-block-10:hover::before { 
49        background-color: #DE6F18; 
50 
51
52 
53    .sub-news-block-10:hover { 
54        cursor: pointer; 
55        .title-sub-news-block-10 { 
56            color: rgba(3, 95, 181, 1); 
57
58        .icon-news-block-10 { 
59            filter: invert(33%) sepia(100%) saturate(500%) brightness(115%); 
60            border-right: 1px solid rgb(129, 128, 128) !important; 
61
62
63    .wrap-first-news-block-10:hover { 
64        cursor: pointer; 
65        .img-news-block-10 { 
66            box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); 
67
68        .title-first-news-block-10 { 
69            color: rgba(3, 95, 181, 1); 
70
71
72    .sub-news-block-10 .divider-yy { 
73        position: absolute; 
74        height: 25px; 
75        width: 1px; 
76        background: #ACB0B3; 
77        left: 35px; 
78        top: 20px; 
79
80 
81    @media only screen and (max-width: 576px) { 
82        .img-news-block-10 { 
83            max-width: 100%; 
84
85
86</style> 
87<#assign indexLocal = 0/> 
88<#list entries as curEntry> 
89<#assign 
90renderer = curEntry.getAssetRenderer() 
91className = renderer.getClassName() /> 
92<#if className == "com.liferay.journal.model.JournalArticle" && curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 4> 
93<#assign 
94title = curEntry.getTitle(locale) 
95article = renderer.getArticle() 
96noiDung = article.getContent() 
97idBaiViet = article.getId() 
98viewURL = "${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
99indexLocal = indexLocal + 1 /> 
100<#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
101<#assign smallImageUrl = curEntry.getAssetRenderer().getThumbnailPath(renderRequest) > 
102<#else> 
103<#assign smallImageUrl = "https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg" > 
104</#if> 
105<#if indexLocal == 1> 
106<a class="row wrap-first-news-block-10 mx-auto" href="${viewURL}" title="${title}"> 
107    <div class="col-12 col-md-4 col-lg-3 col-xl-6 px-0"> 
108        <img src="${smallImageUrl}" alt="" class="img-news-block-10"> 
109    </div> 
110    <div class="col-12 col-md-8 col-lg-9 px-0 col-xl-6 pl-md-3 align-self-center mt-2 mt-md-0"> 
111        <span class="title-first-news-block-10">${title}</span> 
112    </div> 
113</a> 
114 
115<#else> 
116<div class="line-block-10 my-2"></div> 
117<a class="d-flex sub-news-block-10" href="${viewURL}" title="${title}"> 
118    <div class="title-sub-news-block-10 "> <div class="divider-yy"></div>${title}</div> 
119</a> 
120</#if> 
121</#if> 
122</#list> 

HỘI ĐỒNG NHÂN DÂN THÀNH PHỐ

Xuất bản thông tin

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 12]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 1]
----
1<style> 
2    /* block 10 */ 
3    .img-news-block-10 { 
4        width: 100%; 
5        aspect-ratio: 4 / 3; 
6        object-fit: cover; 
7        border-radius: 10px; 
8        transition: 0.3s ease; 
9
10 
11    .title-first-news-block-10 { 
12        font-size: clamp(14px, 3vw, 18px); 
13        font-weight: 700; 
14        line-height: 25.2px; 
15        text-align: left; 
16        color: rgba(46, 46, 46, 1); 
17
18 
19    .line-block-10 { 
20        height: 1px; 
21        background-color: rgba(235, 235, 235, 1); 
22
23    .icon-news-block-10 { 
24        border-right: 1px solid rgb(129, 128, 128); 
25        padding-right: 10px; 
26
27    .title-sub-news-block-10 { 
28        position: relative; 
29        padding: 15px 5px 15px 45px; 
30        font-size: clamp(14px, 3vw, 16px); 
31        font-weight: 500; 
32        color: #2E2E2E; 
33        cursor: pointer; 
34        transition: all 0.2s; 
35
36    .title-sub-news-block-10::before { 
37        content: ''; 
38        position: absolute; 
39        left: 5px; 
40        top: 20px; 
41        width: 20px; 
42        height: 20px; 
43        background-color: #2E2E2E; 
44        transition: background-color 0.2s; 
45        -webkit-mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
46        mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
47
48    .title-sub-news-block-10:hover::before { 
49        background-color: #DE6F18; 
50 
51
52 
53    .sub-news-block-10:hover { 
54        cursor: pointer; 
55        .title-sub-news-block-10 { 
56            color: rgba(3, 95, 181, 1); 
57
58        .icon-news-block-10 { 
59            filter: invert(33%) sepia(100%) saturate(500%) brightness(115%); 
60            border-right: 1px solid rgb(129, 128, 128) !important; 
61
62
63    .wrap-first-news-block-10:hover { 
64        cursor: pointer; 
65        .img-news-block-10 { 
66            box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); 
67
68        .title-first-news-block-10 { 
69            color: rgba(3, 95, 181, 1); 
70
71
72    .sub-news-block-10 .divider-yy { 
73        position: absolute; 
74        height: 25px; 
75        width: 1px; 
76        background: #ACB0B3; 
77        left: 35px; 
78        top: 20px; 
79
80 
81    @media only screen and (max-width: 576px) { 
82        .img-news-block-10 { 
83            max-width: 100%; 
84
85
86</style> 
87<#assign indexLocal = 0/> 
88<#list entries as curEntry> 
89<#assign 
90renderer = curEntry.getAssetRenderer() 
91className = renderer.getClassName() /> 
92<#if className == "com.liferay.journal.model.JournalArticle" && curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 4> 
93<#assign 
94title = curEntry.getTitle(locale) 
95article = renderer.getArticle() 
96noiDung = article.getContent() 
97idBaiViet = article.getId() 
98viewURL = "${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
99indexLocal = indexLocal + 1 /> 
100<#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
101<#assign smallImageUrl = curEntry.getAssetRenderer().getThumbnailPath(renderRequest) > 
102<#else> 
103<#assign smallImageUrl = "https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg" > 
104</#if> 
105<#if indexLocal == 1> 
106<a class="row wrap-first-news-block-10 mx-auto" href="${viewURL}" title="${title}"> 
107    <div class="col-12 col-md-4 col-lg-3 col-xl-6 px-0"> 
108        <img src="${smallImageUrl}" alt="" class="img-news-block-10"> 
109    </div> 
110    <div class="col-12 col-md-8 col-lg-9 px-0 col-xl-6 pl-md-3 align-self-center mt-2 mt-md-0"> 
111        <span class="title-first-news-block-10">${title}</span> 
112    </div> 
113</a> 
114 
115<#else> 
116<div class="line-block-10 my-2"></div> 
117<a class="d-flex sub-news-block-10" href="${viewURL}" title="${title}"> 
118    <div class="title-sub-news-block-10 "> <div class="divider-yy"></div>${title}</div> 
119</a> 
120</#if> 
121</#if> 
122</#list> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#995001" at line 67, 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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#995001" at line 67, column 3]
----
1<style> 
2  .dpt-tin-video{ 
3    cursor: pointer; 
4    margin-bottom: 10px; 
5
6  .dpt-tin-video:hover .title-dpt-tin-video{ 
7    color: rgba(3, 95, 181, 1); 
8
9  .dpt-tin-video:hover .img-dpt-size{ 
10    box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); 
11
12  .title-dpt-tin-video { 
13    height: 96px; 
14    background: #E0E0E04D; 
15    overflow-y: auto; 
16    padding: 10px; 
17    font-size: clamp(14px, 2vw, 18px); 
18    font-weight: 700; 
19    line-height: 25.2px; 
20    text-align: left; 
21    color: rgba(46, 46, 46, 1); 
22    scrollbar-width: none; 
23    -ms-overflow-style: none; 
24
25 
26  .title-dpt-tin-video::-webkit-scrollbar { 
27    display: none; 
28
29 
30  .img-dpt-size { 
31    width: 100%; 
32    aspect-ratio: 304 / 228; 
33    border-radius: 10px 10px 0 0; 
34
35  .img-dpt-tin-video{ 
36    object-fit: cover; 
37
38  .dpt-tin-video .under-ws { 
39    bottom: 0; 
40    left: 0; 
41    width: 100%; 
42    height: 20px; 
43    border-radius: 0 0 6px 6px; 
44    background: linear-gradient(180deg, rgba(246, 246, 246, 0) 0%, rgba(246, 246, 246, 0.7) 28.26%, #F6F6F6 99.9%); 
45
46  @media (min-width: 576px) and (max-width: 1023px) { 
47    .wrapper-dpt-tin-video{ 
48      display: flex; 
49      flex-wrap: wrap; 
50      margin-right: -15px; 
51      margin-left: -15px; 
52
53    .custom-col { 
54      width: 50%; 
55      padding: 0 15px; 
56
57    .dpt-tin-video .under-ws{ 
58      display: none; 
59
60
61</style> 
62<div class="wrapper-dpt-tin-video"> 
63  <#assign indexLocal = 0/> 
64  <#if entries?has_content> 
65  <#list entries as curEntry> 
66  <#assign 
67  renderer = curEntry.getAssetRenderer() 
68  className = renderer.getClassName() /> 
69  <#if className == "com.liferay.journal.model.JournalArticle" && curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 4> 
70  <#assign 
71  title = curEntry.getTitle(locale) 
72  article = renderer.getArticle() 
73  noiDung = article.getContent() 
74  idBaiViet = article.getId() 
75  viewURL = "${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
76  indexLocal = indexLocal + 1 /> 
77  <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
78  <#assign smallImageUrl = curEntry.getAssetRenderer().getThumbnailPath(renderRequest) > 
79  <#else> 
80  <#assign smallImageUrl = "https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg" > 
81</#if> 
82<a class="dpt-tin-video position-relative custom-col" href="${viewURL}" title="${title}"> 
83  <img src="${smallImageUrl}" alt="" class="img-dpt-tin-video img-dpt-size position-relative"> 
84  <div class=" title-dpt-tin-video"> 
85    ${title} 
86  </div> 
87  <div class="under-ws position-absolute"> 
88  </div> 
89</a> 
90</#if> 
91</#list> 
92</#if> 
93</div> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#995001" at line 67, 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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#995001" at line 67, column 3]
----
1<style> 
2  .dpt-tin-video{ 
3    cursor: pointer; 
4    margin-bottom: 10px; 
5
6  .dpt-tin-video:hover .title-dpt-tin-video{ 
7    color: rgba(3, 95, 181, 1); 
8
9  .dpt-tin-video:hover .img-dpt-size{ 
10    box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); 
11
12  .title-dpt-tin-video { 
13    height: 96px; 
14    background: #E0E0E04D; 
15    overflow-y: auto; 
16    padding: 10px; 
17    font-size: clamp(14px, 2vw, 18px); 
18    font-weight: 700; 
19    line-height: 25.2px; 
20    text-align: left; 
21    color: rgba(46, 46, 46, 1); 
22    scrollbar-width: none; 
23    -ms-overflow-style: none; 
24
25 
26  .title-dpt-tin-video::-webkit-scrollbar { 
27    display: none; 
28
29 
30  .img-dpt-size { 
31    width: 100%; 
32    aspect-ratio: 304 / 228; 
33    border-radius: 10px 10px 0 0; 
34
35  .img-dpt-tin-video{ 
36    object-fit: cover; 
37
38  .dpt-tin-video .under-ws { 
39    bottom: 0; 
40    left: 0; 
41    width: 100%; 
42    height: 20px; 
43    border-radius: 0 0 6px 6px; 
44    background: linear-gradient(180deg, rgba(246, 246, 246, 0) 0%, rgba(246, 246, 246, 0.7) 28.26%, #F6F6F6 99.9%); 
45
46  @media (min-width: 576px) and (max-width: 1023px) { 
47    .wrapper-dpt-tin-video{ 
48      display: flex; 
49      flex-wrap: wrap; 
50      margin-right: -15px; 
51      margin-left: -15px; 
52
53    .custom-col { 
54      width: 50%; 
55      padding: 0 15px; 
56
57    .dpt-tin-video .under-ws{ 
58      display: none; 
59
60
61</style> 
62<div class="wrapper-dpt-tin-video"> 
63  <#assign indexLocal = 0/> 
64  <#if entries?has_content> 
65  <#list entries as curEntry> 
66  <#assign 
67  renderer = curEntry.getAssetRenderer() 
68  className = renderer.getClassName() /> 
69  <#if className == "com.liferay.journal.model.JournalArticle" && curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 4> 
70  <#assign 
71  title = curEntry.getTitle(locale) 
72  article = renderer.getArticle() 
73  noiDung = article.getContent() 
74  idBaiViet = article.getId() 
75  viewURL = "${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
76  indexLocal = indexLocal + 1 /> 
77  <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
78  <#assign smallImageUrl = curEntry.getAssetRenderer().getThumbnailPath(renderRequest) > 
79  <#else> 
80  <#assign smallImageUrl = "https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg" > 
81</#if> 
82<a class="dpt-tin-video position-relative custom-col" href="${viewURL}" title="${title}"> 
83  <img src="${smallImageUrl}" alt="" class="img-dpt-tin-video img-dpt-size position-relative"> 
84  <div class=" title-dpt-tin-video"> 
85    ${title} 
86  </div> 
87  <div class="under-ws position-absolute"> 
88  </div> 
89</a> 
90</#if> 
91</#list> 
92</#if> 
93</div> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 12]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 1]
----
1<style> 
2    /* block 10 */ 
3    .img-news-block-10 { 
4        width: 100%; 
5        aspect-ratio: 4 / 3; 
6        object-fit: cover; 
7        border-radius: 10px; 
8        transition: 0.3s ease; 
9
10 
11    .title-first-news-block-10 { 
12        font-size: clamp(14px, 3vw, 18px); 
13        font-weight: 700; 
14        line-height: 25.2px; 
15        text-align: left; 
16        color: rgba(46, 46, 46, 1); 
17
18 
19    .line-block-10 { 
20        height: 1px; 
21        background-color: rgba(235, 235, 235, 1); 
22
23    .icon-news-block-10 { 
24        border-right: 1px solid rgb(129, 128, 128); 
25        padding-right: 10px; 
26
27    .title-sub-news-block-10 { 
28        position: relative; 
29        padding: 15px 5px 15px 45px; 
30        font-size: clamp(14px, 3vw, 16px); 
31        font-weight: 500; 
32        color: #2E2E2E; 
33        cursor: pointer; 
34        transition: all 0.2s; 
35
36    .title-sub-news-block-10::before { 
37        content: ''; 
38        position: absolute; 
39        left: 5px; 
40        top: 20px; 
41        width: 20px; 
42        height: 20px; 
43        background-color: #2E2E2E; 
44        transition: background-color 0.2s; 
45        -webkit-mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
46        mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
47
48    .title-sub-news-block-10:hover::before { 
49        background-color: #DE6F18; 
50 
51
52 
53    .sub-news-block-10:hover { 
54        cursor: pointer; 
55        .title-sub-news-block-10 { 
56            color: rgba(3, 95, 181, 1); 
57
58        .icon-news-block-10 { 
59            filter: invert(33%) sepia(100%) saturate(500%) brightness(115%); 
60            border-right: 1px solid rgb(129, 128, 128) !important; 
61
62
63    .wrap-first-news-block-10:hover { 
64        cursor: pointer; 
65        .img-news-block-10 { 
66            box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); 
67
68        .title-first-news-block-10 { 
69            color: rgba(3, 95, 181, 1); 
70
71
72    .sub-news-block-10 .divider-yy { 
73        position: absolute; 
74        height: 25px; 
75        width: 1px; 
76        background: #ACB0B3; 
77        left: 35px; 
78        top: 20px; 
79
80 
81    @media only screen and (max-width: 576px) { 
82        .img-news-block-10 { 
83            max-width: 100%; 
84
85
86</style> 
87<#assign indexLocal = 0/> 
88<#list entries as curEntry> 
89<#assign 
90renderer = curEntry.getAssetRenderer() 
91className = renderer.getClassName() /> 
92<#if className == "com.liferay.journal.model.JournalArticle" && curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 4> 
93<#assign 
94title = curEntry.getTitle(locale) 
95article = renderer.getArticle() 
96noiDung = article.getContent() 
97idBaiViet = article.getId() 
98viewURL = "${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
99indexLocal = indexLocal + 1 /> 
100<#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
101<#assign smallImageUrl = curEntry.getAssetRenderer().getThumbnailPath(renderRequest) > 
102<#else> 
103<#assign smallImageUrl = "https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg" > 
104</#if> 
105<#if indexLocal == 1> 
106<a class="row wrap-first-news-block-10 mx-auto" href="${viewURL}" title="${title}"> 
107    <div class="col-12 col-md-4 col-lg-3 col-xl-6 px-0"> 
108        <img src="${smallImageUrl}" alt="" class="img-news-block-10"> 
109    </div> 
110    <div class="col-12 col-md-8 col-lg-9 px-0 col-xl-6 pl-md-3 align-self-center mt-2 mt-md-0"> 
111        <span class="title-first-news-block-10">${title}</span> 
112    </div> 
113</a> 
114 
115<#else> 
116<div class="line-block-10 my-2"></div> 
117<a class="d-flex sub-news-block-10" href="${viewURL}" title="${title}"> 
118    <div class="title-sub-news-block-10 "> <div class="divider-yy"></div>${title}</div> 
119</a> 
120</#if> 
121</#if> 
122</#list> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 12]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 1]
----
1<style> 
2    /* block 10 */ 
3    .img-news-block-10 { 
4        width: 100%; 
5        aspect-ratio: 4 / 3; 
6        object-fit: cover; 
7        border-radius: 10px; 
8        transition: 0.3s ease; 
9
10 
11    .title-first-news-block-10 { 
12        font-size: clamp(14px, 3vw, 18px); 
13        font-weight: 700; 
14        line-height: 25.2px; 
15        text-align: left; 
16        color: rgba(46, 46, 46, 1); 
17
18 
19    .line-block-10 { 
20        height: 1px; 
21        background-color: rgba(235, 235, 235, 1); 
22
23    .icon-news-block-10 { 
24        border-right: 1px solid rgb(129, 128, 128); 
25        padding-right: 10px; 
26
27    .title-sub-news-block-10 { 
28        position: relative; 
29        padding: 15px 5px 15px 45px; 
30        font-size: clamp(14px, 3vw, 16px); 
31        font-weight: 500; 
32        color: #2E2E2E; 
33        cursor: pointer; 
34        transition: all 0.2s; 
35
36    .title-sub-news-block-10::before { 
37        content: ''; 
38        position: absolute; 
39        left: 5px; 
40        top: 20px; 
41        width: 20px; 
42        height: 20px; 
43        background-color: #2E2E2E; 
44        transition: background-color 0.2s; 
45        -webkit-mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
46        mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
47
48    .title-sub-news-block-10:hover::before { 
49        background-color: #DE6F18; 
50 
51
52 
53    .sub-news-block-10:hover { 
54        cursor: pointer; 
55        .title-sub-news-block-10 { 
56            color: rgba(3, 95, 181, 1); 
57
58        .icon-news-block-10 { 
59            filter: invert(33%) sepia(100%) saturate(500%) brightness(115%); 
60            border-right: 1px solid rgb(129, 128, 128) !important; 
61
62
63    .wrap-first-news-block-10:hover { 
64        cursor: pointer; 
65        .img-news-block-10 { 
66            box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); 
67
68        .title-first-news-block-10 { 
69            color: rgba(3, 95, 181, 1); 
70
71
72    .sub-news-block-10 .divider-yy { 
73        position: absolute; 
74        height: 25px; 
75        width: 1px; 
76        background: #ACB0B3; 
77        left: 35px; 
78        top: 20px; 
79
80 
81    @media only screen and (max-width: 576px) { 
82        .img-news-block-10 { 
83            max-width: 100%; 
84
85
86</style> 
87<#assign indexLocal = 0/> 
88<#list entries as curEntry> 
89<#assign 
90renderer = curEntry.getAssetRenderer() 
91className = renderer.getClassName() /> 
92<#if className == "com.liferay.journal.model.JournalArticle" && curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 4> 
93<#assign 
94title = curEntry.getTitle(locale) 
95article = renderer.getArticle() 
96noiDung = article.getContent() 
97idBaiViet = article.getId() 
98viewURL = "${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
99indexLocal = indexLocal + 1 /> 
100<#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
101<#assign smallImageUrl = curEntry.getAssetRenderer().getThumbnailPath(renderRequest) > 
102<#else> 
103<#assign smallImageUrl = "https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg" > 
104</#if> 
105<#if indexLocal == 1> 
106<a class="row wrap-first-news-block-10 mx-auto" href="${viewURL}" title="${title}"> 
107    <div class="col-12 col-md-4 col-lg-3 col-xl-6 px-0"> 
108        <img src="${smallImageUrl}" alt="" class="img-news-block-10"> 
109    </div> 
110    <div class="col-12 col-md-8 col-lg-9 px-0 col-xl-6 pl-md-3 align-self-center mt-2 mt-md-0"> 
111        <span class="title-first-news-block-10">${title}</span> 
112    </div> 
113</a> 
114 
115<#else> 
116<div class="line-block-10 my-2"></div> 
117<a class="d-flex sub-news-block-10" href="${viewURL}" title="${title}"> 
118    <div class="title-sub-news-block-10 "> <div class="divider-yy"></div>${title}</div> 
119</a> 
120</#if> 
121</#if> 
122</#list> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 12]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#48486" at line 90, column 1]
----
1<style> 
2    /* block 10 */ 
3    .img-news-block-10 { 
4        width: 100%; 
5        aspect-ratio: 4 / 3; 
6        object-fit: cover; 
7        border-radius: 10px; 
8        transition: 0.3s ease; 
9
10 
11    .title-first-news-block-10 { 
12        font-size: clamp(14px, 3vw, 18px); 
13        font-weight: 700; 
14        line-height: 25.2px; 
15        text-align: left; 
16        color: rgba(46, 46, 46, 1); 
17
18 
19    .line-block-10 { 
20        height: 1px; 
21        background-color: rgba(235, 235, 235, 1); 
22
23    .icon-news-block-10 { 
24        border-right: 1px solid rgb(129, 128, 128); 
25        padding-right: 10px; 
26
27    .title-sub-news-block-10 { 
28        position: relative; 
29        padding: 15px 5px 15px 45px; 
30        font-size: clamp(14px, 3vw, 16px); 
31        font-weight: 500; 
32        color: #2E2E2E; 
33        cursor: pointer; 
34        transition: all 0.2s; 
35
36    .title-sub-news-block-10::before { 
37        content: ''; 
38        position: absolute; 
39        left: 5px; 
40        top: 20px; 
41        width: 20px; 
42        height: 20px; 
43        background-color: #2E2E2E; 
44        transition: background-color 0.2s; 
45        -webkit-mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
46        mask: url('/documents/37638/39612/icon-news-gray.svg/7baa887d-cba6-5bd4-e1cf-1ebb6495a01b?t=1737532773364') no-repeat center; 
47
48    .title-sub-news-block-10:hover::before { 
49        background-color: #DE6F18; 
50 
51
52 
53    .sub-news-block-10:hover { 
54        cursor: pointer; 
55        .title-sub-news-block-10 { 
56            color: rgba(3, 95, 181, 1); 
57
58        .icon-news-block-10 { 
59            filter: invert(33%) sepia(100%) saturate(500%) brightness(115%); 
60            border-right: 1px solid rgb(129, 128, 128) !important; 
61
62
63    .wrap-first-news-block-10:hover { 
64        cursor: pointer; 
65        .img-news-block-10 { 
66            box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); 
67
68        .title-first-news-block-10 { 
69            color: rgba(3, 95, 181, 1); 
70
71
72    .sub-news-block-10 .divider-yy { 
73        position: absolute; 
74        height: 25px; 
75        width: 1px; 
76        background: #ACB0B3; 
77        left: 35px; 
78        top: 20px; 
79
80 
81    @media only screen and (max-width: 576px) { 
82        .img-news-block-10 { 
83            max-width: 100%; 
84
85
86</style> 
87<#assign indexLocal = 0/> 
88<#list entries as curEntry> 
89<#assign 
90renderer = curEntry.getAssetRenderer() 
91className = renderer.getClassName() /> 
92<#if className == "com.liferay.journal.model.JournalArticle" && curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 4> 
93<#assign 
94title = curEntry.getTitle(locale) 
95article = renderer.getArticle() 
96noiDung = article.getContent() 
97idBaiViet = article.getId() 
98viewURL = "${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
99indexLocal = indexLocal + 1 /> 
100<#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
101<#assign smallImageUrl = curEntry.getAssetRenderer().getThumbnailPath(renderRequest) > 
102<#else> 
103<#assign smallImageUrl = "https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg" > 
104</#if> 
105<#if indexLocal == 1> 
106<a class="row wrap-first-news-block-10 mx-auto" href="${viewURL}" title="${title}"> 
107    <div class="col-12 col-md-4 col-lg-3 col-xl-6 px-0"> 
108        <img src="${smallImageUrl}" alt="" class="img-news-block-10"> 
109    </div> 
110    <div class="col-12 col-md-8 col-lg-9 px-0 col-xl-6 pl-md-3 align-self-center mt-2 mt-md-0"> 
111        <span class="title-first-news-block-10">${title}</span> 
112    </div> 
113</a> 
114 
115<#else> 
116<div class="line-block-10 my-2"></div> 
117<a class="d-flex sub-news-block-10" href="${viewURL}" title="${title}"> 
118    <div class="title-sub-news-block-10 "> <div class="divider-yy"></div>${title}</div> 
119</a> 
120</#if> 
121</#if> 
122</#list> 
VĂN BẢN ĐIỆN TỬ
Đến tháng 7/2025
Thành phố Đà Nẵng đã trao đổi
1999094
văn bản qua mạng
giữa 500 đơn vị

(Tự động cập nhật lúc 0:0 ngày 23/07/2025)
MỘT CỬA ĐIỆN TỬ

Đến nay, Thành phố Đà Nẵng

đã giải quyết được

99,99%

Hồ sơ đúng hạn

(Tự động cập nhật lúc 08:18 ngày 23/07/2025)

cauhoi icon

Hóa đơn cho hàng hóa tự làm

Người gửi: Nguyễn Định

Địa chỉ: Thôn Yến Nê 2, Hòa Tiến, Hòa Vang, TP Đà Nẵng

Thời gian: 12/02/2025

cauhoi icon

Thủ tục đăng ký thi Lớp 10 công lập của HS ngoại tỉnh

Người gửi: Trần Thị Hạnh

Địa chỉ: 30/12 Trần Phú, quận Hải Châu, TP. Đà Nẵng

Thời gian: 12/02/2025

cauhoi icon

Trường tiểu học Trưng Nữ Vương gây khó khăn cho học sinh bán trú ngoài trường

Người gửi: Nguyễn Thị Dung

Địa chỉ: tổ 7, phường Hòa Hiệp Nam, Liên Chiểu, Đà Nẵng

Thời gian: 12/02/2025

cauhoi icon

Tuyển sinh trực tuyến

Người gửi: Nguyễn Thị Diễm My

Địa chỉ: Tổ 78, Phường Khuê Trung, quận Cẩm Lệ

Thời gian: 12/02/2025

cauhoi icon

Câu hỏi về cách đăng ký cấp tài khoản cho thí sinh tự do học văn hoá và tốt nghiệp tại trường Cao Đẳng

Người gửi: Trang Trần Thảo Vy

Địa chỉ: K96/85 Điện Biên Phủ, phường Chính Gián, quận Thanh Khê, TP.Đà Nẵng

Thời gian: 12/02/2025

cauhoi icon

Đăng kí tạm trú đã có giấy xác nhận nhưng sau gần 20 ngày vẫn chưa được cập nhật trên hệ thống VNID

Người gửi: Nguyễn Thị Tiên

Địa chỉ: Hòa Khánh Bắc

Thời gian: 15/01/2025

HoiDap

cauhoi icon

GIẢI QUYẾT CẢI CHÍNH GIẤY CHỨNG TỬ

Người gửi: Nguyễn Thị Thu Thủy

Địa chỉ: Thôn Hà Tây 2, Điện Hòa

Ngày gửi: 17/12/2025

cauhoi icon

Chế độ ưu đãi cho giáo viên nghỉ thai sản

Người gửi: TRẦN THỊ THANH TÂM

Địa chỉ: Xã Quế Sơn Trung - Thành phố Đà Nẵng

Ngày gửi: 09/12/2025

cauhoi icon

Về việc chỉ phần trăm đứng lớp 30% cho giáo viên hợp đồng 111

Người gửi: Doãn Thị Hoài Khương

Địa chỉ: xã Tam Anh, TP Đà Nẵng

Ngày gửi: 04/12/2025

cauhoi icon

Vấn Đề Tiếng Ồn Vào Sáng Sớm Quá Mức Tại Sân Trung Tâm Văn Hoá & Thể Thao Phường Mỹ An

Người gửi: Phạm Thị Phương Thảo

Địa chỉ: k01/19 Phan Hành Sơn, Mỹ An, Ngũ Hành Sơn, Đà Nẵng

Ngày gửi: 01/12/2025

cauhoi icon

Thăng hạng GV THCS từ hạng III lên hạng II

Người gửi: Lê Văn Nam

Địa chỉ: Xã Trà My, TP Đà Nẵng

Ngày gửi: 30/11/2025

cauhoi icon

Xét thăng hạng cho giáo viên các cấp

Người gửi: Nguyễn Thị Lan

Địa chỉ: Tổ 1, Ngũ Hành Sơn, Đà Nẵng

Ngày gửi: 30/11/2025

DU KHÁCH

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#293297" at line 164, column 27]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#293297" at line 164, column 18]
----
1<style> 
2  .slider-container { 
3    padding: 10px 0 35px; 
4    max-height: 100vh; 
5
6 
7  .slider-basic .slides-wrapper { 
8    margin: auto; 
9    overflow: hidden; 
10
11 
12  .slider-basic .slider-list { 
13    list-style-type: none; 
14    margin: 0; 
15    padding: 0; 
16    display: flex; 
17    overflow: hidden; 
18    transition: 1s; 
19    max-height: calc(100vh - 80px); 
20
21 
22  .slider-basic .slider-item { 
23    background-color: white; 
24    padding: 3px; 
25    margin: 0 16px 5px 0; 
26    box-shadow: -4px 4px 6px rgba(0, 0, 0, 0.25); 
27    border-radius: 6px; 
28 
29 
30
31 
32  .slider-basic .slider-item .card-link { 
33    text-decoration: none; 
34
35 
36  .slider-basic .slider-item .card-link .tieude { 
37    padding: 14px; 
38    height: 120px; 
39    color: #2E2E2E; 
40    font-weight: 700; 
41    font-size: clamp(14px, 2vw, 16px); 
42    line-height: 22.4px; 
43
44 
45  .slider-basic .slider-item:hover .card-link .tieude { 
46    background: linear-gradient(225.35deg, #379EFF -6.25%, #004F99 106.95%); 
47    color: white; 
48
49 
50  .slider-basic .slider-item img { 
51    width: 100%; 
52    aspect-ratio: 4 / 3; 
53    object-fit: cover; 
54
55 
56  .slider-arrows { 
57    width: calc(100% + 70px); 
58    height: 30px; 
59    top: calc(50% - 15px); 
60    left: -35px; 
61
62 
63  .slider-arrow-prev, 
64  .slider-arrow-next { 
65    border: none; 
66    background: none; 
67
68 
69  .slider-arrow-prev svg { 
70    transform: rotate(180deg); 
71
72 
73  .slider-arrow-prev path, 
74  .slider-arrow-next path { 
75    fill: #DE6F18; 
76
77 
78  .slider-arrow-prev.disable path, 
79  .slider-arrow-next.disable path { 
80    fill: #ACB0B3; 
81
82 
83 
84  .slider-container .cus-slider-indicators { 
85    position: absolute; 
86    bottom: 0; 
87    left: 50%; 
88    transform: translateX(-50%); 
89    display: flex; 
90    align-items: center; 
91    gap: 8px; 
92
93 
94  .slider-container .slider-indicator { 
95    width: 25px; 
96    height: 10px; 
97    background-color: #E0E0E0; 
98    border-radius: 5px; 
99    cursor: pointer; 
100    transition: 0.3s; 
101
102 
103  .slider-container .slider-indicator.active { 
104    background-color: #DE6F18; 
105    width: 15px; 
106    height: 15px; 
107    border-radius: 100%; 
108
109  @media (max-width: 992px) { 
110    .slider-container { 
111      padding: 10px 10px 35px; 
112
113    .slider-arrows { 
114      width: calc(100% + 43px); 
115      left: -22px; 
116
117
118 
119  @media (max-width: 992px) { 
120    .slider-container { 
121      padding: 10px 10px 35px; 
122
123    .slider-arrows { 
124      width: calc(100% + 43px); 
125      left: -22px; 
126
127
128 
129  @media only screen and (min-width: 768px) and (max-width: 992px) { 
130    .slider-container { 
131      overflow: hidden; 
132      padding: 10px 30px 35px !important; 
133
134    .slider-arrows { 
135      width: calc(95% + 43px) !important; 
136      left: -5px !important; 
137
138    .slider-basic .slides-wrapper { 
139      margin: unset; 
140
141    .slider-container .slider-arrows{ 
142        z-index: 9; 
143        padding: 0 !important; 
144
145
146 
147  @media (max-width: 576px) { 
148    .slider-basic .slides-wrapper { 
149      margin: unset; 
150
151    .slider-container .slider-arrows{ 
152        z-index: 9; 
153        padding: 0 15px !important; 
154
155
156</style> 
157 
158<div class="slider-container position-relative slider-basic" id="sliderBasic"> 
159  <div class="slides-wrapper"> 
160    <div class="slides-container"> 
161      <ul class="slider-list"> 
162        <#if entries?has_content> 
163        <#list entries as curEntry> 
164        <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
165        <#if className=="com.liferay.journal.model.JournalArticle" && 
166        curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
167        <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
168        description=article.getDescription(locale) ddmTemplateKey=article.getDDMTemplateKey() 
169        curEntry=curEntry 
170        viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}"/> 
171        <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
172        <#assign smallImageUrlSide=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
173        <#else> 
174        <#assign smallImageUrlSide="https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
175      </#if> 
176 
177      <li class="slider-item"> 
178        <a href="${viewURL}" class="card-link" title="${title}"> 
179          <img src="${htmlUtil.escape(smallImageUrlSide)}" alt="${htmlUtil.escape(title)}" /> 
180          <div class="tieude"> 
181            <p class="mb-0">${htmlUtil.escape(title)}</p> 
182          </div> 
183        </a> 
184      </li> 
185    </#if> 
186  </#list> 
187</#if> 
188 
189</ul> 
190</div> 
191</div> 
192<div class="slider-arrows position-absolute d-flex justify-content-between"> 
193  <button type="button" class="slider-arrow-prev"> 
194    <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> 
195      <mask id="mask0_1865_10187" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" 
196            width="28" height="28"> 
197        <path 
198                d="M14 26.5C20.9037 26.5 26.5 20.9037 26.5 14C26.5 7.09625 20.9037 1.5 14 1.5C7.09625 1.5 1.5 7.09625 1.5 14C1.5 20.9037 7.09625 26.5 14 26.5Z" 
199                fill="#555555" stroke="white" stroke-width="1.66667" stroke-linejoin="round" /> 
200        <path d="M12.125 19.625L17.75 14L12.125 8.375" stroke="white" stroke-width="1.66667" 
201              stroke-linecap="round" stroke-linejoin="round" /> 
202      </mask> 
203      <g mask="url(#mask0_1865_10187)"> 
204        <path d="M-1 -1H29V29H-1V-1Z" fill="#DE6F18" /> 
205      </g> 
206    </svg> 
207 
208  </button> 
209  <button type="button" class="slider-arrow-next"> 
210 
211    <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> 
212      <mask id="mask0_1865_10187" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" 
213            width="28" height="28"> 
214        <path 
215                d="M14 26.5C20.9037 26.5 26.5 20.9037 26.5 14C26.5 7.09625 20.9037 1.5 14 1.5C7.09625 1.5 1.5 7.09625 1.5 14C1.5 20.9037 7.09625 26.5 14 26.5Z" 
216                fill="#555555" stroke="white" stroke-width="1.66667" stroke-linejoin="round" /> 
217        <path d="M12.125 19.625L17.75 14L12.125 8.375" stroke="white" stroke-width="1.66667" 
218              stroke-linecap="round" stroke-linejoin="round" /> 
219      </mask> 
220      <g mask="url(#mask0_1865_10187)"> 
221        <path d="M-1 -1H29V29H-1V-1Z" fill="#DE6F18" /> 
222      </g> 
223    </svg> 
224  </button> 
225</div> 
226<div class="cus-slider-indicators"></div> 
227</div> 
228<script> 
229  (function () { 
230    'use strict'; 
231    class Slider { 
232      constructor(id, mediaQueries) { 
233        // Get HTML elements 
234        this.slider = document.querySelector('#' + id); 
235        this.sliderList = this.slider.querySelector('.slider-list'); 
236        this.sliderItems = this.slider.querySelectorAll('.slider-item'); 
237        this.sliderNext = this.slider.querySelector('.slider-arrow-next'); 
238        this.sliderPrev = this.slider.querySelector('.slider-arrow-prev'); 
239        this.indicatorsContainer = this.slider.querySelector('.cus-slider-indicators'); 
240 
241        this.currentIndex = 0; 
242        this.totalSlides = this.sliderItems.length; 
243 
244        this.createIndicators(); 
245        this.updateIndicators(); 
246 
247        // Get media queries 
248        this.mediaQueryList = [window.matchMedia('screen and (max-width:'+ (mediaQueries[0] - 1) +'px)')]; 
249 
250        mediaQueries.forEach((mediaQuery) => { 
251          this.mediaQueryList.push(window.matchMedia('screen and (min-width:'+ mediaQuery +'px)')); 
252        }); 
253 
254        // Define global variables 
255        this.numberOfVisibleItems = null; 
256        this.currentItemIndex = 0; 
257        this.sliderItemsLength = this.sliderItems.length; 
258        this.mediaQueryLength = this.mediaQueryList.length; 
259 
260        // Add event listener: to call the run function again when screen resized 
261        this.mediaQueryList.forEach((mediaQuery) => { 
262          mediaQuery.addEventListener('change', () => this.run()); 
263        }); 
264 
265        // Add event listener: to go to next slide 
266        this.sliderNext.addEventListener('click', () => this.nextSlide()); 
267 
268        // Add event listener: to go to previous slide 
269        this.sliderPrev.addEventListener('click', () => this.prevSlide()); 
270 
271        // Add event listener for indicators 
272        this.indicatorDots.forEach((dot) => { 
273          dot.addEventListener('click', (e) => this.goToSlide(parseInt(e.target.dataset.index))); 
274        }); 
275 
276        this.run(); 
277
278      static generateId() { 
279        const randomId = `sliderBasic` + Math.floor(Math.random() * 999); 
280        return randomId; 
281
282 
283      createIndicators() { 
284        this.indicatorsContainer.innerHTML = ''; // Clear existing indicators 
285        for (let i = 0; i < this.getIndicatorCount(); i++) { 
286          let indicator = document.createElement('div'); 
287          indicator.classList.add('slider-indicator'); 
288          indicator.dataset.index = i; 
289          if (i < 5) { 
290            this.indicatorsContainer.appendChild(indicator); 
291
292
293        this.indicatorDots = this.indicatorsContainer.querySelectorAll('.slider-indicator'); 
294
295 
296      getIndicatorCount() { 
297        if (window.innerWidth >= 992) return this.totalSlides - 3; 
298        if (window.innerWidth >= 768) return this.totalSlides - 2; 
299        if (window.innerWidth >= 576) return this.totalSlides - 1; 
300        return this.totalSlides; 
301
302 
303      updateIndicators() { 
304        this.indicatorDots.forEach(dot => dot.classList.remove('active')); 
305        if (this.indicatorDots[this.currentIndex]) { 
306          this.indicatorDots[this.currentIndex].classList.add('active'); 
307
308 
309        if (this.getIndicatorCount() > 4 && this.currentIndex > 4) { 
310          console.log('this.indicatorDots', this.indicatorDots) 
311          this.indicatorDots[4].classList.add('active'); 
312
313 
314
315 
316      nextSlide() { 
317        if (this.currentItemIndex < this.sliderItemsLength - this.numberOfVisibleItems) { 
318          this.currentItemIndex++; 
319          this.shiftSlides(); 
320
321
322 
323      prevSlide() { 
324        if (this.currentItemIndex > 0) { 
325          this.currentItemIndex--; 
326          this.shiftSlides(); 
327
328
329 
330      goToSlide(index) { 
331        if (index >= 0 && index < this.sliderItemsLength) { 
332          this.currentItemIndex = index; 
333          this.shiftSlides(); 
334
335
336 
337      shiftSlides() { 
338        this.sliderList.style.transform = 'translateX(-' + ((100 / this.sliderItemsLength) * this.currentItemIndex) + '%)'; 
339        this.currentIndex = this.currentItemIndex; 
340        this.updateIndicators(); 
341
342 
343      run() { 
344        let index = this.mediaQueryLength - 1; 
345        while (index >= 0) { 
346          if (this.mediaQueryList[index].matches) { 
347            this.numberOfVisibleItems = index + 1; 
348 
349            // Reset the slider 
350            this.currentItemIndex = 0; 
351            this.sliderList.style.transform = 'translateX(0%)'; 
352 
353            // Set slider list width 
354            this.sliderList.style.width = 'calc(' + ((100 / this.numberOfVisibleItems) * this.sliderItemsLength) + '% + ' + ((this.sliderItemsLength / this.numberOfVisibleItems) * 16) + 'px)'; 
355 
356 
357            // Set slides width 
358            this.sliderItems.forEach((item) => { 
359              item.style.width = (100 / this.numberOfVisibleItems) + '%'; 
360            }); 
361 
362            this.updateIndicators(); 
363            break; 
364
365          index--; 
366
367
368
369 
370    const sliderElement = document.getElementById("sliderBasic"); 
371    if (sliderElement) { 
372      const sliderId = Slider.generateId(); 
373      sliderElement.id = sliderId; 
374      new Slider(sliderId, [576, 768, 992]); 
375    } else { 
376      console.error("Không tìm thấy slider với ID 'sliderBasic'"); 
377
378  })(); 
379 
380</script> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#293297" at line 164, column 27]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#293297" at line 164, column 18]
----
1<style> 
2  .slider-container { 
3    padding: 10px 0 35px; 
4    max-height: 100vh; 
5
6 
7  .slider-basic .slides-wrapper { 
8    margin: auto; 
9    overflow: hidden; 
10
11 
12  .slider-basic .slider-list { 
13    list-style-type: none; 
14    margin: 0; 
15    padding: 0; 
16    display: flex; 
17    overflow: hidden; 
18    transition: 1s; 
19    max-height: calc(100vh - 80px); 
20
21 
22  .slider-basic .slider-item { 
23    background-color: white; 
24    padding: 3px; 
25    margin: 0 16px 5px 0; 
26    box-shadow: -4px 4px 6px rgba(0, 0, 0, 0.25); 
27    border-radius: 6px; 
28 
29 
30
31 
32  .slider-basic .slider-item .card-link { 
33    text-decoration: none; 
34
35 
36  .slider-basic .slider-item .card-link .tieude { 
37    padding: 14px; 
38    height: 120px; 
39    color: #2E2E2E; 
40    font-weight: 700; 
41    font-size: clamp(14px, 2vw, 16px); 
42    line-height: 22.4px; 
43
44 
45  .slider-basic .slider-item:hover .card-link .tieude { 
46    background: linear-gradient(225.35deg, #379EFF -6.25%, #004F99 106.95%); 
47    color: white; 
48
49 
50  .slider-basic .slider-item img { 
51    width: 100%; 
52    aspect-ratio: 4 / 3; 
53    object-fit: cover; 
54
55 
56  .slider-arrows { 
57    width: calc(100% + 70px); 
58    height: 30px; 
59    top: calc(50% - 15px); 
60    left: -35px; 
61
62 
63  .slider-arrow-prev, 
64  .slider-arrow-next { 
65    border: none; 
66    background: none; 
67
68 
69  .slider-arrow-prev svg { 
70    transform: rotate(180deg); 
71
72 
73  .slider-arrow-prev path, 
74  .slider-arrow-next path { 
75    fill: #DE6F18; 
76
77 
78  .slider-arrow-prev.disable path, 
79  .slider-arrow-next.disable path { 
80    fill: #ACB0B3; 
81
82 
83 
84  .slider-container .cus-slider-indicators { 
85    position: absolute; 
86    bottom: 0; 
87    left: 50%; 
88    transform: translateX(-50%); 
89    display: flex; 
90    align-items: center; 
91    gap: 8px; 
92
93 
94  .slider-container .slider-indicator { 
95    width: 25px; 
96    height: 10px; 
97    background-color: #E0E0E0; 
98    border-radius: 5px; 
99    cursor: pointer; 
100    transition: 0.3s; 
101
102 
103  .slider-container .slider-indicator.active { 
104    background-color: #DE6F18; 
105    width: 15px; 
106    height: 15px; 
107    border-radius: 100%; 
108
109  @media (max-width: 992px) { 
110    .slider-container { 
111      padding: 10px 10px 35px; 
112
113    .slider-arrows { 
114      width: calc(100% + 43px); 
115      left: -22px; 
116
117
118 
119  @media (max-width: 992px) { 
120    .slider-container { 
121      padding: 10px 10px 35px; 
122
123    .slider-arrows { 
124      width: calc(100% + 43px); 
125      left: -22px; 
126
127
128 
129  @media only screen and (min-width: 768px) and (max-width: 992px) { 
130    .slider-container { 
131      overflow: hidden; 
132      padding: 10px 30px 35px !important; 
133
134    .slider-arrows { 
135      width: calc(95% + 43px) !important; 
136      left: -5px !important; 
137
138    .slider-basic .slides-wrapper { 
139      margin: unset; 
140
141    .slider-container .slider-arrows{ 
142        z-index: 9; 
143        padding: 0 !important; 
144
145
146 
147  @media (max-width: 576px) { 
148    .slider-basic .slides-wrapper { 
149      margin: unset; 
150
151    .slider-container .slider-arrows{ 
152        z-index: 9; 
153        padding: 0 15px !important; 
154
155
156</style> 
157 
158<div class="slider-container position-relative slider-basic" id="sliderBasic"> 
159  <div class="slides-wrapper"> 
160    <div class="slides-container"> 
161      <ul class="slider-list"> 
162        <#if entries?has_content> 
163        <#list entries as curEntry> 
164        <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
165        <#if className=="com.liferay.journal.model.JournalArticle" && 
166        curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
167        <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
168        description=article.getDescription(locale) ddmTemplateKey=article.getDDMTemplateKey() 
169        curEntry=curEntry 
170        viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}"/> 
171        <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
172        <#assign smallImageUrlSide=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
173        <#else> 
174        <#assign smallImageUrlSide="https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
175      </#if> 
176 
177      <li class="slider-item"> 
178        <a href="${viewURL}" class="card-link" title="${title}"> 
179          <img src="${htmlUtil.escape(smallImageUrlSide)}" alt="${htmlUtil.escape(title)}" /> 
180          <div class="tieude"> 
181            <p class="mb-0">${htmlUtil.escape(title)}</p> 
182          </div> 
183        </a> 
184      </li> 
185    </#if> 
186  </#list> 
187</#if> 
188 
189</ul> 
190</div> 
191</div> 
192<div class="slider-arrows position-absolute d-flex justify-content-between"> 
193  <button type="button" class="slider-arrow-prev"> 
194    <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> 
195      <mask id="mask0_1865_10187" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" 
196            width="28" height="28"> 
197        <path 
198                d="M14 26.5C20.9037 26.5 26.5 20.9037 26.5 14C26.5 7.09625 20.9037 1.5 14 1.5C7.09625 1.5 1.5 7.09625 1.5 14C1.5 20.9037 7.09625 26.5 14 26.5Z" 
199                fill="#555555" stroke="white" stroke-width="1.66667" stroke-linejoin="round" /> 
200        <path d="M12.125 19.625L17.75 14L12.125 8.375" stroke="white" stroke-width="1.66667" 
201              stroke-linecap="round" stroke-linejoin="round" /> 
202      </mask> 
203      <g mask="url(#mask0_1865_10187)"> 
204        <path d="M-1 -1H29V29H-1V-1Z" fill="#DE6F18" /> 
205      </g> 
206    </svg> 
207 
208  </button> 
209  <button type="button" class="slider-arrow-next"> 
210 
211    <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> 
212      <mask id="mask0_1865_10187" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" 
213            width="28" height="28"> 
214        <path 
215                d="M14 26.5C20.9037 26.5 26.5 20.9037 26.5 14C26.5 7.09625 20.9037 1.5 14 1.5C7.09625 1.5 1.5 7.09625 1.5 14C1.5 20.9037 7.09625 26.5 14 26.5Z" 
216                fill="#555555" stroke="white" stroke-width="1.66667" stroke-linejoin="round" /> 
217        <path d="M12.125 19.625L17.75 14L12.125 8.375" stroke="white" stroke-width="1.66667" 
218              stroke-linecap="round" stroke-linejoin="round" /> 
219      </mask> 
220      <g mask="url(#mask0_1865_10187)"> 
221        <path d="M-1 -1H29V29H-1V-1Z" fill="#DE6F18" /> 
222      </g> 
223    </svg> 
224  </button> 
225</div> 
226<div class="cus-slider-indicators"></div> 
227</div> 
228<script> 
229  (function () { 
230    'use strict'; 
231    class Slider { 
232      constructor(id, mediaQueries) { 
233        // Get HTML elements 
234        this.slider = document.querySelector('#' + id); 
235        this.sliderList = this.slider.querySelector('.slider-list'); 
236        this.sliderItems = this.slider.querySelectorAll('.slider-item'); 
237        this.sliderNext = this.slider.querySelector('.slider-arrow-next'); 
238        this.sliderPrev = this.slider.querySelector('.slider-arrow-prev'); 
239        this.indicatorsContainer = this.slider.querySelector('.cus-slider-indicators'); 
240 
241        this.currentIndex = 0; 
242        this.totalSlides = this.sliderItems.length; 
243 
244        this.createIndicators(); 
245        this.updateIndicators(); 
246 
247        // Get media queries 
248        this.mediaQueryList = [window.matchMedia('screen and (max-width:'+ (mediaQueries[0] - 1) +'px)')]; 
249 
250        mediaQueries.forEach((mediaQuery) => { 
251          this.mediaQueryList.push(window.matchMedia('screen and (min-width:'+ mediaQuery +'px)')); 
252        }); 
253 
254        // Define global variables 
255        this.numberOfVisibleItems = null; 
256        this.currentItemIndex = 0; 
257        this.sliderItemsLength = this.sliderItems.length; 
258        this.mediaQueryLength = this.mediaQueryList.length; 
259 
260        // Add event listener: to call the run function again when screen resized 
261        this.mediaQueryList.forEach((mediaQuery) => { 
262          mediaQuery.addEventListener('change', () => this.run()); 
263        }); 
264 
265        // Add event listener: to go to next slide 
266        this.sliderNext.addEventListener('click', () => this.nextSlide()); 
267 
268        // Add event listener: to go to previous slide 
269        this.sliderPrev.addEventListener('click', () => this.prevSlide()); 
270 
271        // Add event listener for indicators 
272        this.indicatorDots.forEach((dot) => { 
273          dot.addEventListener('click', (e) => this.goToSlide(parseInt(e.target.dataset.index))); 
274        }); 
275 
276        this.run(); 
277
278      static generateId() { 
279        const randomId = `sliderBasic` + Math.floor(Math.random() * 999); 
280        return randomId; 
281
282 
283      createIndicators() { 
284        this.indicatorsContainer.innerHTML = ''; // Clear existing indicators 
285        for (let i = 0; i < this.getIndicatorCount(); i++) { 
286          let indicator = document.createElement('div'); 
287          indicator.classList.add('slider-indicator'); 
288          indicator.dataset.index = i; 
289          if (i < 5) { 
290            this.indicatorsContainer.appendChild(indicator); 
291
292
293        this.indicatorDots = this.indicatorsContainer.querySelectorAll('.slider-indicator'); 
294
295 
296      getIndicatorCount() { 
297        if (window.innerWidth >= 992) return this.totalSlides - 3; 
298        if (window.innerWidth >= 768) return this.totalSlides - 2; 
299        if (window.innerWidth >= 576) return this.totalSlides - 1; 
300        return this.totalSlides; 
301
302 
303      updateIndicators() { 
304        this.indicatorDots.forEach(dot => dot.classList.remove('active')); 
305        if (this.indicatorDots[this.currentIndex]) { 
306          this.indicatorDots[this.currentIndex].classList.add('active'); 
307
308 
309        if (this.getIndicatorCount() > 4 && this.currentIndex > 4) { 
310          console.log('this.indicatorDots', this.indicatorDots) 
311          this.indicatorDots[4].classList.add('active'); 
312
313 
314
315 
316      nextSlide() { 
317        if (this.currentItemIndex < this.sliderItemsLength - this.numberOfVisibleItems) { 
318          this.currentItemIndex++; 
319          this.shiftSlides(); 
320
321
322 
323      prevSlide() { 
324        if (this.currentItemIndex > 0) { 
325          this.currentItemIndex--; 
326          this.shiftSlides(); 
327
328
329 
330      goToSlide(index) { 
331        if (index >= 0 && index < this.sliderItemsLength) { 
332          this.currentItemIndex = index; 
333          this.shiftSlides(); 
334
335
336 
337      shiftSlides() { 
338        this.sliderList.style.transform = 'translateX(-' + ((100 / this.sliderItemsLength) * this.currentItemIndex) + '%)'; 
339        this.currentIndex = this.currentItemIndex; 
340        this.updateIndicators(); 
341
342 
343      run() { 
344        let index = this.mediaQueryLength - 1; 
345        while (index >= 0) { 
346          if (this.mediaQueryList[index].matches) { 
347            this.numberOfVisibleItems = index + 1; 
348 
349            // Reset the slider 
350            this.currentItemIndex = 0; 
351            this.sliderList.style.transform = 'translateX(0%)'; 
352 
353            // Set slider list width 
354            this.sliderList.style.width = 'calc(' + ((100 / this.numberOfVisibleItems) * this.sliderItemsLength) + '% + ' + ((this.sliderItemsLength / this.numberOfVisibleItems) * 16) + 'px)'; 
355 
356 
357            // Set slides width 
358            this.sliderItems.forEach((item) => { 
359              item.style.width = (100 / this.numberOfVisibleItems) + '%'; 
360            }); 
361 
362            this.updateIndicators(); 
363            break; 
364
365          index--; 
366
367
368
369 
370    const sliderElement = document.getElementById("sliderBasic"); 
371    if (sliderElement) { 
372      const sliderId = Slider.generateId(); 
373      sliderElement.id = sliderId; 
374      new Slider(sliderId, [576, 768, 992]); 
375    } else { 
376      console.error("Không tìm thấy slider với ID 'sliderBasic'"); 
377
378  })(); 
379 
380</script> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#293297" at line 164, column 27]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#293297" at line 164, column 18]
----
1<style> 
2  .slider-container { 
3    padding: 10px 0 35px; 
4    max-height: 100vh; 
5
6 
7  .slider-basic .slides-wrapper { 
8    margin: auto; 
9    overflow: hidden; 
10
11 
12  .slider-basic .slider-list { 
13    list-style-type: none; 
14    margin: 0; 
15    padding: 0; 
16    display: flex; 
17    overflow: hidden; 
18    transition: 1s; 
19    max-height: calc(100vh - 80px); 
20
21 
22  .slider-basic .slider-item { 
23    background-color: white; 
24    padding: 3px; 
25    margin: 0 16px 5px 0; 
26    box-shadow: -4px 4px 6px rgba(0, 0, 0, 0.25); 
27    border-radius: 6px; 
28 
29 
30
31 
32  .slider-basic .slider-item .card-link { 
33    text-decoration: none; 
34
35 
36  .slider-basic .slider-item .card-link .tieude { 
37    padding: 14px; 
38    height: 120px; 
39    color: #2E2E2E; 
40    font-weight: 700; 
41    font-size: clamp(14px, 2vw, 16px); 
42    line-height: 22.4px; 
43
44 
45  .slider-basic .slider-item:hover .card-link .tieude { 
46    background: linear-gradient(225.35deg, #379EFF -6.25%, #004F99 106.95%); 
47    color: white; 
48
49 
50  .slider-basic .slider-item img { 
51    width: 100%; 
52    aspect-ratio: 4 / 3; 
53    object-fit: cover; 
54
55 
56  .slider-arrows { 
57    width: calc(100% + 70px); 
58    height: 30px; 
59    top: calc(50% - 15px); 
60    left: -35px; 
61
62 
63  .slider-arrow-prev, 
64  .slider-arrow-next { 
65    border: none; 
66    background: none; 
67
68 
69  .slider-arrow-prev svg { 
70    transform: rotate(180deg); 
71
72 
73  .slider-arrow-prev path, 
74  .slider-arrow-next path { 
75    fill: #DE6F18; 
76
77 
78  .slider-arrow-prev.disable path, 
79  .slider-arrow-next.disable path { 
80    fill: #ACB0B3; 
81
82 
83 
84  .slider-container .cus-slider-indicators { 
85    position: absolute; 
86    bottom: 0; 
87    left: 50%; 
88    transform: translateX(-50%); 
89    display: flex; 
90    align-items: center; 
91    gap: 8px; 
92
93 
94  .slider-container .slider-indicator { 
95    width: 25px; 
96    height: 10px; 
97    background-color: #E0E0E0; 
98    border-radius: 5px; 
99    cursor: pointer; 
100    transition: 0.3s; 
101
102 
103  .slider-container .slider-indicator.active { 
104    background-color: #DE6F18; 
105    width: 15px; 
106    height: 15px; 
107    border-radius: 100%; 
108
109  @media (max-width: 992px) { 
110    .slider-container { 
111      padding: 10px 10px 35px; 
112
113    .slider-arrows { 
114      width: calc(100% + 43px); 
115      left: -22px; 
116
117
118 
119  @media (max-width: 992px) { 
120    .slider-container { 
121      padding: 10px 10px 35px; 
122
123    .slider-arrows { 
124      width: calc(100% + 43px); 
125      left: -22px; 
126
127
128 
129  @media only screen and (min-width: 768px) and (max-width: 992px) { 
130    .slider-container { 
131      overflow: hidden; 
132      padding: 10px 30px 35px !important; 
133
134    .slider-arrows { 
135      width: calc(95% + 43px) !important; 
136      left: -5px !important; 
137
138    .slider-basic .slides-wrapper { 
139      margin: unset; 
140
141    .slider-container .slider-arrows{ 
142        z-index: 9; 
143        padding: 0 !important; 
144
145
146 
147  @media (max-width: 576px) { 
148    .slider-basic .slides-wrapper { 
149      margin: unset; 
150
151    .slider-container .slider-arrows{ 
152        z-index: 9; 
153        padding: 0 15px !important; 
154
155
156</style> 
157 
158<div class="slider-container position-relative slider-basic" id="sliderBasic"> 
159  <div class="slides-wrapper"> 
160    <div class="slides-container"> 
161      <ul class="slider-list"> 
162        <#if entries?has_content> 
163        <#list entries as curEntry> 
164        <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
165        <#if className=="com.liferay.journal.model.JournalArticle" && 
166        curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
167        <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
168        description=article.getDescription(locale) ddmTemplateKey=article.getDDMTemplateKey() 
169        curEntry=curEntry 
170        viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}"/> 
171        <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
172        <#assign smallImageUrlSide=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
173        <#else> 
174        <#assign smallImageUrlSide="https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
175      </#if> 
176 
177      <li class="slider-item"> 
178        <a href="${viewURL}" class="card-link" title="${title}"> 
179          <img src="${htmlUtil.escape(smallImageUrlSide)}" alt="${htmlUtil.escape(title)}" /> 
180          <div class="tieude"> 
181            <p class="mb-0">${htmlUtil.escape(title)}</p> 
182          </div> 
183        </a> 
184      </li> 
185    </#if> 
186  </#list> 
187</#if> 
188 
189</ul> 
190</div> 
191</div> 
192<div class="slider-arrows position-absolute d-flex justify-content-between"> 
193  <button type="button" class="slider-arrow-prev"> 
194    <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> 
195      <mask id="mask0_1865_10187" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" 
196            width="28" height="28"> 
197        <path 
198                d="M14 26.5C20.9037 26.5 26.5 20.9037 26.5 14C26.5 7.09625 20.9037 1.5 14 1.5C7.09625 1.5 1.5 7.09625 1.5 14C1.5 20.9037 7.09625 26.5 14 26.5Z" 
199                fill="#555555" stroke="white" stroke-width="1.66667" stroke-linejoin="round" /> 
200        <path d="M12.125 19.625L17.75 14L12.125 8.375" stroke="white" stroke-width="1.66667" 
201              stroke-linecap="round" stroke-linejoin="round" /> 
202      </mask> 
203      <g mask="url(#mask0_1865_10187)"> 
204        <path d="M-1 -1H29V29H-1V-1Z" fill="#DE6F18" /> 
205      </g> 
206    </svg> 
207 
208  </button> 
209  <button type="button" class="slider-arrow-next"> 
210 
211    <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> 
212      <mask id="mask0_1865_10187" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" 
213            width="28" height="28"> 
214        <path 
215                d="M14 26.5C20.9037 26.5 26.5 20.9037 26.5 14C26.5 7.09625 20.9037 1.5 14 1.5C7.09625 1.5 1.5 7.09625 1.5 14C1.5 20.9037 7.09625 26.5 14 26.5Z" 
216                fill="#555555" stroke="white" stroke-width="1.66667" stroke-linejoin="round" /> 
217        <path d="M12.125 19.625L17.75 14L12.125 8.375" stroke="white" stroke-width="1.66667" 
218              stroke-linecap="round" stroke-linejoin="round" /> 
219      </mask> 
220      <g mask="url(#mask0_1865_10187)"> 
221        <path d="M-1 -1H29V29H-1V-1Z" fill="#DE6F18" /> 
222      </g> 
223    </svg> 
224  </button> 
225</div> 
226<div class="cus-slider-indicators"></div> 
227</div> 
228<script> 
229  (function () { 
230    'use strict'; 
231    class Slider { 
232      constructor(id, mediaQueries) { 
233        // Get HTML elements 
234        this.slider = document.querySelector('#' + id); 
235        this.sliderList = this.slider.querySelector('.slider-list'); 
236        this.sliderItems = this.slider.querySelectorAll('.slider-item'); 
237        this.sliderNext = this.slider.querySelector('.slider-arrow-next'); 
238        this.sliderPrev = this.slider.querySelector('.slider-arrow-prev'); 
239        this.indicatorsContainer = this.slider.querySelector('.cus-slider-indicators'); 
240 
241        this.currentIndex = 0; 
242        this.totalSlides = this.sliderItems.length; 
243 
244        this.createIndicators(); 
245        this.updateIndicators(); 
246 
247        // Get media queries 
248        this.mediaQueryList = [window.matchMedia('screen and (max-width:'+ (mediaQueries[0] - 1) +'px)')]; 
249 
250        mediaQueries.forEach((mediaQuery) => { 
251          this.mediaQueryList.push(window.matchMedia('screen and (min-width:'+ mediaQuery +'px)')); 
252        }); 
253 
254        // Define global variables 
255        this.numberOfVisibleItems = null; 
256        this.currentItemIndex = 0; 
257        this.sliderItemsLength = this.sliderItems.length; 
258        this.mediaQueryLength = this.mediaQueryList.length; 
259 
260        // Add event listener: to call the run function again when screen resized 
261        this.mediaQueryList.forEach((mediaQuery) => { 
262          mediaQuery.addEventListener('change', () => this.run()); 
263        }); 
264 
265        // Add event listener: to go to next slide 
266        this.sliderNext.addEventListener('click', () => this.nextSlide()); 
267 
268        // Add event listener: to go to previous slide 
269        this.sliderPrev.addEventListener('click', () => this.prevSlide()); 
270 
271        // Add event listener for indicators 
272        this.indicatorDots.forEach((dot) => { 
273          dot.addEventListener('click', (e) => this.goToSlide(parseInt(e.target.dataset.index))); 
274        }); 
275 
276        this.run(); 
277
278      static generateId() { 
279        const randomId = `sliderBasic` + Math.floor(Math.random() * 999); 
280        return randomId; 
281
282 
283      createIndicators() { 
284        this.indicatorsContainer.innerHTML = ''; // Clear existing indicators 
285        for (let i = 0; i < this.getIndicatorCount(); i++) { 
286          let indicator = document.createElement('div'); 
287          indicator.classList.add('slider-indicator'); 
288          indicator.dataset.index = i; 
289          if (i < 5) { 
290            this.indicatorsContainer.appendChild(indicator); 
291
292
293        this.indicatorDots = this.indicatorsContainer.querySelectorAll('.slider-indicator'); 
294
295 
296      getIndicatorCount() { 
297        if (window.innerWidth >= 992) return this.totalSlides - 3; 
298        if (window.innerWidth >= 768) return this.totalSlides - 2; 
299        if (window.innerWidth >= 576) return this.totalSlides - 1; 
300        return this.totalSlides; 
301
302 
303      updateIndicators() { 
304        this.indicatorDots.forEach(dot => dot.classList.remove('active')); 
305        if (this.indicatorDots[this.currentIndex]) { 
306          this.indicatorDots[this.currentIndex].classList.add('active'); 
307
308 
309        if (this.getIndicatorCount() > 4 && this.currentIndex > 4) { 
310          console.log('this.indicatorDots', this.indicatorDots) 
311          this.indicatorDots[4].classList.add('active'); 
312
313 
314
315 
316      nextSlide() { 
317        if (this.currentItemIndex < this.sliderItemsLength - this.numberOfVisibleItems) { 
318          this.currentItemIndex++; 
319          this.shiftSlides(); 
320
321
322 
323      prevSlide() { 
324        if (this.currentItemIndex > 0) { 
325          this.currentItemIndex--; 
326          this.shiftSlides(); 
327
328
329 
330      goToSlide(index) { 
331        if (index >= 0 && index < this.sliderItemsLength) { 
332          this.currentItemIndex = index; 
333          this.shiftSlides(); 
334
335
336 
337      shiftSlides() { 
338        this.sliderList.style.transform = 'translateX(-' + ((100 / this.sliderItemsLength) * this.currentItemIndex) + '%)'; 
339        this.currentIndex = this.currentItemIndex; 
340        this.updateIndicators(); 
341
342 
343      run() { 
344        let index = this.mediaQueryLength - 1; 
345        while (index >= 0) { 
346          if (this.mediaQueryList[index].matches) { 
347            this.numberOfVisibleItems = index + 1; 
348 
349            // Reset the slider 
350            this.currentItemIndex = 0; 
351            this.sliderList.style.transform = 'translateX(0%)'; 
352 
353            // Set slider list width 
354            this.sliderList.style.width = 'calc(' + ((100 / this.numberOfVisibleItems) * this.sliderItemsLength) + '% + ' + ((this.sliderItemsLength / this.numberOfVisibleItems) * 16) + 'px)'; 
355 
356 
357            // Set slides width 
358            this.sliderItems.forEach((item) => { 
359              item.style.width = (100 / this.numberOfVisibleItems) + '%'; 
360            }); 
361 
362            this.updateIndicators(); 
363            break; 
364
365          index--; 
366
367
368
369 
370    const sliderElement = document.getElementById("sliderBasic"); 
371    if (sliderElement) { 
372      const sliderId = Slider.generateId(); 
373      sliderElement.id = sliderId; 
374      new Slider(sliderId, [576, 768, 992]); 
375    } else { 
376      console.error("Không tìm thấy slider với ID 'sliderBasic'"); 
377
378  })(); 
379 
380</script> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#293297" at line 164, column 27]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#293297" at line 164, column 18]
----
1<style> 
2  .slider-container { 
3    padding: 10px 0 35px; 
4    max-height: 100vh; 
5
6 
7  .slider-basic .slides-wrapper { 
8    margin: auto; 
9    overflow: hidden; 
10
11 
12  .slider-basic .slider-list { 
13    list-style-type: none; 
14    margin: 0; 
15    padding: 0; 
16    display: flex; 
17    overflow: hidden; 
18    transition: 1s; 
19    max-height: calc(100vh - 80px); 
20
21 
22  .slider-basic .slider-item { 
23    background-color: white; 
24    padding: 3px; 
25    margin: 0 16px 5px 0; 
26    box-shadow: -4px 4px 6px rgba(0, 0, 0, 0.25); 
27    border-radius: 6px; 
28 
29 
30
31 
32  .slider-basic .slider-item .card-link { 
33    text-decoration: none; 
34
35 
36  .slider-basic .slider-item .card-link .tieude { 
37    padding: 14px; 
38    height: 120px; 
39    color: #2E2E2E; 
40    font-weight: 700; 
41    font-size: clamp(14px, 2vw, 16px); 
42    line-height: 22.4px; 
43
44 
45  .slider-basic .slider-item:hover .card-link .tieude { 
46    background: linear-gradient(225.35deg, #379EFF -6.25%, #004F99 106.95%); 
47    color: white; 
48
49 
50  .slider-basic .slider-item img { 
51    width: 100%; 
52    aspect-ratio: 4 / 3; 
53    object-fit: cover; 
54
55 
56  .slider-arrows { 
57    width: calc(100% + 70px); 
58    height: 30px; 
59    top: calc(50% - 15px); 
60    left: -35px; 
61
62 
63  .slider-arrow-prev, 
64  .slider-arrow-next { 
65    border: none; 
66    background: none; 
67
68 
69  .slider-arrow-prev svg { 
70    transform: rotate(180deg); 
71
72 
73  .slider-arrow-prev path, 
74  .slider-arrow-next path { 
75    fill: #DE6F18; 
76
77 
78  .slider-arrow-prev.disable path, 
79  .slider-arrow-next.disable path { 
80    fill: #ACB0B3; 
81
82 
83 
84  .slider-container .cus-slider-indicators { 
85    position: absolute; 
86    bottom: 0; 
87    left: 50%; 
88    transform: translateX(-50%); 
89    display: flex; 
90    align-items: center; 
91    gap: 8px; 
92
93 
94  .slider-container .slider-indicator { 
95    width: 25px; 
96    height: 10px; 
97    background-color: #E0E0E0; 
98    border-radius: 5px; 
99    cursor: pointer; 
100    transition: 0.3s; 
101
102 
103  .slider-container .slider-indicator.active { 
104    background-color: #DE6F18; 
105    width: 15px; 
106    height: 15px; 
107    border-radius: 100%; 
108
109  @media (max-width: 992px) { 
110    .slider-container { 
111      padding: 10px 10px 35px; 
112
113    .slider-arrows { 
114      width: calc(100% + 43px); 
115      left: -22px; 
116
117
118 
119  @media (max-width: 992px) { 
120    .slider-container { 
121      padding: 10px 10px 35px; 
122
123    .slider-arrows { 
124      width: calc(100% + 43px); 
125      left: -22px; 
126
127
128 
129  @media only screen and (min-width: 768px) and (max-width: 992px) { 
130    .slider-container { 
131      overflow: hidden; 
132      padding: 10px 30px 35px !important; 
133
134    .slider-arrows { 
135      width: calc(95% + 43px) !important; 
136      left: -5px !important; 
137
138    .slider-basic .slides-wrapper { 
139      margin: unset; 
140
141    .slider-container .slider-arrows{ 
142        z-index: 9; 
143        padding: 0 !important; 
144
145
146 
147  @media (max-width: 576px) { 
148    .slider-basic .slides-wrapper { 
149      margin: unset; 
150
151    .slider-container .slider-arrows{ 
152        z-index: 9; 
153        padding: 0 15px !important; 
154
155
156</style> 
157 
158<div class="slider-container position-relative slider-basic" id="sliderBasic"> 
159  <div class="slides-wrapper"> 
160    <div class="slides-container"> 
161      <ul class="slider-list"> 
162        <#if entries?has_content> 
163        <#list entries as curEntry> 
164        <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
165        <#if className=="com.liferay.journal.model.JournalArticle" && 
166        curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
167        <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
168        description=article.getDescription(locale) ddmTemplateKey=article.getDDMTemplateKey() 
169        curEntry=curEntry 
170        viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}"/> 
171        <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
172        <#assign smallImageUrlSide=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
173        <#else> 
174        <#assign smallImageUrlSide="https://danang.gov.vn/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
175      </#if> 
176 
177      <li class="slider-item"> 
178        <a href="${viewURL}" class="card-link" title="${title}"> 
179          <img src="${htmlUtil.escape(smallImageUrlSide)}" alt="${htmlUtil.escape(title)}" /> 
180          <div class="tieude"> 
181            <p class="mb-0">${htmlUtil.escape(title)}</p> 
182          </div> 
183        </a> 
184      </li> 
185    </#if> 
186  </#list> 
187</#if> 
188 
189</ul> 
190</div> 
191</div> 
192<div class="slider-arrows position-absolute d-flex justify-content-between"> 
193  <button type="button" class="slider-arrow-prev"> 
194    <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> 
195      <mask id="mask0_1865_10187" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" 
196            width="28" height="28"> 
197        <path 
198                d="M14 26.5C20.9037 26.5 26.5 20.9037 26.5 14C26.5 7.09625 20.9037 1.5 14 1.5C7.09625 1.5 1.5 7.09625 1.5 14C1.5 20.9037 7.09625 26.5 14 26.5Z" 
199                fill="#555555" stroke="white" stroke-width="1.66667" stroke-linejoin="round" /> 
200        <path d="M12.125 19.625L17.75 14L12.125 8.375" stroke="white" stroke-width="1.66667" 
201              stroke-linecap="round" stroke-linejoin="round" /> 
202      </mask> 
203      <g mask="url(#mask0_1865_10187)"> 
204        <path d="M-1 -1H29V29H-1V-1Z" fill="#DE6F18" /> 
205      </g> 
206    </svg> 
207 
208  </button> 
209  <button type="button" class="slider-arrow-next"> 
210 
211    <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> 
212      <mask id="mask0_1865_10187" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" 
213            width="28" height="28"> 
214        <path 
215                d="M14 26.5C20.9037 26.5 26.5 20.9037 26.5 14C26.5 7.09625 20.9037 1.5 14 1.5C7.09625 1.5 1.5 7.09625 1.5 14C1.5 20.9037 7.09625 26.5 14 26.5Z" 
216                fill="#555555" stroke="white" stroke-width="1.66667" stroke-linejoin="round" /> 
217        <path d="M12.125 19.625L17.75 14L12.125 8.375" stroke="white" stroke-width="1.66667" 
218              stroke-linecap="round" stroke-linejoin="round" /> 
219      </mask> 
220      <g mask="url(#mask0_1865_10187)"> 
221        <path d="M-1 -1H29V29H-1V-1Z" fill="#DE6F18" /> 
222      </g> 
223    </svg> 
224  </button> 
225</div> 
226<div class="cus-slider-indicators"></div> 
227</div> 
228<script> 
229  (function () { 
230    'use strict'; 
231    class Slider { 
232      constructor(id, mediaQueries) { 
233        // Get HTML elements 
234        this.slider = document.querySelector('#' + id); 
235        this.sliderList = this.slider.querySelector('.slider-list'); 
236        this.sliderItems = this.slider.querySelectorAll('.slider-item'); 
237        this.sliderNext = this.slider.querySelector('.slider-arrow-next'); 
238        this.sliderPrev = this.slider.querySelector('.slider-arrow-prev'); 
239        this.indicatorsContainer = this.slider.querySelector('.cus-slider-indicators'); 
240 
241        this.currentIndex = 0; 
242        this.totalSlides = this.sliderItems.length; 
243 
244        this.createIndicators(); 
245        this.updateIndicators(); 
246 
247        // Get media queries 
248        this.mediaQueryList = [window.matchMedia('screen and (max-width:'+ (mediaQueries[0] - 1) +'px)')]; 
249 
250        mediaQueries.forEach((mediaQuery) => { 
251          this.mediaQueryList.push(window.matchMedia('screen and (min-width:'+ mediaQuery +'px)')); 
252        }); 
253 
254        // Define global variables 
255        this.numberOfVisibleItems = null; 
256        this.currentItemIndex = 0; 
257        this.sliderItemsLength = this.sliderItems.length; 
258        this.mediaQueryLength = this.mediaQueryList.length; 
259 
260        // Add event listener: to call the run function again when screen resized 
261        this.mediaQueryList.forEach((mediaQuery) => { 
262          mediaQuery.addEventListener('change', () => this.run()); 
263        }); 
264 
265        // Add event listener: to go to next slide 
266        this.sliderNext.addEventListener('click', () => this.nextSlide()); 
267 
268        // Add event listener: to go to previous slide 
269        this.sliderPrev.addEventListener('click', () => this.prevSlide()); 
270 
271        // Add event listener for indicators 
272        this.indicatorDots.forEach((dot) => { 
273          dot.addEventListener('click', (e) => this.goToSlide(parseInt(e.target.dataset.index))); 
274        }); 
275 
276        this.run(); 
277
278      static generateId() { 
279        const randomId = `sliderBasic` + Math.floor(Math.random() * 999); 
280        return randomId; 
281
282 
283      createIndicators() { 
284        this.indicatorsContainer.innerHTML = ''; // Clear existing indicators 
285        for (let i = 0; i < this.getIndicatorCount(); i++) { 
286          let indicator = document.createElement('div'); 
287          indicator.classList.add('slider-indicator'); 
288          indicator.dataset.index = i; 
289          if (i < 5) { 
290            this.indicatorsContainer.appendChild(indicator); 
291
292
293        this.indicatorDots = this.indicatorsContainer.querySelectorAll('.slider-indicator'); 
294
295 
296      getIndicatorCount() { 
297        if (window.innerWidth >= 992) return this.totalSlides - 3; 
298        if (window.innerWidth >= 768) return this.totalSlides - 2; 
299        if (window.innerWidth >= 576) return this.totalSlides - 1; 
300        return this.totalSlides; 
301
302 
303      updateIndicators() { 
304        this.indicatorDots.forEach(dot => dot.classList.remove('active')); 
305        if (this.indicatorDots[this.currentIndex]) { 
306          this.indicatorDots[this.currentIndex].classList.add('active'); 
307
308 
309        if (this.getIndicatorCount() > 4 && this.currentIndex > 4) { 
310          console.log('this.indicatorDots', this.indicatorDots) 
311          this.indicatorDots[4].classList.add('active'); 
312
313 
314
315 
316      nextSlide() { 
317        if (this.currentItemIndex < this.sliderItemsLength - this.numberOfVisibleItems) { 
318          this.currentItemIndex++; 
319          this.shiftSlides(); 
320
321
322 
323      prevSlide() { 
324        if (this.currentItemIndex > 0) { 
325          this.currentItemIndex--; 
326          this.shiftSlides(); 
327
328
329 
330      goToSlide(index) { 
331        if (index >= 0 && index < this.sliderItemsLength) { 
332          this.currentItemIndex = index; 
333          this.shiftSlides(); 
334
335
336 
337      shiftSlides() { 
338        this.sliderList.style.transform = 'translateX(-' + ((100 / this.sliderItemsLength) * this.currentItemIndex) + '%)'; 
339        this.currentIndex = this.currentItemIndex; 
340        this.updateIndicators(); 
341
342 
343      run() { 
344        let index = this.mediaQueryLength - 1; 
345        while (index >= 0) { 
346          if (this.mediaQueryList[index].matches) { 
347            this.numberOfVisibleItems = index + 1; 
348 
349            // Reset the slider 
350            this.currentItemIndex = 0; 
351            this.sliderList.style.transform = 'translateX(0%)'; 
352 
353            // Set slider list width 
354            this.sliderList.style.width = 'calc(' + ((100 / this.numberOfVisibleItems) * this.sliderItemsLength) + '% + ' + ((this.sliderItemsLength / this.numberOfVisibleItems) * 16) + 'px)'; 
355 
356 
357            // Set slides width 
358            this.sliderItems.forEach((item) => { 
359              item.style.width = (100 / this.numberOfVisibleItems) + '%'; 
360            }); 
361 
362            this.updateIndicators(); 
363            break; 
364
365          index--; 
366
367
368
369 
370    const sliderElement = document.getElementById("sliderBasic"); 
371    if (sliderElement) { 
372      const sliderId = Slider.generateId(); 
373      sliderElement.id = sliderId; 
374      new Slider(sliderId, [576, 768, 992]); 
375    } else { 
376      console.error("Không tìm thấy slider với ID 'sliderBasic'"); 
377
378  })(); 
379 
380</script> 
banner cannot click
banner cannot click
banner cannot click

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#53314" at line 112, column 31]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#53314" at line 112, column 22]
----
1<style> 
2    /* block he thong csdl */ 
3    .img-big-news-csdl { 
4        width: 100%; 
5        aspect-ratio: 4 / 3; 
6        object-fit: cover; 
7        border-radius: 10px; 
8        height: 100%; 
9        max-height: 230px; 
10
11 
12    .txt-title-big-news-csdl { 
13        font-size: clamp(14px, 3vw, 18px); 
14        font-weight: 700; 
15        line-height: 25.2px; 
16        text-align: left; 
17        color: #2E2E2E; 
18
19 
20    .txt-description-big-news-csdl { 
21        font-family: Roboto; 
22        font-size: clamp(14px, 2vw, 16px); 
23        font-weight: 400; 
24        line-height: 22.4px; 
25        text-align: left; 
26        color: #2E2E2E; 
27
28 
29    .border-right-csdl { 
30        border-right: 1px solid #848A8F; 
31
32 
33    .item-sub-news-csdl { 
34        cursor: pointer; 
35        color: #2E2E2E; 
36        font-size: clamp(14px, 2vw, 16px); 
37        font-weight: 600; 
38        background-color: #E0E0E04D; 
39        padding: 1rem; 
40        border-bottom: 1px solid #EBEBEB; 
41        transition: 0.3s ease; 
42        cursor: pointer; 
43
44 
45    .item-sub-news-csdl:hover { 
46        color: #035FB5; 
47
48 
49    .item-big-news-csdl:hover { 
50        cursor: pointer; 
51
52 
53    .item-big-news-csdl:hover .img-big-news-csdl { 
54        box-shadow: 4px 4px 4px 0px #00000040; 
55
56 
57    .item-big-news-csdl:hover .txt-title-big-news-csdl { 
58        color: #035FB5; 
59
60 
61 
62    .list-subnews-csdl { 
63        max-height: 200px; 
64        overflow: auto; 
65
66 
67    /* Tùy chỉnh thanh cuộn cho WebKit (Chrome, Safari, Edge) */ 
68    .list-subnews-csdl::-webkit-scrollbar { 
69        width: 6px !important; 
70
71 
72    .list-subnews-csdl::-webkit-scrollbar-track { 
73        background: #f9f9f9; 
74
75 
76    .list-subnews-csdl::-webkit-scrollbar-thumb { 
77        background: #ccc; 
78        border-radius: 3px; 
79
80 
81    .list-subnews-csdl::-webkit-scrollbar-thumb:hover { 
82        background: #aaa; 
83
84 
85    @media (max-width: 1024px) { 
86        .border-right-csdl { 
87            border-right: none; 
88
89
90 
91    .wrap-text-content-limit { 
92        max-height: 200px; 
93        overflow: auto; 
94        scrollbar-width: none; 
95
96 
97    .bottom-shadow { 
98        position: absolute; 
99        bottom: -1px; 
100        left: 0; 
101        height: 15px; 
102        width: 100%; 
103        background: linear-gradient(to top, rgb(255 255 255 / 76%), rgb(255 255 255 / 65%)); 
104
105</style> 
106 
107<div class="row"> 
108    <#assign indexLocal=0 /> 
109    <div class="col-12 col-xl-8 border-right-csdl"> 
110        <div class="row item-big-news-csdl"> 
111            <#list entries as curEntry> 
112            <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
113            <#if className=="com.liferay.journal.model.JournalArticle"> 
114            <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
115            description=article.getDescription(locale) noiDung=article.getContent() 
116            idBaiViet=article.getId() 
117            viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
118            indexLocal=indexLocal + 1 /> 
119            <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
120            <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
121            <#else> 
122            <#assign 
123            smallImageUrl="/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
124        </#if> 
125        <#if indexLocal==1> 
126        <a class="col-12 col-md-5 col-xl-5" href="${viewURL}" title="${title}"> 
127            <img src="${smallImageUrl}" alt="" class="img-big-news-csdl"> 
128        </a> 
129        <a class="col-12 col-md-7 col-xl-7 align-self-center" href="${viewURL}" title="${title}"> 
130            <div class="wrap-text-content-limit"> 
131                <div class="txt-title-big-news-csdl mb-2">${title}</div> 
132                <div class="txt-description-big-news-csdl">${description}</div> 
133                <div class="bottom-shadow"></div> 
134            </div> 
135        </a> 
136    </#if> 
137</#if> 
138</#list> 
139</div> 
140</div> 
141 
142 
143<div class="col-12 col-xl-4"> 
144    <div class="list-subnews-csdl mt-2 mt-xl-0"> 
145        <#assign subIndex=0 /> 
146        <#list entries as curEntry> 
147        <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
148        <#if className=="com.liferay.journal.model.JournalArticle" && 
149        curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
150        <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
151        description=article.getDescription(locale) noiDung=article.getContent() 
152        idBaiViet=article.getId() 
153        viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
154        subIndex=subIndex + 1 /> 
155        <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
156        <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
157        <#else> 
158        <#assign 
159        smallImageUrl="/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
160    </#if> 
161    <#if subIndex gt 1> 
162 
163    <a class="mb-2 pr-lg-1" href="${viewURL}" title="${title}"> 
164        <div class="item-sub-news-csdl">${title}</div> 
165    </a> 
166 
167</#if> 
168</#if> 
169</#list> 
170</div> 
171</div> 
172</div> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#53314" at line 112, column 31]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#53314" at line 112, column 22]
----
1<style> 
2    /* block he thong csdl */ 
3    .img-big-news-csdl { 
4        width: 100%; 
5        aspect-ratio: 4 / 3; 
6        object-fit: cover; 
7        border-radius: 10px; 
8        height: 100%; 
9        max-height: 230px; 
10
11 
12    .txt-title-big-news-csdl { 
13        font-size: clamp(14px, 3vw, 18px); 
14        font-weight: 700; 
15        line-height: 25.2px; 
16        text-align: left; 
17        color: #2E2E2E; 
18
19 
20    .txt-description-big-news-csdl { 
21        font-family: Roboto; 
22        font-size: clamp(14px, 2vw, 16px); 
23        font-weight: 400; 
24        line-height: 22.4px; 
25        text-align: left; 
26        color: #2E2E2E; 
27
28 
29    .border-right-csdl { 
30        border-right: 1px solid #848A8F; 
31
32 
33    .item-sub-news-csdl { 
34        cursor: pointer; 
35        color: #2E2E2E; 
36        font-size: clamp(14px, 2vw, 16px); 
37        font-weight: 600; 
38        background-color: #E0E0E04D; 
39        padding: 1rem; 
40        border-bottom: 1px solid #EBEBEB; 
41        transition: 0.3s ease; 
42        cursor: pointer; 
43
44 
45    .item-sub-news-csdl:hover { 
46        color: #035FB5; 
47
48 
49    .item-big-news-csdl:hover { 
50        cursor: pointer; 
51
52 
53    .item-big-news-csdl:hover .img-big-news-csdl { 
54        box-shadow: 4px 4px 4px 0px #00000040; 
55
56 
57    .item-big-news-csdl:hover .txt-title-big-news-csdl { 
58        color: #035FB5; 
59
60 
61 
62    .list-subnews-csdl { 
63        max-height: 200px; 
64        overflow: auto; 
65
66 
67    /* Tùy chỉnh thanh cuộn cho WebKit (Chrome, Safari, Edge) */ 
68    .list-subnews-csdl::-webkit-scrollbar { 
69        width: 6px !important; 
70
71 
72    .list-subnews-csdl::-webkit-scrollbar-track { 
73        background: #f9f9f9; 
74
75 
76    .list-subnews-csdl::-webkit-scrollbar-thumb { 
77        background: #ccc; 
78        border-radius: 3px; 
79
80 
81    .list-subnews-csdl::-webkit-scrollbar-thumb:hover { 
82        background: #aaa; 
83
84 
85    @media (max-width: 1024px) { 
86        .border-right-csdl { 
87            border-right: none; 
88
89
90 
91    .wrap-text-content-limit { 
92        max-height: 200px; 
93        overflow: auto; 
94        scrollbar-width: none; 
95
96 
97    .bottom-shadow { 
98        position: absolute; 
99        bottom: -1px; 
100        left: 0; 
101        height: 15px; 
102        width: 100%; 
103        background: linear-gradient(to top, rgb(255 255 255 / 76%), rgb(255 255 255 / 65%)); 
104
105</style> 
106 
107<div class="row"> 
108    <#assign indexLocal=0 /> 
109    <div class="col-12 col-xl-8 border-right-csdl"> 
110        <div class="row item-big-news-csdl"> 
111            <#list entries as curEntry> 
112            <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
113            <#if className=="com.liferay.journal.model.JournalArticle"> 
114            <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
115            description=article.getDescription(locale) noiDung=article.getContent() 
116            idBaiViet=article.getId() 
117            viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
118            indexLocal=indexLocal + 1 /> 
119            <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
120            <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
121            <#else> 
122            <#assign 
123            smallImageUrl="/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
124        </#if> 
125        <#if indexLocal==1> 
126        <a class="col-12 col-md-5 col-xl-5" href="${viewURL}" title="${title}"> 
127            <img src="${smallImageUrl}" alt="" class="img-big-news-csdl"> 
128        </a> 
129        <a class="col-12 col-md-7 col-xl-7 align-self-center" href="${viewURL}" title="${title}"> 
130            <div class="wrap-text-content-limit"> 
131                <div class="txt-title-big-news-csdl mb-2">${title}</div> 
132                <div class="txt-description-big-news-csdl">${description}</div> 
133                <div class="bottom-shadow"></div> 
134            </div> 
135        </a> 
136    </#if> 
137</#if> 
138</#list> 
139</div> 
140</div> 
141 
142 
143<div class="col-12 col-xl-4"> 
144    <div class="list-subnews-csdl mt-2 mt-xl-0"> 
145        <#assign subIndex=0 /> 
146        <#list entries as curEntry> 
147        <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
148        <#if className=="com.liferay.journal.model.JournalArticle" && 
149        curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
150        <#assign title=curEntry.getTitle(locale) article=renderer.getArticle() 
151        description=article.getDescription(locale) noiDung=article.getContent() 
152        idBaiViet=article.getId() 
153        viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" 
154        subIndex=subIndex + 1 /> 
155        <#if curEntry.getAssetRenderer().getThumbnailPath(renderRequest)??> 
156        <#assign smallImageUrl=curEntry.getAssetRenderer().getThumbnailPath(renderRequest)> 
157        <#else> 
158        <#assign 
159        smallImageUrl="/documents/37638/0/%E1%BA%A3nh-%C4%91%E1%BA%A1i-di%E1%BB%87n-%C4%91%C3%A0-n%E1%BA%B5ng-01.jpg"> 
160    </#if> 
161    <#if subIndex gt 1> 
162 
163    <a class="mb-2 pr-lg-1" href="${viewURL}" title="${title}"> 
164        <div class="item-sub-news-csdl">${title}</div> 
165    </a> 
166 
167</#if> 
168</#if> 
169</#list> 
170</div> 
171</div> 
172</div> 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#64057" at line 56, 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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#64057" at line 56, column 5]
----
1<style> 
2  .tin-nb-if { 
3    list-style: none; 
4    padding: 0; 
5    margin: 0; 
6
7 
8  .tin-nb-if li { 
9    position: relative; 
10    padding: 15px 5px 15px 45px; 
11    font-size: clamp(14px, 3vw, 16px); 
12    font-weight: 500; 
13    color: #2E2E2E; 
14    cursor: pointer; 
15    transition: all 0.2s; 
16
17  .li-content{ 
18    position: relative; 
19
20  .tin-nb-if li .li-content::before { 
21    content: ''; 
22    position: absolute; 
23    left: -30px; 
24    top: 3px; 
25    width: 20px; 
26    min-height: 20px; 
27    -webkit-mask: var(--urlIcon) no-repeat center; 
28    mask: var(--urlIcon) no-repeat center; 
29    background: #2E2E2E; 
30
31  .tin-nb-if li .li-content:hover::before { 
32    background-color: #DE6F18; 
33
34 
35  .tin-nb-if li.list-icon-dark::before { 
36    background-color: #2E2E2E; 
37    transition: background-color 0.2s; 
38
39 
40  .tin-nb-if li:hover::before { 
41    background-color: #DE6F18; 
42
43 
44  .tin-nb-if li:hover { 
45    color: #035FB5; 
46
47 
48  .tin-nb-if li.list-bg { 
49    margin-bottom: 10px; 
50
51</style> 
52<div class="tin-nb-if"> 
53  <ul style="--urlIcon: url('/documents/37638/39612/file-icon.svg/a7a0015a-a543-f8f6-d640-9e77ae719f47?t=1737516649743');"> 
54    <#list entries as curEntry> 
55    <#assign 
56    renderer=curEntry.getAssetRenderer() 
57    className=renderer.getClassName() /> 
58    <#if className=="com.liferay.journal.model.JournalArticle" && 
59    curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
60    <#assign title=curEntry.getTitle(locale) 
61    viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" /> 
62    <li class="list-bg align-content-center" > 
63      <a class="li-content" href="${viewURL}" title="${title}"> 
64        ${title} 
65      </a> 
66    </li> 
67  </#if> 
68</#list> 
69</ul> 
70</div 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#64057" at line 56, 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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#64057" at line 56, column 5]
----
1<style> 
2  .tin-nb-if { 
3    list-style: none; 
4    padding: 0; 
5    margin: 0; 
6
7 
8  .tin-nb-if li { 
9    position: relative; 
10    padding: 15px 5px 15px 45px; 
11    font-size: clamp(14px, 3vw, 16px); 
12    font-weight: 500; 
13    color: #2E2E2E; 
14    cursor: pointer; 
15    transition: all 0.2s; 
16
17  .li-content{ 
18    position: relative; 
19
20  .tin-nb-if li .li-content::before { 
21    content: ''; 
22    position: absolute; 
23    left: -30px; 
24    top: 3px; 
25    width: 20px; 
26    min-height: 20px; 
27    -webkit-mask: var(--urlIcon) no-repeat center; 
28    mask: var(--urlIcon) no-repeat center; 
29    background: #2E2E2E; 
30
31  .tin-nb-if li .li-content:hover::before { 
32    background-color: #DE6F18; 
33
34 
35  .tin-nb-if li.list-icon-dark::before { 
36    background-color: #2E2E2E; 
37    transition: background-color 0.2s; 
38
39 
40  .tin-nb-if li:hover::before { 
41    background-color: #DE6F18; 
42
43 
44  .tin-nb-if li:hover { 
45    color: #035FB5; 
46
47 
48  .tin-nb-if li.list-bg { 
49    margin-bottom: 10px; 
50
51</style> 
52<div class="tin-nb-if"> 
53  <ul style="--urlIcon: url('/documents/37638/39612/file-icon.svg/a7a0015a-a543-f8f6-d640-9e77ae719f47?t=1737516649743');"> 
54    <#list entries as curEntry> 
55    <#assign 
56    renderer=curEntry.getAssetRenderer() 
57    className=renderer.getClassName() /> 
58    <#if className=="com.liferay.journal.model.JournalArticle" && 
59    curEntry.getAvailableLanguageIds()?seq_contains(locale)> 
60    <#assign title=curEntry.getTitle(locale) 
61    viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" /> 
62    <li class="list-bg align-content-center" > 
63      <a class="li-content" href="${viewURL}" title="${title}"> 
64        ${title} 
65      </a> 
66    </li> 
67  </#if> 
68</#list> 
69</ul> 
70</div 
banner can click

CÔNG KHAI

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#64829" at line 79, column 23]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#64829" at line 79, column 14]
----
1<style> 
2  .tin-style6dots-wrap ul { 
3    list-style: none; 
4    padding: 0; 
5    margin: 0; 
6    display: flex; 
7    flex-wrap: wrap; 
8    justify-content: space-between; 
9
10 
11  .tin-style6dots-wrap ul li { 
12    min-height: 70px; 
13    width: calc(50% - 15px); 
14    padding: 10px 5px 10px 45px; 
15    font-size: clamp(14px, 3vw, 16px); 
16    font-weight: 500; 
17    color: #2E2E2E; 
18    cursor: pointer; 
19    transition: all 0.2s; 
20
21 
22  .tin-style6dots-wrap ul li.list-bg { 
23    margin-bottom: 16px; 
24    background: #E0E0E04D; 
25
26 
27  .tin-style6dots-wrap ul li.divider-x { 
28    border-bottom: solid 1px #EBEBEB; 
29
30 
31  .tin-style6dots-wrap ul li.divider-x:last-child { 
32    border-bottom: none; 
33
34 
35  .tin-style6dots-wrap ul .divider-y { 
36    position: absolute; 
37    height: 25px; 
38    width: 1px; 
39    background: #ACB0B3; 
40    left: 35px; 
41    top: 50%; 
42    transform: translateY(-50%); 
43
44 
45  .li-content{ 
46    position: relative; 
47
48  .tin-style6dots-wrap ul li .li-content::before { 
49    content: ''; 
50    position: absolute; 
51    left: -30px; 
52    top: 3px; 
53    width: 20px; 
54    min-height: 20px; 
55    -webkit-mask: var(--urlIcon) no-repeat center; 
56    mask: var(--urlIcon) no-repeat center; 
57    background: #035FB5; 
58 
59
60  .tin-style6dots-wrap ul li .li-content:hover::before { 
61    background-color: #DE6F18; 
62
63 
64  .tin-style6dots-wrap ul li:hover { 
65    color: #035FB5; 
66
67 
68  @media (max-width: 768px) { 
69    .tin-style6dots-wrap ul li { 
70      width: 100%; 
71
72
73</style> 
74 
75<#assign indexLocal=0 /> 
76<div class="tin-style6dots-wrap"> 
77  <ul style="--urlIcon: url('/documents/37638/39612/six-dots-icon.svg');"> 
78    <#list entries as curEntry> 
79    <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
80    <#if className=="com.liferay.journal.model.JournalArticle" && 
81    curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 6> 
82    <#assign title=curEntry.getTitle(locale) 
83    viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" /> 
84    <li class="list-bg align-content-center" > 
85      <a class="li-content" href="${viewURL}" title="${title}"> 
86        ${title} 
87      </a> 
88    </li> 
89  </#if> 
90</#list> 
91</ul> 
92</div 

Xuất bản thông tin

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> curEntry.getAssetRenderer()  [in template "37610#37640#64829" at line 79, column 23]

----
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: renderer = curEntry.getAssetRenderer()  [in template "37610#37640#64829" at line 79, column 14]
----
1<style> 
2  .tin-style6dots-wrap ul { 
3    list-style: none; 
4    padding: 0; 
5    margin: 0; 
6    display: flex; 
7    flex-wrap: wrap; 
8    justify-content: space-between; 
9
10 
11  .tin-style6dots-wrap ul li { 
12    min-height: 70px; 
13    width: calc(50% - 15px); 
14    padding: 10px 5px 10px 45px; 
15    font-size: clamp(14px, 3vw, 16px); 
16    font-weight: 500; 
17    color: #2E2E2E; 
18    cursor: pointer; 
19    transition: all 0.2s; 
20
21 
22  .tin-style6dots-wrap ul li.list-bg { 
23    margin-bottom: 16px; 
24    background: #E0E0E04D; 
25
26 
27  .tin-style6dots-wrap ul li.divider-x { 
28    border-bottom: solid 1px #EBEBEB; 
29
30 
31  .tin-style6dots-wrap ul li.divider-x:last-child { 
32    border-bottom: none; 
33
34 
35  .tin-style6dots-wrap ul .divider-y { 
36    position: absolute; 
37    height: 25px; 
38    width: 1px; 
39    background: #ACB0B3; 
40    left: 35px; 
41    top: 50%; 
42    transform: translateY(-50%); 
43
44 
45  .li-content{ 
46    position: relative; 
47
48  .tin-style6dots-wrap ul li .li-content::before { 
49    content: ''; 
50    position: absolute; 
51    left: -30px; 
52    top: 3px; 
53    width: 20px; 
54    min-height: 20px; 
55    -webkit-mask: var(--urlIcon) no-repeat center; 
56    mask: var(--urlIcon) no-repeat center; 
57    background: #035FB5; 
58 
59
60  .tin-style6dots-wrap ul li .li-content:hover::before { 
61    background-color: #DE6F18; 
62
63 
64  .tin-style6dots-wrap ul li:hover { 
65    color: #035FB5; 
66
67 
68  @media (max-width: 768px) { 
69    .tin-style6dots-wrap ul li { 
70      width: 100%; 
71
72
73</style> 
74 
75<#assign indexLocal=0 /> 
76<div class="tin-style6dots-wrap"> 
77  <ul style="--urlIcon: url('/documents/37638/39612/six-dots-icon.svg');"> 
78    <#list entries as curEntry> 
79    <#assign renderer=curEntry.getAssetRenderer() className=renderer.getClassName() /> 
80    <#if className=="com.liferay.journal.model.JournalArticle" && 
81    curEntry.getAvailableLanguageIds()?seq_contains(locale) && indexLocal &lt; 6> 
82    <#assign title=curEntry.getTitle(locale) 
83    viewURL="${themeDisplay.getPathFriendlyURLPublic()}${themeDisplay.getSiteGroup().getFriendlyURL()}/-/${renderer.getUrlTitle()}" /> 
84    <li class="list-bg align-content-center" > 
85      <a class="li-content" href="${viewURL}" title="${title}"> 
86        ${title} 
87      </a> 
88    </li> 
89  </#if> 
90</#list> 
91</ul> 
92</div 
banner cannot click
chinhphu

Y tế

dichvucong

Hội đồng nhân dân với cử tri

chinhphu

OCOP

chinhphu

Nghị quyết của Đảng

chinhphu

An ninh Đà Nẵng

chinhphu

Vẻ đẹp Đà Nẵng

HỆ THỐNG CƠ SỞ DỮ LIỆU

HỖ TRỢ DOANH NGHIỆP

banner can click

Navigation Menu

QUY HOẠCH & PHÁT TRIỂN

Navigation Menu

THÔNG TIN CẦN BIẾT

Navigation Menu

HienThiCauHoiThamDo

Title

THĂM DÒ Ý KIẾN

Theo bạn nội dung cung cấp trên Cổng thông tin điện tử thành phố Đà Nẵng như thế nào?

KẾT QUẢ BÌNH CHỌN

“Cảm ơn bạn đã bình chọn!”