質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Redmine

Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が可能な、 オープンソースプロジェクト管理ソフトウェアです。

Q&A

解決済

1回答

4276閲覧

Redmineで親チケット画面に表示される子チケットをソートしたいです。

keiktm

総合スコア1

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Redmine

Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が可能な、 オープンソースプロジェクト管理ソフトウェアです。

0グッド

0クリップ

投稿2020/09/08 02:04

前提・実現したいこと

Redmineで親チケット画面に表示される子チケットをソートしたいと考えています。
現在はデフォルトの状態であるため、子チケットのID順に並んでいます。
これをステータス順や、期日順などに並び替えられるようにしたいです。
各チケット画面の設定をどうすればよいか(設定ファイルの変更等)ご教授頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
takashikawai

総合スコア172

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keiktm

2020/09/16 02:49

takashikawai様 ご回答ありがとうございました。 view_customizeに設定したところ、問題なくソートできました。 【確認したバージョン】 Environment: Redmine version 4.1.1.stable Redmine plugins: view_customize 2.7.0
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問