
Q&A掲示板を質問→回答→返信で作成したいと考えているのですが、ネストが4段階以上深くなった段階で返信ボタンが出なくなるなどの不具合が発生する可能性があるとアドバイス頂きました。
テーブル構成と方法を変えることでネストを更に深くすることは出来ないでしょうか?
※テーブル構成
ID (質問番号)・・・・識別用のカラム
TS (投稿日時)・・・・公開期間終了後に質問を cron で削除するため?、回答の日時を把握する(〇日前)
question (内容)・・・・質問、回答の投稿文
title (タイトル)・・・・質問タイトル
namae (名前)・・・・質問、回答者名
stamp (リアクションスタンプ)・・・・質問スタンプ
unique_id (質問UUID)・・・・アップロードされたファイル名の改名に使用
ip (IPアドレス)・・・・セキュリティ保護のために保存
attach1 (アップロードされたファイル)・・・・1、2、3で分けているのは1つ目の画像を一覧表示&1つ目の動画を横スクロールで表示するため
attach2 (IPアドレス)・・・・略
attach3 (IPアドレス)・・・・略
usericon (アイコン画像)・・・・質問、回答のアイコン画像
comment_id (回答に対する返信のID)・・・・返信 ID
※方法
親IDが NULL(紐づけられていない)のものを質問として、親IDが設定されているものを回答とする。
No.6ベストアンサー
- 回答日時:
> 10段までは段下げするが11段以降は段下げ幅を0にするというのは11段以降はどうなるのでしょうか?
この質問が出てくる意味が分かりません。
「段下げ幅を0にする」と書いたのですが?
もしかして「段下げ幅」という言葉の意味が分からないと言うことなのでしょうか?であればそのように聞いて下さい。
「段下げ幅を0にする」というのは「段下げをしない」という意味です。実装をイメージして「段下げ幅を0にする」という書き方をしました。
> あるいは、10段までは段下げするが11段以降は段下げ幅を0にするとかで、要件を満たせるならそれでもいいし。
と、書いたとおりで、「10段までは段下げするが11段以降は段下げをしない」ことでも要件を満たせる場合に限ってですが。
回答ありがとうございます。理解することが出来ました、質問が分かりにくく申し訳ありません。
階層を条件で区切るか、無限のどちらかということですね。
No.5
- 回答日時:
#3
>申し訳ありません今後の掲示板の軸になるので、どうしても回答が知りたくてマルチポストしてしまいました。
いえ、厳密には責めているというよりは、技術系の板でせっかくテクニカルな回答をもらえているのですから、そこで掘り下げていくほうがより確実な解決につながるのになぁ・・・という感想です。向こうで質問を続けられないほど特に炎上しているわけでもなかったと思いますし、なぜこんなコミュニケーションサイトに出張ってくるのかなぁ・・・と。
私もteratailでそこそこ頑張っているつもりですが、書き込みのメインは実はこちらの方ですし、ここのサイトの仕組み上あまり技術的な質問には向かないのはよくわかっているつもりなので。
回答ありがとうございます。
以前からテラテイルとgoo質問を交互に質問させて頂いているのですが、goo質問では具体的なコードやテーブルについての修正点などのヒントをもらえる為、利用させて頂いております。
テラテイルでは方法を教えて頂き、それについて自分で考えて分からなかった場合はgoo質問で聞くというパターンが以前幾度となくありましたので…
同時に質問してマルチポストになるのは避けるべきでした申し訳ありません。
No.4
- 回答日時:
> 段下げを無限の幅にせずに実装することは可能でしょうか?
簡単な数学ですが、段下げ幅が0でなければ、無限を掛ければ掛け算の結果は無限です。
段下げをしないでうまく見えるデザインを考えるしかないでしょう。
あるいは、10段までは段下げするが11段以降は段下げ幅を0にするとかで、要件を満たせるならそれでもいいし。
アドバイスありがとうございます。
10段までは段下げするが11段以降は段下げ幅を0にするというのは11段以降はどうなるのでしょうか?
No.3
- 回答日時:
わざわざ技術系のサイトでテクニカルなアドバイスをもらっていながら、あえて教えてgooのようなコミュニティサイトにマルチポストしてもいいことなにもないですよ。
No.2
- 回答日時:
こんにちは
>返信ボタンが出なくなるなどの不具合が発生する可能性~
単に、画面から見切れてしまって表示されないという意味なのか、そもそも出力がされないという意味なのか不明ですが・・・
ボタンが出力されないのなら、それは出力側のプログラムの問題です。
表示が見切れてしまうのなら、横スクロールで対応するとかにしておけば良いのではないでしょうか?
(折り返しでも良ければ、非表示になるような設定をしていない限りは、レイアウトはともかくブラウザは極力表示しようとしてくれるはずです。)
すでに指摘があるように、データ構成と表示は直接関係はありません。
最終的にどのようなHTMLにしているのかも不明ですけれど、インデントがネストしても必ず表示できるようにしたいのなら、項目欄にmin-widthを設定しておくことで項目の最低幅を確保できるようになるので、合計が画面幅を超えればブラウザは横スクロールで対応するようになります。
(親要素に overflow: hidden 等を設定していればスクロールしませんけれど)
あるいは、ネストが深くなったら、一旦キャンセルするという方法もあるかも知れませんが、関係性の視認しやすさに一工夫が必要になりそうですね。
以下は、簡単な一例です。
※ すぐに見切れるように、わざとインデント幅を大きくしてあります。
※ 見切れない場合は、ブラウザ幅を小さくしてみてください。
(fx、chromeで確認)
<!DOCTYPE HTML>
<html lang="ja">
<head><title>Sample</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
#wrap ul { list-style-type: none; }
#wrap ul ul { padding-left: 8em; }
#wrap ul li { min-width: 30em; }
#wrap ul ul li:before { content: "┗ "; }
#wrap ul ul li:has(> ul):before { content: none; }
/* 以下おまけ */
#wrap ul li:after {
content: "返信";
font-size: 0.8em;
vertical-align: top;
margin-left: 1.5em;
padding: 0 .5em;
background-color: #DDD;
border: 2px solid gray;
border-width: 0 2px 2px 0;
border-radius: 0.3em;
}
#wrap ul li:has(> ul):after { content: none; }
</style>
</head>
<body>
<div id="wrap">
<ul>
<li>項目1</li>
<li><ul>
<li>項目1-1</li>
<li><ul>
<li>項目1-1-1</li>
<li><ul>
<li>項目1-1-1-1</li>
<li><ul>
<li>項目1-1-1-1-1</li>
<li><ul>
<li>項目1-1-1-1-1-1</li>
</ul></li>
<li><ul>
<li>項目1-1-1-1-1-2</li>
</ul></li>
<li>項目1-1-1-1-2</li>
<li><ul>
<li>項目1-1-1-1-2-1</li>
</ul></li>
</ul></li>
</ul></li>
</ul></li>
</ul></li>
<li>項目2</li>
<li><ul>
<li>項目2-1</li>
</ul></li>
</ul>
</div>
</body>
</html>
Q.返信ボタンが出なくなるなどの不具合が発生する可能性~
単に、画面から見切れてしまって表示されないという意味なのか、そもそも出力がされないという意味なのか不明ですが・・・
A.回答ありがとうございます、恐らく前者になります。
Q.表示が見切れてしまうのなら、横スクロールで対応するとかにしておけば良いのではないでしょうか?
(折り返しでも良ければ、非表示になるような設定をしていない限りは、レイアウトはともかくブラウザは極力表示しようとしてくれるはずです。)
すでに指摘があるように、データ構成と表示は直接関係はありません。
A.アドバイスありがとうございます、横に広げるという発想はなかったですが返信できる深さの上限を決めておく場合は有効そうですね。
覚えておきます。
Q.最終的にどのようなHTMLにしているのかも不明ですけれど、インデントがネストしても必ず表示できるようにしたいのなら、項目欄にmin-widthを設定しておくことで項目の最低幅を確保できるようになるので、合計が画面幅を超えればブラウザは横スクロールで対応するようになります。
(親要素に overflow: hidden 等を設定していればスクロールしませんけれど)
あるいは、ネストが深くなったら、一旦キャンセルするという方法もあるかも知れませんが、関係性の視認しやすさに一工夫が必要になりそうですね。
A.参考コードありがとうございます。min-widthを設定して画面幅を超えればブラウザは横スクロールという考えはなかったですが、確かに横スクロールさせてしまえば表示されなくなる心配もなさそうです勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
SplFileObject を利用したとき...
-
composerをインストールしたい...
-
php でqiitaのサイトにあったフ...
-
【初心者】XAMPPのapacheの(恐...
-
PHPの勉強してます。 配列のと...
-
複数のパソコンの中の1つのパソ...
-
phpに関わる所での、form actio...
-
PHP8を使うと、大量のWarningが...
-
Q&Aサイトを作成していてURLの...
-
PHPで画像の渡しが上手く行きま...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
[php初心者]サイトを見てデータ...
-
入力フォームの空白や改行を制...
-
reuterの記事をbeautiful.soup....
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
BASIC認証のフォームをデザイン...
-
SplFileObject を利用したとき...
-
phpでcookieがうまく保存されない
-
PHPのセッション有効期限について
-
PHPで画像の渡しが上手く行きま...
-
PHP8を使うと、大量のWarningが...
-
フォームで戻った際に入力済み...
-
Q&Aサイトを作成していてURLの...
-
PHPを使って、別サイトの一部を...
-
$_SESSIONに渡した後はそのまま...
-
reuterの記事をbeautiful.soup....
-
PHPSpreadsheetを使って関数を...
-
PHPのエラーの解消法について教...
-
ファイルの遷移がうまく行われ...
-
PostgreSQLからCSV形式でエクス...
-
php エラー
-
HTML PHP ラジオボタンのイベント
おすすめ情報