質問するログイン新規登録
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Q&A

2回答

5937閲覧

PHP(Laravel)のページングの$elementsを何とかしたい!

typeC

総合スコア12

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

0グッド

0クリップ

投稿2019/06/06 01:53

0

0

PHP(Laravel)にてページングを実装しております。

発生している問題・エラーメッセージ

bootstrap-4.blade.phpなどに記載されている
$elementsがどこから取得されているのかがいまいちわからず困っております。

・前提
1ページに10件表示
ページ数は1~13

該当のソースコード

・Viewのblade
$hoge->appends($params)->links()

・bootstrap-4.blade.php
$elementsをvar_dump()すると以下のようなデータが表示されます。

array(3) { [0]=> array(8) { [1]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=1" [2]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=2" [3]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=3" [4]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=4" [5]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=5" [6]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=6" [7]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=7" [8]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=8" } [3]=> string(3) "..." [4]=> array(2) { [12]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=12" [13]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=13" } }

こちらが想定していた・理想とする返却データは以下の通りです。

array(8) { [1]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=1" [2]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=2" [3]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=3" [4]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=4" [5]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=5" [6]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=6" [7]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=7" [8]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=8" [9]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=9" [10]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=10" [11]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=11" [12]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=12" [13]=> string(xx) "https://xxxxx/project/home?sort=id&disp_page=10&page=13" }

教えていただきたいこと

○なぜ連想配列となるのか
○...(3点リーダー)が存在してしまうのか
○9~11ページがなく別の子配列に12、13ページが格納されているのか
このあたりの意味が全く分かっていません。

理想の配列データを取得するために
$hoge->appends($params)->links()
以降どこで
bootstrap-4.blade.phpの$elementsのデータが作られているのかご教授頂きたいです。

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

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

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

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

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

guest

回答2

0

https://github.com/laravel/framework/blob/e6c8aa0e39d8f91068ad1c299546536e9f25ef63/src/Illuminate/Pagination/LengthAwarePaginator.php#L90
$elementsはもうそのまま表示する用に加工済データなので普通は気にしない。
理想とするデータから表示しようとすると結局また加工が必要なのでは。

Laravelの標準と違う使い方したいなら自分でどうにかするしかない。
$hogeがcurrent_pageやlast_pageの情報持ってるのでそこから理想とするデータを作る。

そもそもやりたいことが分からないけど。
...で省略させずに表示したいだけならonEachSide()でいいし。

投稿2019/06/06 03:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

typeC

2019/06/06 03:53

どんなデータ数であっても省略されない方法を探していました。 例えば、onEachSide(5)だとデータが増加した場合にまた...で省略されてしまうので、 onEachSide(1000)とかにしておけば良いのでしょうが、 省略されること自体を引数か何かで止める方法はないのかなと・・・。
typeC

2019/06/06 04:02

因みに、独自のページングを使っています。 例)< [1] 2 3 4 5...25 >※最大ページが25の時 「>」ボタンでページ遷移していくと < 2 3 4 5 [6]...25 > となります。 onEachSide(5)だと、 < 7 8 9 10 [11]...25 > となってほしいのに < ... 25 > となってしまうので困っています。 ですので想定されないくらいの値1000など適当に大きい数字をいれておけば一旦はなんとかなりそうですが根本的な解決にはなっていないということです。 すみません、あまりうまくお伝え出来ず・・・。
guest

0

bootstrap-4.blade.phpはBladeのビューファイルなので、Laravel5.8時点で$elementsがどこでビューに渡されているかは以下のコード部分です。

Laravel LengthAwarePaginator.php

public function render($view = null, $data = []) { return new HtmlString(static::viewFactory()->make($view ?: static::$defaultView, array_merge($data, [ 'paginator' => $this, 'elements' => $this->elements(), ]))->render()); }

$elemtnsのデータ自体は、elementsメソッドで、以下の形で形成されています。

protected function elements() { $window = UrlWindow::make($this); return array_filter([ $window['first'], is_array($window['slider']) ? '...' : null, $window['slider'], is_array($window['last']) ? '...' : null, $window['last'], ]); }

[追記]
元のコレクションが欲しい場合は、\Illuminate\Pagination\AbstractPaginatorから、bootstrap-4.blade.php内で以下で出来るかと思います。

$paginator->items()

投稿2019/06/06 03:31

編集2019/06/06 03:37
aro10

総合スコア4106

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

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

typeC

2019/06/06 03:54

細かい動きをご教授いただきありがとうございます! protected function elements()なのですね。 調査してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問