プロジェクト

全般

プロフィール

Bug(バグ) #1676

ナインテーブルガジェットを3行x2列にしても3行目が表示されない

pnetan  13年以上前に追加. 6年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2010-10-14
期日:
進捗率:

100%

3.6 で発生するか:
Yes
3.8 で発生するか:
Unknown (未調査)

説明

概要

フレンドリストやコミュニティリストは、3x3の9面表示を行うパーツ apps/pc_frontend/templates/_partsNineTable.php を用いて表示している。

管理画面の「デザイン設定」、「ホーム画面ガジェット設定」では、フレンドリストなどの9面表示を行うガジェットに対して、「表示する行数・列数」を設定できる。

表示できるアイテム数が十分ある場合に、

  • 6行1列と設定していると、1行x1列の表示となる
  • 1行6列と設定していると、6行x6列の表示となり、2行目以降は空となる
    • アイテム数が十分であっても、DBからアイテムを取得する際に設定値の「行数x列数」個しか取得しないようにアクションファイルが記述されている(_partsNineTable を呼んでいる側が行っている実装であり、実装によってはこの限りではない)
  • 3行2列と設定していると、2行x2列の表示となる(報告のケース)

原因

apps/pc_frontend/templates/_partsNineTable.php の行数部分のループは http://trac.openpne.jp/changeset/9630 で書かれているが、実際に表示する行数 $row を算出する式が誤っている。

11:<?php $row = ceil(count($options->list) / $options->row) ?>
12-<?php for ($i = $j = 1; $row >= $i; $i++): ?>

(取得したアイテム数)を(設定した行数)で割った値の小数部を切り上げた値を「表示する行数」としているのは明らかにおかしい。

修正方針

<?php $row = ceil(count($options->list) / $options->row) ?>

<?php $row = min($options->row, ceil(count($options->list) / $options->col)) ?>

のように変更する。 ceil(x) は、実数 x に対して、x の次に大きい整数値を(float型で)返す関数である。具体例と併せてこの修正の意味を示しておく。

  • 2行5列で表示させたい場合:
    • アイテムが10件取得できれば、min(2行, ceil(10件 / 5列)) = 2 となり、表示は2行となる
    • アイテムが4件しかなければ、min(2行, ceil(4件 / 5列)) = min(2, ceil(0.8)) = min(2, 1) = 1 となり、表示は1行となる(1行5列)
  • 3行3列で表示させたい場合:
    • アイテムが9件取得できれば、min(3行, ceil(9件 / 3列)) = 3 となり、表示は3行となる
    • アイテムが5件しかなければ、min(3行, ceil(5件 / 3列)) = min(3, ceil(1.666)) = min(3, 2) = 2 となり、表示は2行となる(2行3列)
    • アイテムが1件しかなければ、min(3行, ceil(1件 / 3列)) = min(3, ceil(0.333)) = min(3, 1) = 1 となり、表示は1行となる(1行3列)

『表示行数 = ceil(アイテム数, 設定列数)』という式でもよさそうだが、概要で示したとおり「アイテム数が十分であっても、DBからアイテムを取得する際に設定値の「行数x列数」個しか取得しないようにアクションファイルが記述されている」のは実装側の判断であって、partsNineTable を使用する箇所で取得するアイテム数が「行数x列数」以下になる保証はないため、『表示行数 = min(設定行数, ceil(アイテム数, 設定列数))』と記述しておくことにする。

仕様について

取得できたアイテム数、設定された行数、設定された列数、このそれぞれについて、実際に表示される行数列数が何になるべきかについては、2系および修正前の3系から以下のように判断します。

  • 3行3列の場合:
    • アイテム1個:1行3列
    • アイテム1個〜3個:1行3列
    • アイテム4個:2行3列
    • アイテムk個(k<=9):ceil(k/3)行3列
  • r行c列の場合:
    • アイテム1個:1行c列
    • アイテムk個(k<=c):1行c列
    • アイテムk個(c<k<=r*c):ceil(k/c)行c列

ここで示したいことは端的に言うと、アイテム数に応じて「空の行は作らない」が「空の列は作りうる」ということである。

補足

$row に ceil() の返り値が代入されることがあり、その場合 float 型になってしまうがこのチケットでは特に気にしないことにする。 $row は int 型を想定するといった修正や、このファイルの可読性を向上させることは現時点のソースコードに対しては可能だと思われる。そうした修正については対応するのであれば別チケットで行う。

報告

http://sns.openpne.jp/communityTopic/6408 より転記

3.6beta5 【ガジェット】ナインテーブルを2x3にしたら3個目が表示されない。

画像を見てもらうとわかると思いますが、横2縦3にしたときに3番目のデータが表示されない。

↓余談
それとコミュニティのトップのコミュニティメンバー(ナインテーブル)もガジェットで編集できるようにしてほしいです。

スクリーンショット_2011-11-10_18.42.53.png 表示 - ナインテーブルを6×6に設定した時の画像 (70.7 KB) Fumie Toyooka, 2011-11-10 18:48


関連するチケット

関連している OpenPNE 3 - Backport(バックポート) #2513: ナインテーブルガジェットを3行x2列にしても3行目が表示されない New(新規) 2011-10-18

関係しているリビジョン

リビジョン 6f6369d6 (差分)
Shinichi Urabe13年以上前に追加

(fixes #1676) Fixed NineTable calc bug.

履歴

#1 Kousuke Ebihara13年以上前に更新

  • 対象バージョンOpenPNE 3.7.0 にセット
  • 3.6 で発生するかYes にセット

#2 Shinichi Urabe13年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者Shinichi Urabe にセット

#3 Shinichi Urabe13年以上前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 6f6369d69e056e437ce2d7e766d7ffa1c1f6e848 で適用されました。

#4 Masato Nagasawa約13年前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

説明の記述をお願いします。

#5 Minoru Takaiほぼ13年前に更新

  • 題名ナインテーブルガジェットを2x3にしたら3個目が表示されない から ナインテーブルガジェットを3行x2列にしても3行目が表示されない に変更

#6 Kousuke Ebihara12年以上前に更新

  • ステータスRejected(差し戻し) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

チケットの修正内容と、その修正内容についての説明について確認しました。

#7 Fumie Toyooka12年以上前に更新

確認したい箇所があります。
管理画面の「デザイン設定」、「ホーム画面ガジェット設定」において、コミュニティリストを6×6に設定して36コミュニティを表示させてみました。

添付しました画像にもありますように、
  • コミュニティの画像が半分にかけています。
  • コミュニティ名が全て表示されていません。

以上、2点は正常な表示かどうかご回答お願いします。

#8 isao sano12年以上前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テスト完了しました。
問題ありませんので、Fixedに致します。

#9 Chiharu Nakajima6年以上前に更新

3.6未対応
3.8発生せず

他の形式にエクスポート: Atom PDF