前提・実現したいこと
Redmineで親チケット画面に表示される子チケットをソートしたいと考えています。
現在はデフォルトの状態であるため、子チケットのID順に並んでいます。
これをステータス順や、期日順などに並び替えられるようにしたいです。
各チケット画面の設定をどうすればよいか(設定ファイルの変更等)ご教授頂けると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
View Customize Pluginでやってみました。
確認したバージョン
View Customize Plugin:2.10 以上
Redmine 3.4 xx
jquery
1<!--- 2パスのパターン:/issues/[0-9]+ 3挿入位置:全ページのヘッダ 4種別:HTML 5--> 6 7<style> 8 th.checkbox { 9 display: none; 10 } 11 12 /* tablesort */ 13 th[role=columnheader]:not(.no-sort) { 14 cursor: pointer; 15 } 16 17 th[role=columnheader]:not(.no-sort):after { 18 content: ''; 19 float: right; 20 margin-top: 7px; 21 border-width: 0 4px 4px; 22 border-style: solid; 23 border-color: #404040 transparent; 24 display: none; 25 opacity: 0; 26 -ms-user-select: none; 27 -webkit-user-select: none; 28 -moz-user-select: none; 29 user-select: none; 30 } 31 32 th[aria-sort=ascending]:not(.no-sort):after { 33 border-bottom: none; 34 border-width: 4px 4px 0; 35 } 36 37 th[aria-sort]:not(.no-sort):after { 38 display: inline; 39 opacity: 0.4; 40 } 41 42 th[role=columnheader]:not(.no-sort):hover:after { 43 display: inline; 44 opacity: 1; 45 } 46</style> 47 48<!-- プラグインを読み込み --> 49<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script> 50<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/sorts/tablesort.number.min.js"></script> 51 52<script> 53 $(function() { 54 //画面初期表示時の処理 55 addtd_id_tracker(); 56 addheader_issue_tree(); 57 addheader_relations(); 58 setupissue_treeTableSortableHeader(); 59 setuprelationsTableSortableHeader(); 60 61 //関連するチケット追加時の処理 62 let headeraddflg; 63 $(document).on('click', '#new-relation-form input[type="submit"]', function() { 64 headeraddflg = false; 65 $(document).ajaxStop(function() { 66 if (headeraddflg == false) { 67 headeraddflg = true; 68 addheader_relations(); 69 setuprelationsTableSortableHeader() 70 } 71 }) 72 }) 73 }) 74 75 //題名のチケットID・トラッカー部分を別コラムにする(ソート可能にするため) 76 function addtd_id_tracker() { 77 $('#issue_tree tr td.subject').each(function() { 78 var tracker = $(this).find('a.issue').text().split('#').shift(); 79 var issueid = $(this).find('a.issue').text().split('#').pop(); 80 var subjectfront = $(this).html().split('</a>: ').shift().split('>').shift(); 81 var subjectback = $(this).html().split('</a>: ').pop(); 82 $(this).before('<td class="id">' + issueid + '</td>'); 83 $(this).after('<td class="tracker">' + tracker + '</td>'); 84 $(this).html(subjectfront + '>' + subjectback + '</a>'); 85 }) 86 } 87 88 //子チケット表示テーブルにヘッダーを追加 89 function addheader_issue_tree() { 90 $('#issue_tree .list').prepend( 91 '<thead>' + 92 '<tr>' + 93 '<th class="checkbox"></th>' + 94 '<th><a href="#issue_tree">' + '#' + '</a></th>' + 95 '<th><a href="#issue_tree">' + '題名' + '</a></th>' + 96 '<th><a href="#issue_tree">' + 'トラッカー' + '</a></th>' + 97 '<th><a href="#issue_tree">' + 'ステータス' + '</a></th>' + 98 '<th><a href="#issue_tree">' + '担当者' + '</a></th>' + 99 '<th><a href="#issue_tree">' + '進捗率' + '</a></th>' + 100 '</tr>' + 101 '</thead>'); 102 } 103 104 //関連チケット表示テーブルにヘッダーを追加 105 function addheader_relations() { 106 $('#relations .list thead').remove(); 107 $('#relations .list').prepend( 108 '<thead>' + 109 '<tr>' + 110 '<th class="checkbox"></th>' + 111 '<th><a href="#relations">' + '題名' + '</a></th>' + 112 '<th><a href="#relations">' + 'ステータス' + '</a></th>' + 113 '<th><a href="#relations">' + '開始日' + '</a></th>' + 114 '<th><a href="#relations">' + '期日' + '</a></th>' + 115 '<th><a href="#relations">' + '進捗率' + '</a></th>' + 116 '<th></th>' + 117 '</tr>' + 118 '</thead>'); 119 } 120 121 //子チケット表示テーブルにソートプラグインを有効化 122 function setupissue_treeTableSortableHeader() { 123 $('#issue_tree .list').each(function(i, table) { 124 if (table.rows.length < 3) return true; 125 var tr = $(table.rows).first(); 126 if (tr.find("TH").length > 0) { 127 tr.attr('data-sort-method', 'none'); 128 tr.find("TD").attr('data-sort-method', 'none'); 129 new Tablesort(table); 130 } 131 }); 132 } 133 134 //関連チケット表示テーブルにソートプラグインを有効化 135 function setuprelationsTableSortableHeader() { 136 $('#relations .list').each(function(i, table) { 137 if (table.rows.length < 3) return true; 138 var tr = $(table.rows).first(); 139 if (tr.find("TH").length > 0) { 140 tr.attr('data-sort-method', 'none'); 141 tr.find("TD").attr('data-sort-method', 'none'); 142 new Tablesort(table); 143 } 144 }); 145 } 146</script>
投稿2020/09/13 05:58
編集2020/09/13 07:26総合スコア193
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/16 02:49