Changes for page KBCategoryLanding
Last modified by Isaac Mejia on 2026/06/08 20:12
From version 1.1
edited by Isaac Mejia
on 2026/06/08 20:07
on 2026/06/08 20:07
Change comment:
There is no comment for this version
To version 2.1
edited by Isaac Mejia
on 2026/06/08 20:12
on 2026/06/08 20:12
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,12 +1,11 @@ 1 1 {{velocity}} 2 2 ## ------------------------------------------------------------ 3 3 ## Category landing page for eFit subwiki 4 -## R eadsthecategoryspacefromtheURL so it works correctly5 -## whenincluded via{{includereference="KBCategoryLanding.WebHome"/}}4 +## URL pattern: /Main/<Category>/WebHome 5 +## e.g. /Main/Payment_Management/WebHome 6 6 ## ------------------------------------------------------------ 7 7 8 -## Extract the space name from the request URI 9 -## URL pattern: /wiki/efit-kb.membies.com/view/<Space>/WebHome 8 +## Extract category from URL - grab segment after "Main" 10 10 #set ($uri = $request.getRequestURI()) 11 11 #set ($baseSpace = '') 12 12 #set ($catDisplayName = '') ... ... @@ -15,23 +15,22 @@ 15 15 #if ($uri.contains($viewMarker)) 16 16 #set ($afterView = $uri.substring($uri.indexOf($viewMarker) + $viewMarker.length())) 17 17 #set ($uriParts = $afterView.split('/')) 18 - #if ($uriParts.size() > 0) 19 - #set ($baseSpace = $uriParts.get(0)) 17 + ## uriParts: [0]=Main, [1]=Payment_Management, [2]=WebHome 18 + #if ($uriParts.size() > 1) 19 + #set ($baseSpace = $uriParts.get(1)) 20 20 #end 21 21 #end 22 22 23 -## Fallback to doc.space if URL parsing fails24 -#if ("$!baseSpace" == "" || $baseSpace == ' KBCategoryLanding')25 - #set ($baseSpace = $doc.space) 23 +## Fallback 24 +#if ("$!baseSpace" == "" || $baseSpace == 'WebHome' || $baseSpace == 'Main') 25 + #set ($baseSpace = $doc.space.replace('Main.', '')) 26 26 #end 27 27 28 -## Builddisplayname fromspacename(replaceunderscoreswith spaces)29 -#set ($ catDisplayName = $baseSpace.replace('_', ' '))28 +## Full XWiki space reference e.g. "Main.Payment_Management" 29 +#set ($fullSpace = "Main." + $baseSpace) 30 30 31 -## In eFit subwiki, articles live directly in the space (not a sub-space) 32 -## e.g. space = "Technical_Knowledge_Base", articles are in that space 33 -#set ($spaceA = $baseSpace) 34 -#set ($spaceB = $baseSpace) 31 +## Display name - replace underscores and hyphens with spaces 32 +#set ($catDisplayName = $baseSpace.replace('_', ' ').replace('-', '-')) 35 35 36 36 ## ----------------------------- 37 37 ## Read query params safely ... ... @@ -66,7 +66,7 @@ 66 66 ## XWQL WHERE 67 67 ## ----------------------------- 68 68 #set ($where = 69 - "where doc.space = : spaceA" +67 + "where doc.space = :fullSpace " + 70 70 "and doc.name <> 'WebHome' " + 71 71 "and doc.hidden <> true " 72 72 ) ... ... @@ -86,7 +86,7 @@ 86 86 ) 87 87 88 88 #set ($countQuery = $services.query.xwql($countXwql)) 89 -#set ($discard = $countQuery.bindValue(' spaceA', $spaceA))87 +#set ($discard = $countQuery.bindValue('fullSpace', $fullSpace)) 90 90 #if ($hasFilter) 91 91 #set ($discard = $countQuery.bindValue('q', "%" + $filter.toLowerCase() + "%")) 92 92 #end ... ... @@ -121,7 +121,7 @@ 121 121 ) 122 122 123 123 #set ($listQuery = $services.query.xwql($listXwql)) 124 -#set ($discard = $listQuery.bindValue(' spaceA', $spaceA))122 +#set ($discard = $listQuery.bindValue('fullSpace', $fullSpace)) 125 125 #if ($hasFilter) 126 126 #set ($discard = $listQuery.bindValue('q', "%" + $filter.toLowerCase() + "%")) 127 127 #end ... ... @@ -179,11 +179,11 @@ 179 179 #if (!$hasFilter) 180 180 #set ($popXwql = 181 181 "select doc.fullName from XWikiDocument doc " + 182 - "where doc.space = : spaceAand doc.name <> 'WebHome' and doc.hidden <> true " +180 + "where doc.space = :fullSpace and doc.name <> 'WebHome' and doc.hidden <> true " + 183 183 "order by lower(doc.title)" 184 184 ) 185 185 #set ($popQuery = $services.query.xwql($popXwql)) 186 - #set ($discard = $popQuery.bindValue(' spaceA', $spaceA))184 + #set ($discard = $popQuery.bindValue('fullSpace', $fullSpace)) 187 187 #set ($discard = $popQuery.setLimit(4)) 188 188 #set ($popRows = $popQuery.execute()) 189 189 ... ... @@ -301,104 +301,35 @@ 301 301 302 302 <style> 303 303 .kb-category-page { max-width: 1200px; margin: 0 auto; padding: 0 1rem 3rem; } 304 - 305 305 .kb-hero { text-align: center; padding: 2.2rem 0 1rem; } 306 306 .kb-hero-title { font-size: 2.2rem; font-weight: 800; margin: 0; } 307 307 .kb-hero-subtitle { color: #6b7280; margin: 0.6rem 0 1.2rem; } 308 - 309 309 .kb-category-search { display: flex; gap: 0.6rem; justify-content: center; align-items: center; flex-wrap: wrap; } 310 -.kb-category-search-input { 311 - width: min(680px, 92vw); 312 - padding: 0.9rem 1.1rem; 313 - border: 1px solid #d1d5db; 314 - border-radius: 999px; 315 - font-size: 1.05rem; 316 -} 317 -.kb-category-search-button { 318 - padding: 0.9rem 1.1rem; 319 - border-radius: 999px; 320 - border: none; 321 - background: #2563eb; 322 - color: #fff; 323 - font-weight: 700; 324 -} 306 +.kb-category-search-input { width: min(680px, 92vw); padding: 0.9rem 1.1rem; border: 1px solid #d1d5db; border-radius: 999px; font-size: 1.05rem; } 307 +.kb-category-search-button { padding: 0.9rem 1.1rem; border-radius: 999px; border: none; background: #2563eb; color: #fff; font-weight: 700; } 325 325 .kb-category-clear { color: #6b7280; text-decoration: none; font-weight: 700; } 326 326 .kb-category-clear:hover { text-decoration: underline; } 327 327 .kb-muted { color: #9ca3af; } 328 - 329 329 .kb-category-columns { display: grid; grid-template-columns: 1fr; gap: 2rem; align-items: start; } 330 -@media (min-width: 1100px) { 331 - .kb-category-columns { grid-template-columns: 340px minmax(0, 1fr); gap: 2.5rem; } 332 -} 333 -@media (max-width: 1099px) { 334 - .kb-sidebar { order: 2; } 335 - .kb-main { order: 1; } 336 -} 337 - 338 -.kb-sidebar { 339 - border: 1px solid #e5e7eb; 340 - border-radius: 1rem; 341 - padding: 1rem 1.1rem; 342 - background: #fff; 343 - box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06); 344 -} 312 +@media (min-width: 1100px) { .kb-category-columns { grid-template-columns: 340px minmax(0, 1fr); gap: 2.5rem; } } 313 +@media (max-width: 1099px) { .kb-sidebar { order: 2; } .kb-main { order: 1; } } 314 +.kb-sidebar { border: 1px solid #e5e7eb; border-radius: 1rem; padding: 1rem 1.1rem; background: #fff; box-shadow: 0 4px 12px rgba(15,23,42,0.06); } 345 345 .kb-category-list { list-style: none; padding: 0; margin: 0.8rem 0 0; } 346 346 .kb-category-list li { margin: 0.5rem 0; } 347 - 348 348 .kb-category-header-row { display: flex; gap: 0.75rem; justify-content: space-between; align-items: baseline; flex-wrap: wrap; } 349 - 350 -.kb-article-count-badge { 351 - font-size: 0.85rem; 352 - padding: 0.15rem 0.55rem; 353 - border-radius: 999px; 354 - border: 1px solid #d4d4d8; 355 - background: #f4f4f5; 356 - color: #4b5563; 357 -} 358 - 318 +.kb-article-count-badge { font-size: 0.85rem; padding: 0.15rem 0.55rem; border-radius: 999px; border: 1px solid #d4d4d8; background: #f4f4f5; color: #4b5563; } 359 359 .kb-pager { display: flex; gap: 0.75rem; align-items: center; justify-content: space-between; margin: 1rem 0 1.25rem; flex-wrap: wrap; } 360 360 .kb-pager-pages { display: flex; gap: 0.35rem; align-items: center; flex-wrap: wrap; justify-content: center; } 361 -.kb-pager-btn { 362 - padding: 0.55rem 0.9rem; 363 - border-radius: 999px; 364 - border: 1px solid #e5e7eb; 365 - background: #fff; 366 - text-decoration: none; 367 - font-weight: 800; 368 - color: #111827; 369 -} 321 +.kb-pager-btn { padding: 0.55rem 0.9rem; border-radius: 999px; border: 1px solid #e5e7eb; background: #fff; text-decoration: none; font-weight: 800; color: #111827; } 370 370 .kb-pager-btn.is-disabled { opacity: 0.45; cursor: not-allowed; } 371 -.kb-pager-page { 372 - padding: 0.4rem 0.7rem; 373 - border-radius: 999px; 374 - border: 1px solid #e5e7eb; 375 - text-decoration: none; 376 - color: #111827; 377 - font-weight: 800; 378 -} 323 +.kb-pager-page { padding: 0.4rem 0.7rem; border-radius: 999px; border: 1px solid #e5e7eb; text-decoration: none; color: #111827; font-weight: 800; } 379 379 .kb-pager-page.is-current { background: #111827; color: #fff; border-color: #111827; } 380 380 .kb-pager-status { color: #6b7280; font-weight: 800; } 381 381 .kb-pager-bottom { justify-content: center; margin-top: 1.25rem; } 382 - 383 383 .kb-category-card-grid { list-style: none; padding: 0; margin: 0; display: grid; gap: 0.9rem; grid-template-columns: 1fr; } 384 -@media (min-width: 860px) { 385 - .kb-category-card-grid { grid-template-columns: 1fr 1fr; } 386 -} 387 -.kb-article-card { 388 - border: 1px solid #e5e7eb; 389 - border-radius: 0.95rem; 390 - padding: 0.9rem 1rem; 391 - background: #fff; 392 - box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06); 393 -} 394 -.kb-article-card-title { 395 - display: inline-block; 396 - font-size: 1.05rem; 397 - font-weight: 900; 398 - color: #2563eb; 399 - text-decoration: none; 400 - line-height: 1.25; 401 -} 328 +@media (min-width: 860px) { .kb-category-card-grid { grid-template-columns: 1fr 1fr; } } 329 +.kb-article-card { border: 1px solid #e5e7eb; border-radius: 0.95rem; padding: 0.9rem 1rem; background: #fff; box-shadow: 0 4px 12px rgba(15,23,42,0.06); } 330 +.kb-article-card-title { display: inline-block; font-size: 1.05rem; font-weight: 900; color: #2563eb; text-decoration: none; line-height: 1.25; } 402 402 .kb-article-card-title:hover { text-decoration: underline; } 403 403 .kb-article-card-meta { margin-top: 0.35rem; color: #6b7280; font-size: 0.86rem; } 404 404 .kb-article-card-empty { text-align: center; padding: 1.4rem; } ... ... @@ -409,7 +409,6 @@ 409 409 const input = document.querySelector('.kb-category-search-input'); 410 410 const grid = document.getElementById('kbCategoryGrid'); 411 411 if (!input || !grid) return; 412 - 413 413 input.addEventListener('input', function () { 414 414 const q = (input.value || '').trim().toLowerCase(); 415 415 const cards = grid.querySelectorAll('.kb-article-card[data-title]'); ... ... @@ -422,3 +422,4 @@ 422 422 </script> 423 423 {{/html}} 424 424 {{/velocity}} 353 +