Changes for page 学校一覧
Last modified by Super Admin on 2026/03/23 10:15
From version
37.1
edited by Super Admin
on 2026/03/23 10:15
on 2026/03/23 10:15
Change comment:
There is no comment for this version
To version
10.1
edited by Super Admin
on 2026/03/06 22:09
on 2026/03/06 22:09
Change comment:
There is no comment for this version
Summary
Details
- Page properties
-
- Content
-
... ... @@ -3,71 +3,37 @@ 3 3 ## ソート: 更新順(デフォルト)/ 都道府県順 4 4 ## カード形式で表示し、活動数・投稿数・最終更新日を表示 5 5 6 -## --- 閲覧者情報(非表示校フィルタ用) --- 7 -#set($listViewerUser = $xcontext.user) 8 -#set($isListAdmin = false) 9 -#if($listViewerUser != 'XWiki.XWikiGuest') 10 - #set($listViewerDoc = $xwiki.getDocument($listViewerUser)) 11 - #set($listViewerAccountType = $!listViewerDoc.getValue('accountType')) 12 - #if($listViewerAccountType == 'admin') 13 - #set($isListAdmin = true) 14 - #end 15 -#end 16 - 17 17 #set($sortParam = $!request.sort) 18 18 #if(!$sortParam || $sortParam == '') 19 19 #set($sortParam = 'updated') 20 20 #end 21 21 22 -## ソート順に応じたXWQLクエリ(非表示校フィルタ付き) 23 -#if($isListAdmin) 24 - ## 管理者: 全校表示 25 - #if($sortParam == 'pref') 26 - #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school order by school.prefecture, school.schoolName")) 27 - #else 28 - #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school order by doc.date desc")) 29 - #end 11 +## ソート順に応じたXWQLクエリ 12 +#if($sortParam == 'pref') 13 + #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school order by school.prefecture, school.schoolName")) 30 30 #else 31 - ## 一般: 非表示校を除外 32 - #if($sortParam == 'pref') 33 - #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school where (school.hidden <> 1 or school.hidden is null) order by school.prefecture, school.schoolName")) 34 - #else 35 - #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school where (school.hidden <> 1 or school.hidden is null) order by doc.date desc")) 36 - #end 15 + ## 更新順: ドキュメントの最終更新日でソート(降順) 16 + #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school order by doc.date desc")) 37 37 #end 38 38 #set($results = $query.execute()) 39 -## サンプル高等学校を常に先頭に表示 40 -#set($samplePageName = 'Schools.D100000000001.WebHome') 41 -#set($sortedResults = []) 42 -#foreach($r in $results) 43 - #if($r == $samplePageName) 44 - #set($discard = $sortedResults.add(0, $r)) 45 - #else 46 - #set($discard = $sortedResults.add($r)) 47 - #end 48 -#end 49 -#set($results = $sortedResults) 50 50 51 51 {{html clean="false"}} 52 -<h1 class="home-section-title">登録されている学校</h1> 53 -<div class="sort-header">54 - <div class="school-count">21 +<h1 class="home-section-title" style="font-size:1.4em;margin-bottom:20px;">登録されている学校</h1> 22 +<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:10px;"> 23 + <div style="font-size:0.9em;color:#64748b;"> 55 55 $results.size() 校が登録されています 56 56 </div> 57 - <div class="sort-toggle-group">26 + <div style="display:flex;gap:4px;background:#f1f5f9;border-radius:8px;padding:3px;"> 58 58 <a href="$doc.getURL('view', 'sort=updated')" 59 - class="sort-toggle #if($sortParam == 'updated')active#end"> 28 + style="padding:6px 14px;border-radius:6px;font-size:0.84em;font-weight:600;text-decoration:none;display:inline-flex;align-items:center;gap:4px; 29 + #if($sortParam == 'updated')background:#fff;color:#1e293b;box-shadow:0 1px 3px rgba(0,0,0,0.1);#else color:#64748b;#end"> 60 60 <svg class="ico ico-fixed-14" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg> 更新順 61 61 </a> 62 62 <a href="$doc.getURL('view', 'sort=pref')" 63 - class="sort-toggle #if($sortParam == 'pref')active#end"> 33 + style="padding:6px 14px;border-radius:6px;font-size:0.84em;font-weight:600;text-decoration:none;display:inline-flex;align-items:center;gap:4px; 34 + #if($sortParam == 'pref')background:#fff;color:#1e293b;box-shadow:0 1px 3px rgba(0,0,0,0.1);#else color:#64748b;#end"> 64 64 <svg class="ico ico-fixed-14" viewBox="0 0 24 24"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> 都道府県順 65 65 </a> 66 - #if($listViewerUser != 'XWiki.XWikiGuest') 67 - <a href="/bin/SeitokaiCode/CreateSchool" class="sort-toggle" style="margin-left:var(--sp-2); color:var(--primary); border-color:var(--primary);"> 68 - <svg class="ico ico-fixed-14" viewBox="0 0 24 24"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg> 学校を追加 69 - </a> 70 - #end 71 71 </div> 72 72 </div> 73 73 {{/html}} ... ... @@ -78,7 +78,7 @@ 78 78 #set($currentPref = '') 79 79 80 80 {{html clean="false"}} 81 -<div class="school-card-grid">47 +<div style="display:grid;grid-template-columns:repeat(auto-fill, minmax(320px, 1fr));gap:16px;"> 82 82 #foreach($docName in $results) 83 83 #set($schoolDoc = $xwiki.getDocument($docName)) 84 84 #set($schoolObj = $schoolDoc.getObject('SeitokaiCode.SchoolClass')) ... ... @@ -95,15 +95,13 @@ 95 95 #set($actCount = $schoolDoc.getObjects('SeitokaiCode.ActivityClass').size()) 96 96 ## 投稿数をカウント(全活動の投稿合計) 97 97 #set($postCount = $schoolDoc.getObjects('SeitokaiCode.ActivityPostClass').size()) 98 - ## 特色ある活動の数 とタイトルを収集64 + ## 特色ある活動の数をカウント 99 99 #set($schoolActivities = $schoolDoc.getObjects('SeitokaiCode.ActivityClass')) 100 100 #set($featuredCount = 0) 101 - #set($featuredTitles = []) 102 102 #if($schoolActivities) 103 103 #foreach($sa in $schoolActivities) 104 104 #if($!sa.getValue('featured') == '1') 105 105 #set($featuredCount = $featuredCount + 1) 106 - #set($discard = $featuredTitles.add($!sa.getValue('title'))) 107 107 #end 108 108 #end 109 109 #end ... ... @@ -111,40 +111,39 @@ 111 111 ## 都道府県グループヘッダー(都道府県順の場合) 112 112 #if($sortParam == 'pref' && $sPref != $currentPref) 113 113 #set($currentPref = $sPref) 114 - <div class="pref-group-header">115 - <span class="pref-group-label"><svg class="ico ico-fixed-16" viewBox="0 0 24 24"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> $!escapetool.xml($currentPref)</span>78 + <div style="grid-column:1/-1;margin-top:12px;padding:8px 0;border-bottom:2px solid #e2e8f0;"> 79 + <span style="font-size:1.05em;font-weight:700;color:#1e293b;display:inline-flex;align-items:center;gap:4px;"><svg class="ico ico-fixed-16" viewBox="0 0 24 24"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> $!escapetool.xml($currentPref)</span> 116 116 </div> 117 117 #end 118 118 119 - #set($sHidden = $!schoolObj.getValue('hidden')) 120 - <a href="$schoolDoc.getURL('view')" class="school-card #if($sHidden == 1)school-card-hidden#end"> 121 - <div class="school-card-body"> 122 - <div class="school-card-header-row"> 123 - <div class="school-card-name">$!escapetool.xml($sName)</div> 124 - #if($sHidden == 1) 125 - <span class="badge-hidden">非表示</span> 126 - #end 83 + <a href="$schoolDoc.getURL('view')" style="text-decoration:none;color:inherit;display:block;background:#fff;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden;transition:box-shadow 0.2s,transform 0.1s;" 84 + onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.08)';this.style.transform='translateY(-1px)'" 85 + onmouseout="this.style.boxShadow='';this.style.transform=''"> 86 + <div style="padding:16px 20px;"> 87 + <div style="display:flex;align-items:center;gap:8px;margin-bottom:4px;flex-wrap:wrap;"> 88 + <div style="font-weight:700;font-size:0.95em;color:#1e293b;">$!escapetool.xml($sName)</div> 127 127 #if($sEst) 128 - <span class="school-card-badge #if($sEst == '公立')public#elseif($sEst == '私立')private#else national#end">$!escapetool.xml($sEst)</span> 90 + <span style="font-size:0.72em;padding:2px 8px;border-radius:4px;font-weight:600; 91 + #if($sEst == '公立')background:#dbeafe;color:#1d4ed8; 92 + #elseif($sEst == '私立')background:#fce7f3;color:#be185d; 93 + #else background:#f3e8ff;color:#7c3aed;#end">$!escapetool.xml($sEst)</span> 129 129 #end 130 130 </div> 131 - <div class="school-card-meta">96 + <div style="font-size:0.82em;color:#94a3b8;margin-bottom:8px;"> 132 132 $!escapetool.xml($sPref) $!escapetool.xml($sCity) 133 133 #if($sCoed) ・ $!escapetool.xml($sCoed)#end 134 - #if($sSystem && !$sSystem.isEmpty())・#foreach($__sys in $sSystem)#if($foreach.count > 1)・#end$!escapetool.xml($__sys)#end#end99 + #if($sSystem) ・ $!escapetool.xml($sSystem)#end 135 135 </div> 136 - ## 特色ある活動 タイトル101 + ## 特色ある活動バッジ 137 137 #if($featuredCount > 0) 138 - <div class="school-card-featured-titles"> 139 - #foreach($ft in $featuredTitles) 140 - <span class="featured-title-item"><svg class="ico ico-fixed-12" viewBox="0 0 24 24" fill="currentColor" stroke="none"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg> $!escapetool.xml($ft)</span> 141 - #end 103 + <div style="display:flex;gap:4px;flex-wrap:wrap;margin-bottom:8px;"> 104 + <span style="font-size:0.72em;padding:2px 8px;background:#fef3c7;color:#92400e;border-radius:4px;font-weight:600;display:inline-flex;align-items:center;gap:3px;"><svg class="ico ico-fixed-14" viewBox="0 0 24 24" fill="currentColor" stroke="none"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg> 特色ある活動 ${featuredCount}件</span> 142 142 </div> 143 143 #end 144 - <div class="school-card-stats">145 - <span><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg> 活動 <s panclass="num">$actCount</span>件</span>146 - <span><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg> 投稿 <s panclass="num">$postCount</span>件</span>147 - <span><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg> 更新 $lastUpdate</span> 107 + <div style="display:flex;gap:14px;font-size:0.8em;color:#94a3b8;"> 108 + <span style="display:inline-flex;align-items:center;gap:3px;"><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg> 活動 <strong style="color:#334155;">$actCount</strong>件</span> 109 + <span style="display:inline-flex;align-items:center;gap:3px;"><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg> 投稿 <strong style="color:#334155;">$postCount</strong>件</span> 110 + <span style="display:inline-flex;align-items:center;gap:3px;"><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg> 更新 $lastUpdate</span> 148 148 </div> 149 149 </div> 150 150 </a>