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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

2301閲覧

Laravelでテーブルにて順番に詰めて表示したいです

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/01/09 09:01

横にては二つにて表示、縦表示はデータがある分で表示したいです。

下記ですと1,2,3,4の順に表示されてしまいます、これを例えば2のデータがない場合は2の所に3を詰めて表示したいです。どうのようにすればできますか?

下記のコードです。

<tr> <th rowspan="2">言語</th> @if (!empty($users->language1)) <td colspan="2"> @if(!empty($users->language1)) {{ $users->language1->name }} @endif @if (!empty($users->language_level1)) {{ $users->language_level1->name }} @endif </td> @endif @if (!empty($users->language2)) <td colspan="2"> @if (!empty($users->language2)) {{ $users->language2->name }} @endif @if (!empty($users->language_level2)) {{ $users->language_level2->name }} @endif </td> @endif @if (!empty($users->language3)) </tr> <tr> <td colspan="2"> @if (!empty($users->language3)) {{ $users->language3->name }} @endif @if (!empty($users->language_level3)) {{ $users->language_level3->name }} @endif </td> @endif @if (!empty($users->language4)) <td colspan="2"> @if (!empty($users->language4)) {{ $users->language4->name }} @endif @if (!empty($users->language_level4)) {{ $users->language_level4->name }} @endif </td> @endif </tr> @endif

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

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

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

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

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

guest

回答1

0

ベストアンサー

実現方法はいくつかあると思いますが、大きく分けて下記の方法で可能かと思います。

方法

  1. $users->languageXが存在しない場合、languageXプロパティを作成しないようにモデル内でロジックを組む。
  2. VIEWの中で条件分岐でHTMLテーブルを作成する。
  3. VIEWのHTMLとCSSを組みなおす。

※補足
上記1.の方法については、SQLを組みなおすか、モデル内でデータ取得後にオブジェクトや連想配列を組みなおします。DBのテーブル構成にもよりますが、SQLを組みなおす方法であればかなり簡単に対応できます。

上記3.の方法はHTMLの <table> 構成だと、ご質問のような対応が難しいので<dl><dt>...</dt><dd>...</dd></dl>などのようなHTMLにします。そしてフォーマットはCSSで対応します。

上記2の方法

== 追記変更(2018/01/10) ==
コメントで $users->language1 は別々のプロパティだとおしえて頂いたので、サンプルコードをループを使わない方法に変更しました。各プロパティで表示する場合に カラム表示カウンター を加算していき、すべてのカラムとカラムの境界に </tr><tr> を表示するIF文を挟むと実現できます。

php

1<table> 2 <tbody> 3 <tr> 4 <th rowspan="2">言語</th> 5@php 6 //カラム表示カウンター 7 $j = 1; 8 //カラム数が2 9 $columnsNumber = 2; 10@endphp 11 12{{-- プロパティ1 --}} 13@if (!empty($users->プロパティ1)) 14 <td> 15 @if (!empty($users->プロパティ1)) 16 {{ $users->プロパティ1->name }} 17 @endif 18 @if (!empty($users->プロパティ1-1)) 19 {{ $users->プロパティ1-1->name }} 20 @endif 21 </td> 22 {{-- カラム表示カウンターはカラム表示ごとに加算 --}} 23 @php $j++; @endphp 24@endif 25{{-- 行区切り --}} 26@if ($j > $columnsNumber && $j % ($columnsNumber + 1) == 0) 27 </tr> 28 <tr> 29@endif 30 31{{-- プロパティ2 --}} 32@if (!empty($users->プロパティ2)) 33 <td> 34 @if (!empty($users->プロパティ2)) 35 {{ $users->プロパティ2->name }} 36 @endif 37 @if (!empty($users->プロパティ2-1)) 38 {{ $users->プロパティ2-1->name }} 39 @endif 40 </td> 41 {{-- カラム表示カウンターはカラム表示ごとに加算 --}} 42 @php $j++; @endphp 43@endif 44{{-- 行区切り --}} 45@if ($j > $columnsNumber && $j % ($columnsNumber + 1) == 0) 46 </tr> 47 <tr> 48@endif 49 50{{-- 以降同様にすべてのプロパティを続ける --}} 51 52 </tr> 53 </tbody> 54</table>

カラム数が2($columnsNumber = 2)で、</tr><tr>を表示する条件は下記の時になります。下記のように整理するとわかりやすいかもしれません。

カラム表示カウンター % (2 + 1) == 0

html

1<table> 2 <tbody> 3 <tr> 4 <th rowspan="2">言語</th> 5 6<!-- ループ内IF条件ここから --> 7 <td>言語1</td> <!-- $i == 1, $j == 1 --> 8 <td>言語2</td> <!-- $i == 2, $j == 2 --> 9 </tr> <!-- $i == 3, $j == 3 --> 10 <tr> <!-- $i == 3, $j == 3 (上に同じ) --> 11 <td>言語3</td> <!-- $i == 3, $j == 3 (上に同じ) --> 12 <td>言語4</td> <!-- $i == 4, $j == 4 --> 13<!-- ループ内IF条件ここまで --> 14 15<!-- 言語2がない場合ここから --> 16 <td>言語1</td> <!-- $i == 1, $j == 1 --> 17 <td>言語3</td> <!-- $i == 3, $j == 2(言語2は表示なし) --> 18 </tr> <!-- $i == 4, $j == 3 --> 19 <tr> <!-- $i == 4, $j == 3 --> 20 <td>言語4</td> <!-- $i == 4, $j == 3 --> 21<!-- 言語2がない場合ここまで --> 22 23<!-- 言語1,3がない場合ここから --> 24 <td>言語2</td> <!-- $i == 2, $j == 1 --> 25 <td>言語4</td> <!-- $i == 4, $j == 2(言語1,3は表示なし) --> 26<!-- 言語1,3がない場合ここまで --> 27 28 </tr> 29 </tbody> 30</table>

投稿2018/01/09 11:56

編集2018/01/10 11:01
Tomak

総合スコア1652

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

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

退会済みユーザー

退会済みユーザー

2018/01/10 02:18

ありがとうございます。 質問ですがlanguage1, language2, language3, language4とは別々の変数ですがそれをそれぞれ別々に作りましたら、何も表示されなくなりました。どうしたらいいですか?
退会済みユーザー

退会済みユーザー

2018/01/10 11:29

ありがとうございます。できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問