Thống kê tin bài - vpub
Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> assetEntryQuery.clearDate [in template "20097#20125#59341" at line 83, column 3]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
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: ${assetEntryQuery.clearDate()} [in template "20097#20125#59341" at line 83, column 1]
----
1<script src="/documents/35805/59147/FileSaver.min.js"></script>
2<script src="/documents/35805/59147/Blob.min.js"></script>
3<script src="/documents/35805/59147/xls.core.min.js"></script>
4<script src="/documents/35805/59147/tableexport.js"></script>
5<script src="/documents/35805/59147/tableToExcel.js"></script>
6
7<link href="/documents/35805/59147/select2.min.css" rel="stylesheet" />
8<script src="/documents/35805/59147/select2.min.js"></script>
9<script src="/documents/35805/59147/luckmoshyJqueryPagnation.js"></script>
10
11
12<#assign assetEntryQueryService = objectUtil('com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil')>
13
14<#assign assetEntryQuery = objectUtil('com.liferay.asset.kernel.service.persistence.AssetEntryQuery')>
15
16${assetEntryQuery.setOrderByCol1('publishDate') }
17<#assign count = 0>
18<#assign fDate = dateUtil.parseDate('yyyy-MM-dd', '1990-01-01',locale )>
19<#assign tDate = dateUtil.parseDate('yyyy-MM-dd HH:mm', '9999-01-01 23:59',locale )>
20<#if request.getParameter("fromDate")??>
21 <#attempt>
22 <#assign fDate = dateUtil.parseDate('yyyy-MM-dd', request.getParameter("fromDate"),locale )>
23 <#assign fDate = dateUtil.parseDate('yyyy-MM-dd HH:mm:ss', fDate?datetime?iso("GMT-07")?split("T")[0] + " "+fDate?datetime?iso("GMT-07")?split("T")[1]?split("-")[0],locale )>
24 <#recover>
25 <#assign fDate = dateUtil.parseDate('yyyy-MM-dd', '1990-01-01',locale )>
26 </#attempt>
27</#if>
28<#if request.getParameter("toDate")??>
29 <#attempt>
30 <#assign tDate = dateUtil.parseDate('yyyy-MM-dd HH:mm', request.getParameter("toDate")+" 23:59",locale )>
31 <#assign tDate = dateUtil.parseDate('yyyy-MM-dd HH:mm:ss', tDate?datetime?iso("GMT-07")?split("T")[0] + " "+tDate?datetime?iso("GMT-07")?split("T")[1]?split("-")[0],locale )>
32 <#recover>
33 <#assign tDate = dateUtil.parseDate('yyyy-MM-dd HH:mm', '9999-01-01 23:59',locale )>
34 </#attempt>
35</#if>
36<#if ((request.getParameter("fromDate")?? && request.getParameter("toDate")??)==false)>
37 <#assign cDate = .now?date>
38
39 <#assign fDate = dateUtil.parseDate('yyyy-MM-dd', cDate?string["yyyy-MM"]+"-01",locale )>
40 <#assign ffDate = dateUtil.parseDate('yyyy-MM-dd', cDate?string["yyyy-MM"]+"-01",locale )>
41 <#assign tDate = dateUtil.parseDate('yyyy-MM-dd HH:mm', cDate?string["yyyy-"]+(getterUtil.getIntegerStrict(cDate?string["M"])+1)+"-01"+" 00:00",locale )>
42 <#assign tDate = dateUtil.parseDate('yyyy-MM-dd HH:mm:ss', tDate?datetime?iso("GMT-07")?split("T")[0] + " "+tDate?datetime?iso("GMT-07")?split("T")[1]?split("-")[0],locale )>
43 <#assign ttDate = dateUtil.parseDate('yyyy-MM-dd HH:mm:ss', tDate?datetime?iso("GMT-07")?split("T")[0] + " "+tDate?datetime?iso("GMT-07")?split("T")[1]?split("-")[0],locale )>
44 <script>
45 setTimeout(function(){
46
47 document.getElementById("fromDate").value='${fDate?date?string["yyyy-MM-dd"]}';
48 document.getElementById("toDate").value='${tDate?date?string["yyyy-MM-dd"]}';
49
50
51 }, 500);
52
53 </script>
54
55
56 <#assign fDate = dateUtil.parseDate('yyyy-MM-dd HH:mm:ss', fDate?datetime?iso("GMT-07")?split("T")[0] + " "+fDate?datetime?iso("GMT-07")?split("T")[1]?split("-")[0],locale )>
57
58
59
60
61
62</#if>
63
64<#if request.getParameter("catID")??>
65 <#if request.getParameter("catID")?has_content>
66 ${assetEntryQuery.setAllCategoryIds([getterUtil.getLongStrict(request.getParameter("catID"))])}
67 </#if>
68</#if>
69
70
71
72${assetEntryQuery.setAndOperator(true)}
73
74<#if request.getParameter("title")??>
75 ${assetEntryQuery.setTitle(request.getParameter("title"))}
76
77</#if>
78
79<#if request.getParameter("userName")??>
80 ${assetEntryQuery.setUserName(request.getParameter("userName"))}
81</#if>
82
83${assetEntryQuery.clearDate()}
84${assetEntryQuery.setPublishDateBetween(fDate,tDate)}
85
86
87
88
89
90<#assign assetCategoryLocalServiceUtil = objectUtil('com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil')>
91<#assign strArray = []>
92
93<#assign dataCATs = assetCategoryLocalServiceUtil.getCategories()>
94
95
96
97
98<#assign dDMStructureLocalService = objectUtil('com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil')>
99<#assign types = []>
100<#assign dataDDMs = dDMStructureLocalService.getStructures(themeDisplay.getScopeGroupId())>
101 <#if dataDDMs?has_content>
102 <#list dataDDMs as ddm>
103
104 <#if (ddm.getName()?contains("Cấu trúc tin tức")
105 || ddm.getName()?contains("Cấu trúc video")
106 || ddm.getName()?contains("Cấu trúc album")
107 || ddm.getName()?contains("Cấu trúc liên kết web")
108 )>
109 <#assign types += [ddm.getStructureId()]>
110 </#if>
111
112 </#list>
113 </#if>
114${assetEntryQuery.setClassTypeIds(types)}
115<#assign datas = assetEntryQueryService.getEntries(assetEntryQuery)>
116<#assign dataCount = assetEntryQueryService.getEntriesCount(assetEntryQuery)>
117
118<style>
119.MsoNormalTablea th{ text-align:center; font-weight:bold;background:antiquewhite; }
120#table_export caption{display:none;}
121.col-form-label {}
122.rowd1{margin-bottom:0.5rem!important;}
123.bg-danger .row { margin: 5px!important;}
124
125div.pager {text-align: right; margin: 1em 0;}
126
127div.pager span {
128 display: inline-block;
129 width: 1.8em; height: 1.7em; line-height: 1.8;
130 text-align: center;
131 cursor: pointer;
132 background: #000;
133 color: #fff;
134 margin-right: 0.5em;margin-bottom: 5px;
135}
136
137div.pager span.active {background: #c00;}
138
139.body_tktb{margin-bottom: 10px;}
140.tabletkt{}
141
142@media only screen and (min-width: 768px ) and (max-width: 1279px ) {
143 .rowd1 .labeltk{flex: 0 0 15%;max-width: 15%;}
144 .rowd1 .inputtexttk{flex: 0 0 85%;max-width: 85%;}
145 .col_fixn{}
146}
147
148@media only screen and (max-width: 767px) {
149 .rowd1 .labeltk{flex: auto;max-width: initial;}
150 .col_fix{width: 100%; flex: inherit;max-width: initial;}
151 .col_fixn{width: 100%; flex: inherit;max-width: initial;}
152 .labeltkn{display:none;}
153}
154.pager
155{
156 display:none;
157}
158</style>
159
160<div class="bg_titlecate bg_titlecatechuyenmuc bg_titlecatechuyenmuc_an" style="border:0px;white-space: nowrap;">Thống kê tin bài</div>
161<div class="body_tktb">
162<div class="form-group row rowd1" style="display:none;">
163 <label for="example-text-input" class="col-2 col-form-label labeltk">Tiêu đề</label>
164
165 <div class="col-10 col_fix inputtexttk">
166 <input id="title" class="form-control" placeholder="Nhập từ khóa tìm kiếm" title="Search" type="text" value="" >
167 </div>
168</div>
169
170<div class="form-group row rowd1">
171 <label for="example-text-input" class="col-2 col-form-label labeltk">Người tạo</label>
172
173 <div class="col-10 col_fix">
174 <input id="userName" class="form-control" placeholder="Nhập từ khóa tìm kiếm" title="Search" type="text" value="" >
175 </div>
176</div>
177
178<div class="form-group row rowd1">
179 <label for="example-text-input" class="col-2 col-form-label labeltk">Loại tin bài</label>
180
181 <div class="col-10 col_fix">
182 <select id="catID" class="form-control">
183 <option value="">--- Chọn loại tin bài ---</option>
184 <#if dataCATs?has_content>
185
186 <#list dataCATs as cat>
187 <#if (cat.getGroupId()==themeDisplay.getScopeGroupId()
188 && cat.getName()!="Album"
189 && cat.getName()!="Hình ảnh hoạt động"
190 && cat.getName()!="Banner Header"
191 && cat.getName()!="Hình ảnh liên kết"
192 && cat.getName()!="Quảng cáo"
193 )>
194 <option p-value="${cat.getParentCategoryId()}" value="${cat.getCategoryId()}">${cat.getName()}</option>
195 </#if>
196
197 </#list>
198 </#if>
199 </select>
200 </div>
201</div>
202
203<div class="form-group row rowd1" >
204 <label for="fromDate" class="col-2 col-form-label labeltk">Từ ngày</label>
205 <div class="col-4 col_fix">
206 <input class="form-control" type="date" value="" id="fromDate">
207 </div>
208
209 <label for="toDate" class="col-1 col-form-label labeltk">đến ngày</label>
210 <div class="col-4 col_fix">
211 <input class="form-control" type="date" value="" id="toDate">
212 </div>
213
214</div>
215
216<div class="form-group row rowd1" >
217 <label for="fromDate" class="col-2 col-form-label labeltk labeltkn"> </label>
218 <div class="col-10 col_fixn">
219 <button onclick='searchTK()' type="button" class="btn btn-primary" style="">
220 Tìm kiếm</button>
221
222 <button onclick='resetTK()' type="button" class="btn btn-primary" style="">Làm lại</button>
223
224 <button onclick="exportExcel()" type="button" class="btn btn-primary1" style="background:#0C7238 url('/documents/35805/59144/exportexcel48.png') no-repeat right center;padding-right:40px;color:#fff;">Xuất Excel</button>
225
226 </div>
227</div>
228<script>
229 <#if request.getParameter("fromDate")??>
230 document.getElementById("fromDate").value='${request.getParameter("fromDate")}';
231 </#if>
232 <#if request.getParameter("toDate")??>
233 document.getElementById("toDate").value='${request.getParameter("toDate")}';
234 </#if>
235<#if request.getParameter("title")??>
236 document.getElementById("title").value='${request.getParameter("title")}';
237</#if>
238<#if request.getParameter("userName")??>
239 document.getElementById("userName").value='${request.getParameter("userName")}';
240</#if>
241<#if request.getParameter("catID")??>
242 document.getElementById("catID").value='${request.getParameter("catID")}';
243</#if>
244function buildTree(id,level)
245{
246 var arrayHtml=[];
247 if(level==null)
248 level=0;
249 var array= $('#catID option[p-value]').filter(function(item){
250 return $(this).attr('p-value')==id;
251 });
252 for(var i=0;i<array.length;i++)
253 {
254 var spce="";
255 for(j=0;j<level*4;j++)
256 {
257 spce+="-";
258 }
259 array[i].innerText=spce+array[i].innerText;
260 arrayHtml.push(array[i]);
261 var arr= buildTree($(array[i]).attr('value'),level+1);
262 for(j=0;j<arr.length;j++)
263 {
264 arrayHtml.push(arr[j]);
265 }
266 }
267 return arrayHtml;
268}
269var xx=buildTree('0',0);
270$('#catID option[p-value]').remove();
271$(xx).each(function(){
272
273$('#catID').append(this);
274});
275 function searchTK(){
276 var url=new URL(location.href);
277 url.searchParams.set("title",document.getElementById("title").value);
278 url.searchParams.set("fromDate",document.getElementById("fromDate").value);
279 url.searchParams.set("toDate",document.getElementById("toDate").value);
280 url.searchParams.set("userName",document.getElementById("userName").value);
281 url.searchParams.set("catID",document.getElementById("catID").value);
282 location.href=url.toString();
283
284 }
285 function resetTK(){
286 var url=new URL(location.href);
287 url.searchParams.set("title","");
288 url.searchParams.set("fromDate","");
289 url.searchParams.set("toDate","");
290 url.searchParams.set("userName","");
291 url.searchParams.set("catID","");
292 location.href=url.toString();
293 }
294</script>
295<div style="float:left;">
296Có ${dataCount} kết quả
297</div>
298<div style="float: right;">
299 <ul id="luckmoshy" class="pagination justify-content-right pagination-md">
300</div>
301<table border="1" data-cols-width="5,20,50,10,20" cellpadding="5" cellspacing="0" class="MsoNormalTablea" style="" width="100%" style="border-collapse: collapse;" id="table_export">
302 <thead>
303 <tr>
304
305 <th data-f-name="Arial" data-f-sz="17" data-f-bold="true" data-f-color="" data-a-h="center" data-a-v="middle" data-b-a-s="thin" data-b-a-c="FF808080" colspan="5" style="font-weight:bold;border:0px;background:transparent;font-family: Arial;">DANH SÁCH TIN BÀI
306 <#if request.getParameter("fromDate")??>
307 <#attempt>
308 <#assign fDate = dateUtil.parseDate('yyyy-MM-dd', request.getParameter("fromDate"),locale )>
309 TỪ NGÀY ${dateUtil.getDate(fDate, 'dd/MM/yyyy', locale)}
310 <#recover>
311
312 </#attempt>
313</#if>
314<#if request.getParameter("toDate")??>
315 <#attempt>
316 <#assign tDate = dateUtil.parseDate('yyyy-MM-dd', request.getParameter("toDate"),locale )>
317 ĐẾN NGÀY ${dateUtil.getDate(tDate, 'dd/MM/yyyy', locale)}
318 <#recover>
319
320 </#attempt>
321</#if>
322
323<#if ((request.getParameter("fromDate")?? && request.getParameter("toDate")??)==false)>
324TỪ NGÀY ${dateUtil.getDate(ffDate, 'dd/MM/yyyy', locale)} ĐẾN NGÀY ${dateUtil.getDate(ttDate, 'dd/MM/yyyy', locale)}
325</#if>
326 </th>
327
328 </tr>
329
330 <tr>
331 <th data-f-name="Arial" data-a-h="center" data-f-sz="13" data-fill-color="FFFAEBD7" data-f-bold="true" data-b-a-s="thin" data-b-a-c="FF808080" width="5%">STT</th>
332 <th data-f-name="Arial" data-a-h="center" data-f-sz="13" data-fill-color="FFFAEBD7" data-f-bold="true" data-b-a-s="thin" data-b-a-c="FF808080" width="20%">Loại tin bài</th>
333 <th data-f-name="Arial" data-a-h="center" data-f-sz="13" data-fill-color="FFFAEBD7" data-f-bold="true" data-b-a-s="thin" data-b-a-c="FF808080" width="50%">Tiêu đề</th>
334 <th data-f-name="Arial" data-a-h="center" data-f-sz="13" data-fill-color="FFFAEBD7" data-f-bold="true" data-b-a-s="thin" data-b-a-c="FF808080" width="10%">Ngày xuất bản</th>
335 <th data-f-name="Arial" data-a-h="center" data-f-sz="13" data-fill-color="FFFAEBD7" data-f-bold="true" data-b-a-s="thin" data-b-a-c="FF808080" width="15%">Người tạo</th>
336 </tr>
337 </thead>
338 <tbody>
339
340 <#if datas?has_content>
341 <#list datas as entry>
342 <#assign count += 1>
343
344 <#assign pDate = dateUtil.parseDate('yyyy-MM-dd HH:mm:ss', entry.getPublishDate()?datetime?iso("GMT+07")?split("T")[0] + " "+entry.getPublishDate()?datetime?iso("GMT+07")?split("T")[1]?split("-")[0],locale )>
345
346 <#assign
347 entryUserName = entry.getUserName()
348 entryPublishDate = dateUtil.getDate(pDate, 'dd/MM/yyyy HH:mm', locale)
349
350 entryCount= entry.getViewCount()
351 cats= entry.getCategories()
352 sizeCat= cats?size
353 >
354 <#attempt>
355 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry)>
356 <#recover>
357 <#assign viewURL = 'Error'>
358 </#attempt>
359
360 <#attempt>
361 <#assign entryTitle = htmlUtil.escape(entry.getTitle(locale))>
362 <#recover>
363 <#assign entryTitle = 'Tin lỗi - Không tìm thấy'>
364 </#attempt>
365
366 <#attempt>
367 <#if (themeDisplay.getURLCurrent()?contains("/"+themeDisplay.getScopeGroupName()+"/"))>
368
369 <#assign viewURL = '/web/'+themeDisplay.getScopeGroupName()+"/-/"+entry.getAssetRenderer().getUrlTitle() >
370 <#else>
371 <#assign viewURL = '/-/'+entry.getAssetRenderer().getUrlTitle() >
372
373 </#if>
374
375 <#assign docXml = saxReaderUtil.read(entry.getAssetRenderer().getArticle().getContent())>
376 <#assign source = docXml.valueOf("//dynamic-element[@name='Source']/dynamic-content/text()")>
377 <#recover>
378 <#assign source = "Error">
379 </#attempt>
380
381 <tr>
382 <td data-f-name="Arial" data-a-h="right" data-f-sz="13" data-b-a-s="thin" data-b-a-c="FF808080" align="right">${count}</td>
383 <td data-f-name="Arial" data-f-sz="13" data-a-wrap="true" data-b-a-s="thin" data-b-a-c="FF808080">
384 <#assign ccount = 0>
385 <#list cats as cat>
386 ${cat.getName()}
387 <#if (ccount< sizeCat-1)>
388 ,
389 </#if>
390 <#assign ccount += 1>
391 </#list>
392
393 </td>
394 <td data-f-name="Arial" data-f-sz="13" data-a-wrap="true" data-b-a-s="thin" data-b-a-c="FF808080"><a href="${viewURL}" target="_blank">${entryTitle}</a></td>
395 <td data-f-name="Arial" data-a-h="center" data-f-sz="13" data-b-a-s="thin" data-b-a-c="FF808080" align="center">${entryPublishDate}</td>
396 <!--<td>${source}</td>-->
397 <td data-f-name="Arial" data-f-sz="13" data-b-a-s="thin" data-b-a-c="FF808080">${entryUserName}</td>
398 </tr>
399
400 </#list>
401
402 </#if>
403 </tbody>
404 <tfoot style="display:none">
405 <tr>
406 <th data-b-a-s="thin" data-b-a-c="FF808080" colspan="5">
407 Có ${dataCount} kết quả
408 </th>
409
410 </tr>
411 </tfoot>
412</table>
413
414</div>
415<script>
416/*
417$("#table_export").tableExport({formats: ["xlsx"],sheetname:"Data Export",fileName:"TraCuuTinTuc"});
418*/
419
420
421function exportExcel() {
422 TableToExcel.convert(document.getElementById('table_export'),{
423 name: "ThongKeTinBai_BacLieu.xlsx",
424 autoStyle: false,
425 sheet: {
426 name: "Tin bài"
427 }
428 });
429}
430
431$('#table_export').each(function() {
432 var currentPage = 0;
433 var numPerPage = 20;
434 var $table = $(this);
435 $table.bind('repaginate', function() {
436 $table.find('tbody tr').hide().slice(currentPage * numPerPage, (currentPage + 1) * numPerPage).show();
437 });
438 $table.trigger('repaginate');
439 var numRows = $table.find('tbody tr').length;
440 var numPages = Math.ceil(numRows / numPerPage);
441 var $pager = $('<div class="pager"></div>');
442 for (var page = 0; page < numPages; page++) {
443 $('<span class="page-number"></span>').text(page + 1).bind('click', {
444 newPage: page
445 }, function(event) {
446 currentPage = event.data['newPage'];
447 $table.trigger('repaginate');
448 $(this).addClass('active').siblings().removeClass('active');
449 }).appendTo($pager).addClass('clickable');
450 }
451 $pager.insertBefore($table).find('span.page-number:first').addClass('active');
452});
453$(document).ready(function(){
454 $('select').select2();
455 $('.body_tktb').focus();
456 $('.body_tktb')[0].onkeyup=function(event){
457 if (event.keyCode === 13) {
458 searchTK();
459 }
460
461 }
462
463$('#luckmoshy').luckmoshyPagination({
464 totalPages: parseInt($('.pager .page-number').last().text()),
465 // the current page that show on start
466 startPage: 1,
467
468 // maximum visible pages
469 visiblePages: 3,
470
471 initiateStartPageClick: true,
472
473 // template for pagination links
474 href: false,
475
476 // variable name in href template for page number
477 hrefVariable: '{{number}}',
478
479 // Text labels
480 first: 'Trang đầu',
481 prev: 'Trang trước',
482 next: 'Trang sau',
483 last: 'Trang cuối',
484
485 // carousel-style pagination
486 loop: true,
487
488 // callback function
489 onPageClick: function (event, page) {
490 var _page= parseInt($('.pager .page-number.active').last().text());
491 if(_page!=page)
492 {
493 $('.pager .page-number').eq(page-1).trigger('click');
494 }
495 },
496
497 // pagination Classes
498 paginationClass: 'pagination',
499 nextClass: 'next',
500 prevClass: 'prev',
501 lastClass: 'last',
502 firstClass: 'first',
503 pageClass: 'page-item ',
504 activeClass: 'active',
505 disabledClass: 'disabled'
506
507});
508
509});
510
511
512
513</script>
