Browse Source

guide-ja/output-* revised [ci skip]

tags/2.0.16
Nobuo Kihara 7 years ago
parent
commit
ded8fc95e8
  1. 62
      docs/guide-ja/output-client-scripts.md
  2. 78
      docs/guide-ja/output-data-providers.md
  3. 142
      docs/guide-ja/output-data-widgets.md
  4. 28
      docs/guide-ja/output-pagination.md
  5. 18
      docs/guide-ja/output-sorting.md
  6. 15
      docs/guide-ja/output-theming.md

62
docs/guide-ja/output-client-scripts.md

@ -2,8 +2,10 @@
==============================
今日のウェブ・アプリケーションでは、静的な HTML ページがレンダリングされてブラウザに送信されるだけでなく、
JavaScript によって、既存の要素を操作したり、新しいコンテントを AJAX でロードしたりして、ブラウザに表示されるページを修正します。
このセクションでは、JavaScript と CSS をウェブ・サイトに追加したり、それらを動的に調整するために Yii によって提供されているメソッドを説明します。
JavaScript によって、既存の要素を操作したり、新しいコンテントを AJAX でロードしたりして、
ブラウザに表示されるページを修正します。
このセクションでは、JavaScript と CSS をウェブ・サイトに追加したり、
それらを動的に調整するために Yii によって提供されているメソッドを説明します。
## スクリプトを登録する <span id="register-scripts"></span>
@ -15,9 +17,8 @@ JavaScript によって、既存の要素を操作したり、新しいコンテ
### インライン・スクリプトを登録する <span id="inline-scripts"></span>
インライン・スクリプトは、設定や、動的に生成されるコードのために有用なものです。
また、[ウィジェット](structure-widgets.md) に含まれる再利用可能なフロントエンド・コードによって生成されるコード断片もインライン・スクリプトです。
インライン・スクリプトを追加するためのメソッド [[yii\web\View::registerJs()|registerJs()]] は、次のようにして使うことが出来ます。
インライン・スクリプトは、設定のためのコード、動的に生成されるコード、および、[ウィジェット](structure-widgets.md) に含まれる再利用可能なフロントエンド・コードが生成する
コード断片などです。インライン・スクリプトを追加するためのメソッド [[yii\web\View::registerJs()|registerJs()]] は、次のようにして使うことが出来ます。
```php
$this->registerJs(
@ -35,19 +36,17 @@ $this->registerJs(
- [[yii\web\View::POS_BEGIN|View::POS_BEGIN]] - 開始の `<body>` の直後。
- [[yii\web\View::POS_END|View::POS_END]] - 終了の `</body>` の直前。
- [[yii\web\View::POS_READY|View::POS_READY]] - [ドキュメントの `ready` イベント](http://learn.jquery.com/using-jquery-core/document-ready/) でコードを実行するための指定。
これを指定すると、[[yii\web\JqueryAsset|jQuery]] が自動的に登録され、コードは適切な jQuery コードの中に包まれます。
これがデフォルトの位置指定です。
これを指定すると、[[yii\web\JqueryAsset|jQuery]] が自動的に登録され、コードは適切な jQuery コードの中に包まれます。これがデフォルトの位置指定です。
- [[yii\web\View::POS_LOAD|View::POS_LOAD]] - [ドキュメントの `load` イベント](http://learn.jquery.com/using-jquery-core/document-ready/) でコードを実行するための指定。
上記と同じく、これを指定すると、[[yii\web\JqueryAsset|jQuery]] が自動的に登録されます。
最後の引数は、スクリプトのコード・ブロックを一意に特定するために使われるスクリプトのユニークな ID です。
同じ ID のスクリプトが既にある場合は、新しいものを追加するのでなく、それを置き換えます。
ID を指定しない場合は、JS コードそれ自身が ID として扱われます。
この ID によって、同じコードが複数回登録されるのを防止します。
最後の引数は、スクリプトのコード・ブロックを一意に特定するために使われるスクリプトのユニークな ID です。同じ ID のスクリプトが既にある場合は、新しいものを追加するのでなく、
それを置き換えます。ID を指定しない場合は、JS コードそれ自身が ID として扱われます。この ID によって、同じコードが複数回登録されるのを防止します。
### スクリプト・ファイルを登録する <span id="script-files"></span>
[[yii\web\View::registerJsFile()|registerJsFile()]] の引数は、[[yii\web\View::registerCssFile()|registerCssFile()]] の引数と同様なものです。
[[yii\web\View::registerJsFile()|registerJsFile()]] の引数は、
[[yii\web\View::registerCssFile()|registerCssFile()]] の引数と同様なものです。
以下に示す例では、`main.js` ファイルを、[[yii\web\JqueryAsset]] への依存関係とともに、登録します。
これは、`main.js` ファイルは `jquery.js` の後に追加される、ということを意味します。
このような依存関係の仕様が無ければ、`main.js` と `jquery.js` の間の相対的な順序は未定義となり、コードは動作しなくなるでしょう。
@ -64,14 +63,13 @@ $this->registerJsFile(
これによって、アプリケーションの [base URL](concept-aliases.md#predefined-aliases) の下に配置されている `/js/main.js` スクリプトを読み込むタグが追加されます。
ただし、外部 JS ファイルを登録するのには、 [[yii\web\View::registerJsFile()|registerJsFile()]] を使わずに、[アセット・バンドル](structure-assets.md) を使うことが強く推奨されます。
なぜなら、そうする方が、柔軟性も高く、依存関係の構成も粒度を細かく出来るからです。
また、アセット・バンドルを使えば、複数の JS ファイルを結合して圧縮すること
(アクセスの多いウェブ・サイトではそうすることが望まれます) が可能になります。
なぜなら、そうする方が、柔軟性も高く、依存関係の構成も粒度を細かく出来るからです。また、アセット・バンドルを使えば、複数の JS ファイルを結合して圧縮すること (アクセスの多いウェブ・サイトではそうすることが望まれます) が可能になります。
## CSS を登録する <span id="register-css"></span>
Javascript と同様に、[[yii\web\View::registerCss()|registerCss()]]
または [[yii\web\View::registerCssFile()|registerCssFile()]] を使って CSS を登録することが出来ます。
または [[yii\web\View::registerCssFile()|registerCssFile()]]
を使って CSS を登録することが出来ます。
前者は CSS のコードブロックを登録し、後者は外部 CSS ファイルを登録するものです。
### インライン CSS を登録する <span id="inline-css"></span>
@ -88,8 +86,7 @@ body { background: #f00; }
</style>
```
`style` タグに追加の属性を指定したい場合は、名前-値 の配列を二番目の引数として渡します。
最後の引数は、スタイルのブロックを一意に特定するために使われるユニークな ID です。
`style` タグに追加の属性を指定したい場合は、名前-値 の配列を二番目の引数として渡します。最後の引数は、スタイルのブロックを一意に特定するために使われるユニークな ID です。
同じスタイルがコードの別の箇所で重複して登録されたとしても、このスタイルのブロックが一度だけ追加されることを保証するものです。
### CSS ファイルを登録する <span id="css-files"></span>
@ -108,25 +105,24 @@ $this->registerCssFile("@web/css/themes/black-and-white.css", [
* 最初の引数が、登録される CSS ファイルを指定します。
この例における `@web` in this example is an [アプリケーションのベース URL に対するエイリアス](concept-aliases.md#predefined-aliases) です。
* 二番目の引数は、結果として出力される `<link>` タグの HTML 属性を指定するものです。
ただし、`depends` というオプションは特別な処理を受けます。
これは、この CSS ファイルが依存するアセット・バンドルを指定するものです。
ただし、`depends` というオプションは特別な処理を受けます。これは、この CSS ファイルが依存するアセット・バンドルを指定するものです。
この例の場合は、[[yii\bootstrap\BootstrapAsset|BootstrapAsset]] が依存するアセット・バンドルです。
これは、この CSS ファイルが [[yii\bootstrap\BootstrapAsset|BootstrapAsset]] に属する CSS ファイルの*後に*追加されることを意味します。
* 最後の引数はこの CSS ファイルを特定する ID を指定するものです。
省略された場合は、CSS ファイルの URL が代りに ID として使用されます。
外部 CSS ファイルを登録するのには、 [[yii\web\View::registerCssFile()|registerCssFile()]] を使わずに、[アセット・バンドル](structure-assets.md) を使うことが強く推奨されます。
アセット・バンドルを使えば、複数の CSS ファイルを結合して圧縮すること
外部 CSS ファイルを登録するのには、 [[yii\web\View::registerCssFile()|registerCssFile()]] を使わずに、
[アセット・バンドル](structure-assets.md) を使うことが強く推奨されます。アセット・バンドルを使えば、複数の CSS ファイルを結合して圧縮すること
(アクセスの多いウェブ・サイトではそうすることが望まれます) が可能になります。
また、アプリケーションの全てのアセットの依存関係を一ヶ所で構成することが出来るため、
より大きな柔軟性を得ることが出来ます。
また、アプリケーションの全てのアセットの依存関係を一ヶ所で構成することが出来るため、より大きな柔軟性を得ることが出来ます。
## アセット・バンドルを登録する <span id="asset-bundles"></span>
既に述べたように、CSS ファイルと JavaScript ファイルを直接に登録する代りにアセット・バンドルを使うことが推奨されます。
アセット・バンドルを定義する方法の詳細は、ガイドの [アセット](structure-assets.md) のセクションで知ることが出来ます。
既に定義されているアセット・バンドルの使い方は、次のように非常に単純明快です。
既に定義されているアセット・バンドルの使い方は、
次のように非常に単純明快です。
```php
\frontend\assets\AppAsset::register($this);
@ -168,20 +164,19 @@ $this->registerJs(
```
上記のコードは、次のような JavaScript の変数定義を含む `<script>` タグを登録します。
例えば、
```javascript
var yiiOptions = {"appName":"My Yii Application","baseUrl":"/basic/web","language":"en"};
```
このようにすれば、あなたの Javascript コードで、これらの構成情報に `yiiOptions.baseUrl``yiiOptions.language`
のようにしてアクセスすることが出来るようになります。.
このようにすれば、あなたの Javascript コードで、これらの構成情報に `yiiOptions.baseUrl``yiiOptions.language` のようにしてアクセスすることが出来るようになります。.
### 翻訳されたメッセージを渡す <span id="translated-messages"></span>
あなたの JavaScript が何らかのイベントに反応してメッセージを表示する必要がある、という状況に遭遇するかも知れません。
複数の言語で動作するアプリケーションでは、この文字列は、現在のアプリケーシの言語に翻訳されなければなりません。
これを達成する一つの方法は、Yii によって提供されている [メッセージ翻訳機能] (tutorial-i18n.md#message-translation)
を使って、その結果を JavaScript コードに渡すことです。
これを達成する一つの方法は、Yii によって提供されている [メッセージ翻訳機能] (tutorial-i18n.md#message-translation) を使って、その結果を JavaScript コードに渡すことです。
```php
$message = \yii\helpers\Json::htmlEncode(
@ -200,13 +195,14 @@ JS
それを JavaScript コードに挿入して、`alert()` の関数呼び出しに動的な文字列を渡すことが出来ます。
> Note: ヒアドキュメントを使う場合は、JS コード中の変数名に注意してください。
> `$` で始まる変数は、PHP の変数として解釈され、その値によって置き換えられる可能性があります。
> ただし、`$(` または `$.` という形式の jQuery 関数は PHP 変数として解釈される心配は無く、安全に使うことが出来ます。
> `$` で始まる変数は、PHP の変数として解釈され、
> その値によって置き換えられる可能性があります。
> ただし、`$(` または `$.` という形式の jQuery 関数は
> PHP 変数として解釈される心配は無く、安全に使うことが出来ます。
## `yii.js` スクリプト <span id="yii.js"></span>
> Note: このセクションはまだ書かれていません。
> このセクションは、`yii.js` によって提供される以下の機能についての説明を含むはずのものです。
> Note: このセクションはまだ書かれていません。このセクションは、`yii.js` によって提供される以下の機能についての説明を含むはずのものです。
>
> - Yii JavaScript モジュール
> - CSRF パラメータの処理

78
docs/guide-ja/output-data-providers.md

@ -1,17 +1,21 @@
データ・プロバイダ
================
[ページネーション](output-pagination.md) と [並べ替え](output-sorting.md) のセクションにおいて、エンド・ユーザが特定のページのデータを選んで表示し、いずれかのカラムによってデータを並べ替えることが出来るようにする方法を説明しました。
[ページネーション](output-pagination.md) と [並べ替え](output-sorting.md) のセクションにおいて
、エンド・ユーザが特定のページのデータを選んで表示し、いずれかのカラムによってデータを並べ替えることが出来るようにする方法を説明しました。
データのページネーションと並べ替えは非常によくあるタスクですから、Yii はこれをカプセル化した一連の *データ・プロバイダ* を提供しています。
データ・プロバイダは [[yii\data\DataProviderInterface]] を実装するクラスであり、主として、ページ分割され並べ替えられたデータの取得をサポートするものです。
通常は、[データ・ウィジェット](output-data-widgets.md) と共に使用して、エンド・ユーザが対話的にデータのページネーションと並べ替えをすることが出来るようにします。
通常は、[データ・ウィジェット](output-data-widgets.md) と共に使用して、
エンド・ユーザが対話的にデータのページネーションと並べ替えをすることが出来るようにします。
Yii のリリースには次のデータ・プロバイダのクラスが含まれています。
* [[yii\data\ActiveDataProvider]]: [[yii\db\Query]] または [[yii\db\ActiveQuery]] を使ってデータベースからデータを取得して、配列または [アクティブ・レコード](db-active-record.md) インスタンスの形式でデータを返します。
* [[yii\data\ActiveDataProvider]]: [[yii\db\Query]] または [[yii\db\ActiveQuery]] を使ってデータベースからデータを取得して、
配列または [アクティブ・レコード](db-active-record.md)・インスタンスの形式でデータを返します。
* [[yii\data\SqlDataProvider]]: SQL 文を実行して、データベースのデータを配列として返します。
* [[yii\data\ArrayDataProvider]]: 大きな配列を受け取り、ページネーションと並べ替えの指定に基づいて、一部分を切り出して返します。
* [[yii\data\ArrayDataProvider]]: 大きな配列を受け取り、ページネーションと並べ替えの指定に基づいて、
一部分を切り出して返します。
これら全てのデータ・プロバイダの使用方法は、次の共通のパターンを持っています。
@ -32,12 +36,13 @@ $count = $provider->getCount();
$totalCount = $provider->getTotalCount();
```
データ・プロバイダのページネーションと並べ替えの振る舞いを指定するためには、その [[yii\data\BaseDataProvider::pagination|pagination]] と [[yii\data\BaseDataProvider::sort|sort]] のプロパティを構成します。
データ・プロバイダのページネーションと並べ替えの振る舞いを指定するためには、その [[yii\data\BaseDataProvider::pagination|pagination]]
と [[yii\data\BaseDataProvider::sort|sort]] のプロパティを構成します。
二つのプロパティは、それぞれ、[[yii\data\Pagination]] と [[yii\data\Sort]] の構成情報に対応します。
これらを `false` に設定して、ページネーションや並べ替えの機能を無効にすることも出来ます。
[データ・ウィジェット](output-data-widgets.md)、例えば [[yii\grid\GridView]] は、`dataProvider` という名前のプロパティを持っており、これにデータ・プロバイダのインスタンスを受け取らせて、それが提供するデータを表示させることが出来ます。
例えば、
[データ・ウィジェット](output-data-widgets.md)、例えば [[yii\grid\GridView]] は、`dataProvider` という名前のプロパティを持っており、
これにデータ・プロバイダのインスタンスを受け取らせて、それが提供するデータを表示させることが出来ます。例えば、
```php
echo yii\grid\GridView::widget([
@ -53,9 +58,8 @@ echo yii\grid\GridView::widget([
[[yii\data\ActiveDataProvider]] を使用するためには、その [[yii\data\ActiveDataProvider::query|query]] プロパティを構成しなければなりません。
これは、[[yii\db\Query]] または [[yii\db\ActiveQuery]] のオブジェクトを取ることが出来ます。
前者であれば、返されるデータは配列になります。
後者であれば、返されるデータは配列または [アクティブ・レコード](db-active-record.md) インスタンスとすることが出来ます。
例えば、
前者であれば、返されるデータは配列になります。後者であれば、返されるデータは配列または [アクティブ・レコード](db-active-record.md)
インスタンスとすることが出来ます。例えば、
```php
use yii\data\ActiveDataProvider;
@ -87,8 +91,9 @@ use yii\db\Query;
$query = (new Query())->from('post')->where(['status' => 1]);
```
> Note: クエリが既に `orderBy` 句を指定しているものである場合、(`sort` の構成を通して) エンド・ユーザによって与えられる並べ替えの指定は、既存の `orderBy` 句に追加されます。
一方、`limit` と `offset` の句が存在している場合は、(`pagenation` の構成を通して) エンド・ユーザによって指定されるページネーションのリクエストによって上書きされます。
> Note: クエリが既に `orderBy` 句を指定しているものである場合、(`sort` の構成を通して) エンド・ユーザによって与えられる並べ替えの指定は、
既存の `orderBy` 句に追加されます。一方、`limit` と `offset` の句が存在している場合は、
(`pagenation` の構成を通して) エンド・ユーザによって指定されるページネーションのリクエストによって上書きされます。
デフォルトでは、[[yii\data\ActiveDataProvider]] はデータベース接続として `db` アプリケーション・コンポーネントを使用します。
[[yii\data\ActiveDataProvider::db]] プロパティを構成すれば、別のデータベース接続を使用することが出来ます。
@ -97,10 +102,12 @@ $query = (new Query())->from('post')->where(['status' => 1]);
## SQL データ・プロバイダ <span id="sql-data-provider"></span>
[[yii\data\SqlDataProvider]] は、生の SQL 文を使用して、必要なデータを取得します。
このデータ・プロバイダは、[[yii\data\SqlDataProvider::sort|sort]] と [[yii\data\SqlDataProvider::pagination|pagination]] の指定に基づいて、SQL 文の `ORDER BY``OFFSET/LIMIT` の句を修正し、指定された順序に並べ替えられたデータを要求されたページの分だけ取得します。
このデータ・プロバイダは、[[yii\data\SqlDataProvider::sort|sort]] と [[yii\data\SqlDataProvider::pagination|pagination]]
の指定に基づいて、SQL 文の `ORDER BY``OFFSET/LIMIT` の句を修正し、
指定された順序に並べ替えられたデータを要求されたページの分だけ取得します。
[[yii\data\SqlDataProvider]] を使用するためには、[[yii\data\SqlDataProvider::sql|sql]] プロパティだけでなく、[[yii\data\SqlDataProvider::totalCount|totalCount]] プロパティを指定しなければなりません。
例えば、
[[yii\data\SqlDataProvider]] を使用するためには、[[yii\data\SqlDataProvider::sql|sql]] プロパティだけでなく、
[[yii\data\SqlDataProvider::totalCount|totalCount]] プロパティを指定しなければなりません。例えば、
```php
use yii\data\SqlDataProvider;
@ -129,8 +136,9 @@ $provider = new SqlDataProvider([
$models = $provider->getModels();
```
> Info: [[yii\data\SqlDataProvider::totalCount|totalCount]] プロパティは、データにページネーションを適用しなければならない場合にだけ要求されます。
これは、[[yii\data\SqlDataProvider::sql|sql]] によって指定される SQL 文は、現在要求されているページのデータだけを返すように、データ・プロバイダによって修正されてしまうからです。
> Info: [[yii\data\SqlDataProvider::totalCount|totalCount]] プロパティは、データにページネーションを適用しなければならない
場合にだけ要求されます。これは、[[yii\data\SqlDataProvider::sql|sql]] によって指定される SQL 文は、
現在要求されているページのデータだけを返すように、データ・プロバイダによって修正されてしまうからです。
データ・プロバイダは、総ページ数を正しく計算するためには、データ・アイテムの総数を知る必要があります。
@ -138,9 +146,10 @@ $models = $provider->getModels();
[[yii\data\ArrayDataProvider]] は、一つの大きな配列を扱う場合に最も適しています。
このデータ・プロバイダによって、一つまたは複数のカラムで並べ替えた配列データの 1 ページ分を返すことが出来ます。
[[yii\data\ArrayDataProvider]] を使用するためには、全体の大きな配列として [[yii\data\ArrayDataProvider::allModels|allModels]] プロパティを指定しなければなりません。
この大きな配列の要素は、連想配列 (例えば [DAO](db-dao.md) のクエリ結果) またはオブジェクト (例えば [アクティブ・レコード](db-active-record.md) インスタンス) とすることが出来ます。
例えば、
[[yii\data\ArrayDataProvider]] を使用するためには、全体の大きな配列として
[[yii\data\ArrayDataProvider::allModels|allModels]] プロパティを指定しなければなりません。
この大きな配列の要素は、連想配列 (例えば [DAO](db-dao.md) のクエリ結果) またはオブジェクト
(例えば [アクティブ・レコード](db-active-record.md) インスタンス) とすることが出来ます。例えば、
```php
use yii\data\ArrayDataProvider;
@ -166,16 +175,16 @@ $provider = new ArrayDataProvider([
$rows = $provider->getModels();
```
> Note: [アクティブ・データ・プロバイダ](#active-data-provider) および [SQL データ・プロバイダ](#sql-data-provider) と比較すると、配列データ・プロバイダは効率の面では劣ります。
何故なら、*全ての* データをメモリにロードしなければならないからです。
> Note: [アクティブ・データ・プロバイダ](#active-data-provider) および [SQL データ・プロバイダ](#sql-data-provider) と比較すると、
配列データ・プロバイダは効率の面では劣ります。何故なら、*全ての* データをメモリにロードしなければならないからです。
## データのキーを扱う <span id="working-with-keys"></span>
データ・プロバイダによって返されたデータ・アイテムを使用する場合、各データ・アイテムを一意のキーで特定しなければならないことがよくあります。
例えば、データ・アイテムが顧客情報を表す場合、顧客 ID を各顧客データのキーとして使用したいでしょう。
データ・プロバイダは、[[yii\data\DataProviderInterface::getModels()]] によって返されたデータ・アイテムに対応するそのようなキーのリストを返すことが出来ます。
例えば、
データ・プロバイダによって返されたデータ・アイテムを使用する場合、各データ・アイテムを一意のキーで
特定しなければならないことがよくあります。例えば、データ・アイテムが顧客情報を表す場合、顧客 ID
を各顧客データのキーとして使用したいでしょう。データ・プロバイダは、[[yii\data\DataProviderInterface::getModels()]]
によって返されたデータ・アイテムに対応するそのようなキーのリストを返すことが出来ます。例えば、
```php
use yii\data\ActiveDataProvider;
@ -193,8 +202,9 @@ $posts = $provider->getModels();
$ids = $provider->getKeys();
```
上記の例では、[[yii\data\ActiveDataProvider]] に対して [[yii\db\ActiveQuery]] オブジェクトを供給していますから、キーとしてプライマリ・キーの値を返すのが理にかなっています。
キーの値の計算方法を明示的に指定するために、[[yii\data\ActiveDataProvider::key]] にカラム名を設定したり、キーの値を計算するコーラブルを設定したりすることも出来ます。
上記の例では、[[yii\data\ActiveDataProvider]] に対して [[yii\db\ActiveQuery]] オブジェクトを供給していますから、
キーとしてプライマリ・キーの値を返すのが理にかなっています。キーの値の計算方法を明示的に指定するために、
[[yii\data\ActiveDataProvider::key]] にカラム名を設定したり、キーの値を計算するコーラブルを設定したりすることも出来ます。
例えば、
```php
@ -217,13 +227,15 @@ $provider = new ActiveDataProvider([
## カスタム・データ・プロバイダを作成する <span id="custom-data-provider"></span>
あなた自身のカスタム・データ・プロバイダ・クラスを作成するためには、[[yii\data\DataProviderInterface]] を実装しなければなりません。
[[yii\data\BaseDataProvider]] を拡張するのが比較的簡単な方法です。
そうすれば、データ・プロバイダのコアのロジックに集中することが出来ます。
[[yii\data\BaseDataProvider]] を拡張するのが比較的簡単な方法です。そうすれば、データ・プロバイダのコアのロジックに集中することが出来ます。
具体的に言えば、実装する必要があるのは、主として次のメソッドです。
- [[yii\data\BaseDataProvider::prepareModels()|prepareModels()]]: 現在のページで利用できるデータ・モデルを準備して、それを配列として返します。
- [[yii\data\BaseDataProvider::prepareKeys()|prepareKeys()]]: 現在利用できるデータ・モデルの配列を受け取って、それと関連付けられるキーの配列を返します。
- [[yii\data\BaseDataProvider::prepareTotalCount()|prepareTotalCount]]: データ・プロバイダにあるデータ・モデルの総数を示す値を返します。
- [[yii\data\BaseDataProvider::prepareModels()|prepareModels()]]: 現在のページで利用できるデータ・モデルを準備して、
それを配列として返します。
- [[yii\data\BaseDataProvider::prepareKeys()|prepareKeys()]]: 現在利用できるデータ・モデルの配列を受け取って、
それと関連付けられるキーの配列を返します。
- [[yii\data\BaseDataProvider::prepareTotalCount()|prepareTotalCount]]: データ・プロバイダにある
データ・モデルの総数を示す値を返します。
下記は、CSV ファイルを効率的に読み出すデータ・プロバイダのサンプルです。

142
docs/guide-ja/output-data-widgets.md

@ -3,7 +3,8 @@
Yii はデータを表示するために使うことが出来る一連の [ウィジェット](structure-widgets.md) を提供しています。
[DetailView](#detail-view) は、単一のレコードのデータを表示するのに使うことが出来ます。
それに対して、[ListView](#list-view) と [GridView](#grid-view) は、複数のデータ・レコードをリストまたはテーブルで表示することが出来るもので、ページネーション、並べ替え、フィルタリングなどの機能を提供するものです。
それに対して、[ListView](#list-view) と [GridView](#grid-view) は、複数のデータ・レコードをリストまたはテーブルで表示することが出来るもので、
ページネーション、並べ替え、フィルタリングなどの機能を提供するものです。
DetailView <span id="detail-view"></span>
@ -63,7 +64,8 @@ ListView <span id="list-view"></span>
[[yii\widgets\ListView|ListView]] ウィジェットは、[データ・プロバイダ](output-data-providers.md) からのデータを表示するのに使用されます。
各データ・モデルは指定された [[yii\widgets\ListView::$itemView|ビュー・ファイル]] を使って表示されます。
ListView は、特に何もしなくても、ページネーション、並べ替え、フィルタリングなどの機能を提供してくれますので、エンド・ユーザに情報を表示するためにも、データ管理 UI を作成するためにも、非常に便利なウィジェットです。
ListView は、特に何もしなくても、ページネーション、並べ替え、フィルタリングなどの機能を提供してくれますので、
エンド・ユーザに情報を表示するためにも、データ管理 UI を作成するためにも、非常に便利なウィジェットです。
典型的な使用方法は以下の通りです。
@ -98,14 +100,14 @@ use yii\helpers\HtmlPurifier;
</div>
```
上記のビュー・ファイルでは、現在のデータ・モデルを `$model` としてアクセスすることが出来ます。
追加で次のものを利用することも出来ます。
上記のビュー・ファイルでは、現在のデータ・モデルを `$model` としてアクセスすることが出来ます。追加で次のものを利用することも出来ます。
- `$key`: mixed - データ・アイテムと関連付けられたキーの値。
- `$index`: integer - データ・プロバイダによって返されるアイテムの配列の 0 から始まるインデックス。
- `$widget`: ListView - ウィジェットのインスタンス。
追加のデータを各ビューに渡す必要がある場合は、次のように、[[yii\widgets\ListView::$viewParams|$viewParams]] を使って「キー・値」のペアを渡すことが出来ます。
追加のデータを各ビューに渡す必要がある場合は、次のように、[[yii\widgets\ListView::$viewParams|$viewParams]]
を使って「キー・値」のペアを渡すことが出来ます。
```php
echo ListView::widget([
@ -125,9 +127,9 @@ echo ListView::widget([
GridView <span id="grid-view"></span>
--------
データ・グリッドすなわち [[yii\grid\GridView|GridView]] は Yii の最も強力なウィジェットの一つです。
れは、システムの管理セクションを素速く作らねばならない時に、この上なく便利なものです。
このウィジェットは [データ・プロバイダ](output-data-providers.md) からデータを受けて、テーブルの形式で、行ごとに一組の [[yii\grid\GridView::columns|カラム]] を使ってデータを表示します。
データ・グリッドすなわち [[yii\grid\GridView|GridView]] は Yii の最も強力なウィジェットの一つです。これは、システムの管理セクションを素速く作らねばならない時に、
この上なく便利なものです。このウィジェットは [データ・プロバイダ](output-data-providers.md) からデータを受けて、
テーブルの形式で、行ごとに一組の [[yii\grid\GridView::columns|カラム]] を使ってデータを表示します。
テーブルの各行が一つのデータ・アイテムを表します。そして、一つのカラムは通常はアイテムの一属性を表します
(カラムの中に、複数の属性を組み合わせた複雑な式に対応するものや、静的なテキストを表すものを含めることも出来ます)。
@ -152,11 +154,13 @@ echo GridView::widget([
上記のコードは、最初にデータ・プロバイダを作成し、次に GridView を使って、データ・プロバイダから受け取る全ての行の全ての属性を表示するものです。
表示されるテーブルには、特に何も設定しなくても、並べ替えとページネーションの機能が装備されます。
### グリッドのカラム <span id="grid-columns"></span>
グリッドのテーブルのカラムは [[yii\grid\Column]] クラスとして表現され、GridView の構成情報の [[yii\grid\GridView::columns|columns]] プロパティで構成されます。
カラムは、タイプや設定の違いに応じて、データをさまざまな形で表現することが出来ます。
デフォルトのクラスは [[yii\grid\DataColumn]] です。これは、モデルの一つの属性を表現し、その属性による並べ替えとフィルタリングを可能にするものです。
グリッドのテーブルのカラムは [[yii\grid\Column]] クラスとして表現され、GridView の構成情報の
[[yii\grid\GridView::columns|columns]] プロパティで構成されます。カラムは、タイプや設定の違いに応じて、
データをさまざまな形で表現することが出来ます。デフォルトのクラスは [[yii\grid\DataColumn]] です。
これは、モデルの一つの属性を表現し、その属性による並べ替えとフィルタリングを可能にするものです。
```php
echo GridView::widget([
@ -178,11 +182,13 @@ echo GridView::widget([
]);
```
構成情報の [[yii\grid\GridView::columns|columns]] の部分が指定されない場合は、Yii は、データ・プロバイダのモデルの表示可能な全てのカラムを表示しようとすることに注意してください。
構成情報の [[yii\grid\GridView::columns|columns]] の部分が指定されない場合は、Yii は、
データ・プロバイダのモデルの表示可能な全てのカラムを表示しようとすることに注意してください。
### カラム・クラス <span id="column-classes"></span>
グリッドのカラムは、いろいろなカラムクラスを使うことでカスタマイズすることが出来ます。
グリッドのカラムは、いろいろなカラムクラスを使うことでカスタマイズすることが出来ます。
```php
echo GridView::widget([
@ -194,10 +200,10 @@ echo GridView::widget([
],
```
Yii によって提供されるカラムクラスを以下で見ていきますが、それらに加えて、あなた自身のカラム・クラスを作成することも出来ます。
全てのカラム・クラスは [[yii\grid\Column]] を拡張するものですので、グリッドのカラムを構成するときに設定できる共通のオプションがいくつかあります。
Yii によって提供されるカラム・クラスを以下で見ていきますが、それらに加えて、あなた自身のカラム・クラスを作成することも出来ます。
全てのカラム・クラスは [[yii\grid\Column]] を拡張するものですので、グリッドのカラムを構成するときに設定できる
共通のオプションがいくつかあります。
- [[yii\grid\Column::header|header]] によって、ヘッダ行のコンテントを設定することが出来ます。
- [[yii\grid\Column::footer|footer]] によって、フッタ行のコンテントを設定することが出来ます。
@ -237,6 +243,13 @@ echo GridView::widget([
'attribute' => 'birthday',
'format' => ['date', 'php:Y-m-d']
],
'created_at:datetime', // shortcut format
[
'label' => '教育',
'attribute' => 'education',
'filter' => ['0' => '初等教育', '1' => '中等教育', '2' => '高等教育'],
'filterInputOptions' => ['prompt' => '全ての教育', 'class' => 'form-control', 'id' => null]
],
],
]);
```
@ -250,9 +263,16 @@ echo GridView::widget([
データカラムを構成するためには、ショートカット形式を使うことも出来ます。
それについては、[[yii\grid\GridView::columns|columns]] の API ドキュメントで説明されています。
フィルタ・インプットの HTML を制御するためには、[[yii\grid\DataColumn::filter|filter]] と
[[yii\grid\DataColumn::filterInputOptions|filterInputOptions]] を使用して下さい。
デフォルトでは、カラム・ヘッダは [[yii\data\Sort::link]] によってレンダリングされますが、[[yii\grid\Column::header]] を使って調整することが出来ます。
ヘッダのテキストを変更するには、上の例のように、[[yii\grid\DataColumn::$label]] を設定しなければなりません。
デフォルトでは、ラベルはデータ・モデルによって設定されます。詳細は [[yii\grid\DataColumn::getHeaderCellLabel]] を参照して下さい。
#### アクション・カラム <span id="action-column"></span>
[[yii\grid\ActionColumn|アクション・カラム]] は、各行について、更新や削除などのアクションボタンを表示します。
[[yii\grid\ActionColumn|アクション・カラム]] は、各行について、更新や削除などのアクションボタンを表示します。
```php
echo GridView::widget([
@ -272,11 +292,9 @@ echo GridView::widget([
波括弧に囲まれたトークンは、コントローラのアクション ID として扱われます (アクション・カラムのコンテキストでは *ボタンの名前* とも呼ばれます)。
これらは、[[yii\grid\ActionColumn::$buttons|buttons]] によって定義される、対応するボタン表示コールバックによって置き換えられます。
例えば、`{view}` というトークンは、`buttons['view']` のコールバックの結果によって置き換えられます。
コールバックが見つからない場合は、トークンは空文字列によって置き換えられます。
デフォルトのテンプレートは `{view} {update} {delete}` です。
コールバックが見つからない場合は、トークンは空文字列によって置き換えられます。デフォルトのテンプレートは `{view} {update} {delete}` です。
- [[yii\grid\ActionColumn::buttons|buttons]] はボタン表示コールバックの配列です。
配列のキーはボタンの名前 (波括弧を除く) であり、値は対応するボタン表示コールバックです。
コールバックは下記のシグニチャを使わなければなりません。
配列のキーはボタンの名前 (波括弧を除く) であり、値は対応するボタン表示コールバックです。コールバックは下記のシグニチャを使わなければなりません。
```php
function ($url, $model, $key) {
@ -284,7 +302,8 @@ echo GridView::widget([
}
```
上記のコードで、`$url` はカラムがボタンのために生成する URL、`$model` は現在の行に表示されるモデル・オブジェクト、そして `$key` はデータ・プロバイダの配列の中にあるモデルのキーです。
上記のコードで、`$url` はカラムがボタンのために生成する URL、`$model` は現在の行に表示されるモデル・オブジェクト、
そして `$key` はデータ・プロバイダの配列の中にあるモデルのキーです。
- [[yii\grid\ActionColumn::urlCreator|urlCreator]] は、指定されたモデルの情報を使って、ボタンの URL を生成するコールバックです。
コールバックのシグニチャは [[yii\grid\ActionColumn::createUrl()]] のそれと同じでなければなりません。
@ -308,7 +327,6 @@ echo GridView::widget([
]
```
#### チェックボックス・カラム <span id="checkbox-column"></span>
[[yii\grid\CheckboxColumn|チェックボックス・カラム]] はチェックボックスのカラムを表示します。
@ -359,9 +377,10 @@ echo GridView::widget([
### データをフィルタリングする <span id="filtering-data"></span>
データをフィルタリングするためには、GridView は検索基準を表す [モデル](structure-models.md) を必要とします。
検索基準は、通常は、グリッドビューのテーブルのフィルタのフィールドから取得されます。
[アクティブ・レコード](db-active-record.md) を使用している場合は、必要な機能を提供する検索用のモデル・クラスを作成するのが一般的なプラクティスです (あなたに代って [Gii](start-gii.md) が生成してくれます)。
このクラスが、グリッドビューのテーブルに表示されるフィルタ・コントロールのための検証規則を定義し、
検索基準は、通常は、グリッド・ビューのテーブルのフィルタのフィールドから取得されます。
[アクティブ・レコード](db-active-record.md) を使用している場合は、必要な機能を提供する検索用のモデル・クラスを
作成するのが一般的なプラクティスです (あなたに代って [Gii](start-gii.md) が生成してくれます)。
このクラスが、グリッド・ビューのテーブルに表示されるフィルタ・コントロールのための検証規則を定義し、
検索基準に従って修正されたクエリを持つデータ・プロバイダを返す `search()` メソッドを提供します。
`Post` モデルに対して検索機能を追加するために、次の例のようにして、`PostSearch` モデルを作成することが出来ます。
@ -413,7 +432,6 @@ class PostSearch extends Post
return $dataProvider;
}
}
```
> Tip: フィルタのクエリを構築する方法を学ぶためには、[クエリ・ビルダ](db-query-builder.md)、
@ -443,12 +461,10 @@ echo GridView::widget([
]);
```
### 独立したフィルタ・フォーム <span id="separate-filter-form"></span>
たいていの場合はグリッドビューのヘッダのフィルタで十分でしょう。
しかし、独立したフィルタのフォームが必要な場合でも、簡単に追加することができます。
まず、以下の内容を持つパーシャル・ビュー `_search.php` を作成します。
たいていの場合はグリッド・ビューのヘッダのフィルタで十分でしょう。しかし、独立したフィルタのフォームが必要な場合でも、
簡単に追加することができます。まず、以下の内容を持つパーシャル・ビュー `_search.php` を作成します。
```php
<?php
@ -487,12 +503,11 @@ use yii\widgets\ActiveForm;
```
> Note: Gii を使って CRUD コードを生成する場合、デフォルトで、独立したフィルタ・フォーム (`_search.php`) が生成されます。
ただし、`index.php` ビューの中ではコメント・アウトされています。
コメントを外せば、すぐに使うことが出来ます。
ただし、`index.php` ビューの中ではコメント・アウトされています。コメントを外せば、すぐに使うことが出来ます。
独立したフィルタ・フォームは、グリッドビューに表示されないフィールドによってフィルタをかけたり、
独立したフィルタ・フォームは、グリッドビューに表示されないフィールドによってフィルタをかけたり、
または日付の範囲のような特殊なフィルタ条件を使う必要があったりする場合に便利です。
日付の範囲によってフィルタする場合は、DB には存在しない `createdFrom``createdTo` という属性を検索用のモデルに追加すると良いでしょう。
日付の範囲によってフィルタする場合は、DB には存在しない `createdFrom``createdTo` という属性を検索用のモデルに追加すると良いでしょう。
```php
class PostSearch extends Post
@ -524,16 +539,17 @@ $query->andFilterWhere(['>=', 'creation_date', $this->createdFrom])
<?= $form->field($model, 'creationTo') ?>
```
### モデルのリレーションを扱う <span id="working-with-model-relations"></span>
GridView でアクティブ・レコードを表示するときに、リレーションのカラムの値、例えば、単に投稿者の `id` というのではなく、投稿者の名前を表示するという場合に遭遇するかも知れません。
`Post` モデルが `author` という名前のリレーションを持っていて、その投稿者のモデルが `name` という属性を持っているなら、[[yii\grid\GridView::$columns]] の属性名を `author.name` と定義します。
そうすれば、GridView が投稿者の名前を表示するようになります。
ただし、並べ替えとフィルタリングは、デフォルトでは有効になりません。
GridView でアクティブ・レコードを表示するときに、例えば、単に投稿者の `id` ではなく、
投稿者の名前のような関連するカラムの値を表示するという場合に遭遇するかも知れません。
`Post` モデルが `author` という名前のリレーションを持っていて、その投稿者のモデルが `name` という属性を持っているなら、
[[yii\grid\GridView::$columns]] の属性名を `author.name` と定義します。
そうすれば、GridView が投稿者の名前を表示するようになります。ただし、並べ替えとフィルタリングは、デフォルトでは有効になりません。
これらの機能を追加するためには、前の項で導入した `PostSearch` モデルを修正しなければなりません。
リレーションのカラムによる並べ替えを有効にするためには、リレーションのテーブルを結合し、データ・プロバイダの Sort コンポーネントに並べ替えの規則を追加します。
リレーションのカラムによる並べ替えを有効にするためには、リレーションのテーブルを結合し、
データ・プロバイダの Sort コンポーネントに並べ替えの規則を追加します。
```php
$query = Post::find();
@ -580,7 +596,8 @@ $query->andFilterWhere(['LIKE', 'author.name', $this->getAttribute('author.name'
> Info: 上の例では、リレーション名とテーブル・エイリアスに同じ文字列を使用しています。
> しかし、エイリアスとリレーション名が異なる場合は、どこでエイリアスを使い、どこでリレーション名を使うかに注意を払わなければなりません。
> これに関する簡単な規則は、データベースクエリを構築するために使われる全ての場所でエイリアスを使い、`attributes()` や `rules()` など、その他の全ての定義においてリレーション名を使う、というものです。
> これに関する簡単な規則は、データベース・クエリを構築するために使われる全ての場所でエイリアスを使い、
> `attributes()``rules()` など、その他の全ての定義においてリレーション名を使う、というものです。
>
> 例えば、投稿者のリレーションテーブルに `au` というエイリアスを使う場合は、joinWith の文は以下のようになります。
>
@ -605,18 +622,20 @@ $query->andFilterWhere(['LIKE', 'author.name', $this->getAttribute('author.name'
> ];
> ```
>
> さらに、並べ替えの [[yii\data\Sort::defaultOrder|defaultOrder]] を指定するときも、エイリアスではなくリレーション名を使う必要があります。
> さらに、並べ替えの [[yii\data\Sort::defaultOrder|defaultOrder]] を指定するときも、
> エイリアスではなくリレーション名を使う必要があります。
>
> ```php
> $dataProvider->sort->defaultOrder = ['author.name' => SORT_ASC];
> ```
> Info: `joinWith` およびバックグラウンドで実行されるクエリの詳細については、[アクティブ・レコード - リレーションを使ってテーブルを結合する](db-active-record.md#joining-with-relations) を参照してください。
> Info: `joinWith` およびバックグラウンドで実行されるクエリの詳細については、
> [アクティブ・レコード - リレーションを使ってテーブルを結合する](db-active-record.md#joining-with-relations) を参照してください。
#### SQL ビューを使って、データのフィルタリング・並べ替え・表示をする <span id="using-sql-views"></span>
もう一つ別に、もっと高速で便利な手法があります。SQL ビューです。
例えば、ユーザとユーザのプロファイルを一緒にグリッドビューに表示する必要がある場合、次のような SQL ビューを作成することが出来ます。
例えば、ユーザとユーザのプロファイルを一緒にグリッドビューに表示する必要がある場合、次のような SQL ビューを作成することが出来ます。
```sql
CREATE OR REPLACE VIEW vw_user_info AS
@ -673,10 +692,8 @@ class UserView extends ActiveRecord
}
```
このようにした後は、この UserView アクティブ・レコードを検索用のモデルとともに使うことが出来ます。
並べ替えやフィルタリングの属性を追加で定義する必要はありません。
全ての属性がそのままで動作します。
この手法にはいくつかの長所と短所があることに注意してください。
このようにした後は、この UserView アクティブ・レコードを検索用のモデルとともに使うことが出来ます。並べ替えやフィルタリングの属性を追加で定義する必要はありません。
全ての属性がそのままで動作します。この手法にはいくつかの長所と短所があることに注意してください。
- 並べ替えとフィルタリングの条件をいろいろと定義する必要はありません。全てそのままで動きます。
- データサイズが小さく、実行される SQL クエリの数が少ない (通常なら全てのリレーションについて一つずつ必要になる追加のクエリが要らない) ため、非常に高速になり得ます。
@ -684,13 +701,18 @@ class UserView extends ActiveRecord
従って、`isActive` や `isDeleted` などのような UI に影響するメソッドがある場合は、それらをこのクラスの中に複製する必要があります。
### 一つのページに複数のグリッドビュー <span id="multiple-gridviews"></span>
### 一つのページに複数のグリッドビュー <span id="multiple-gridviews"></span>
一つのページで二つ以上のグリッドビューを使うことが出来ますが、お互いが干渉しないように、追加の構成がいくつか必要になります。
グリッドビューの複数のインスタンスを使う場合は、並べ替えとページネーションのリンクが違うパラメータ名を持って生成されるように構成して、それぞれのグリッドビューが独立した並べ替えとページネーションを持つことが出来るようにしなければなりません。
そのためには、データ・プロバイダの [[yii\data\BaseDataProvider::$sort|sort]] と [[yii\data\BaseDataProvider::$pagination|pagination]] インスタンスの [[yii\data\Sort::sortParam|sortParam]] と [[yii\data\Pagination::pageParam|pageParam]] を設定します。
一つのページで二つ以上のグリッド・ビューを使うことが出来ますが、
お互いが干渉しないように、追加の構成がいくつか必要になります。
グリッド・ビューの複数のインスタンスを使う場合は、並べ替えとページネーションのリンクが違うパラメータ名を持って生成されるように構成して、
それぞれのグリッド・ビューが独立した並べ替えとページネーションを持つことが出来るようにしなければなりません。
そのためには、データ・プロバイダの [[yii\data\BaseDataProvider::$sort|sort]] と [[yii\data\BaseDataProvider::$pagination|pagination]]
インスタンスの [[yii\data\Sort::sortParam|sortParam]] と [[yii\data\Pagination::pageParam|pageParam]]
を設定します。
`Post``User` のリストを表示するために、二つのプロバイダ、`$userProvider` と `$postProvider` を準備済みであると仮定します。
`Post``User` のリストを表示するために、二つのプロバイダ、`$userProvider` と `$postProvider`
を準備済みであると仮定します。
```php
use yii\grid\GridView;
@ -714,7 +736,8 @@ echo GridView::widget([
### GridView を Pjax とともに使う <span id="using-gridview-with-pjax"></span>
[[yii\widgets\Pjax|Pjax]] ウィジェットを使うと、ページ全体をリロードせずに、ページの一部分だけを更新することが出来ます。
[[yii\widgets\Pjax|Pjax]] ウィジェットを使うと、ページ全体をリロードせずに、
ページの一部分だけを更新することが出来ます。
これを使うと、フィルタを使うときに、[[yii\grid\GridView|GridView]] の中身だけを更新することが出来ます。
```php
@ -730,14 +753,16 @@ Pjax::begin([
Pjax::end();
```
[[yii\widgets\Pjax|Pjax]] は、[[yii\widgets\Pjax::$linkSelector|Pjax::$linkSelector]] の指定に従って、リンクに対しても動作します。
これは [[yii\grid\ActionColumn|ActionColumn]] を使う場合には問題となり得ます。
Pjax は、[[yii\widgets\Pjax|Pjax]] ウィジェットの内側にあるリンク、および、[[yii\widgets\Pjax::$linkSelector|Pjax::$linkSelector]]
で指定されているリンクに対しても動作します。
しかし、これは [[yii\grid\ActionColumn|ActionColumn]] のリンクに対しては問題となり得ます。
この問題を防止するためには、[[yii\grid\ActionColumn::$buttons|ActionColumn::$buttons]]
プロパティを編集して `data-pjax="0"` という HTML 属性を追加します。
#### Gii における Pjax を伴う GridView/ListView
バージョン 2.0.5 以降、[Gii](start-gii.md) の CRUD ジェネレータでは `$enablePjax` というオプションがウェブ・インタフェイスまたはコマンドラインで使用可能になっています。
バージョン 2.0.5 以降、[Gii](start-gii.md) の CRUD ジェネレータでは `$enablePjax`
というオプションがウェブ・インタフェイスまたはコマンドラインで使用可能になっています。
```php
yii gii/crud --controllerClass="backend\\controllers\PostController" \
@ -748,7 +773,6 @@ yii gii/crud --controllerClass="backend\\controllers\PostController" \
これによって、[[yii\grid\GridView|GridView]] または [[yii\widgets\ListView|ListView]]
を囲む [[yii\widgets\Pjax|Pjax]] ウィジェットが生成されます。
さらに読むべき文書
------------------

28
docs/guide-ja/output-pagination.md

@ -1,22 +1,20 @@
ページネーション
================
一つのページに表示するにはデータの数が多すぎるという場合に、データを複数のページに分割して、それぞれのページでは一部分だけを表示する、という戦略がよく使われます。
この戦略が *ページネーション* として知られるものです。
一つのページに表示するにはデータの数が多すぎるという場合に、データを複数のページに分割して、それぞれのページでは一部分だけを表示する、
という戦略がよく使われます。この戦略が *ページネーション* として知られるものです。
Yii は [[yii\data\Pagination]] オブジェクトを使って、ページネーションのスキームに関する情報を表します。
具体的に言えば、
Yii は [[yii\data\Pagination]] オブジェクトを使って、ページネーションのスキームに関する情報を表します。具体的に言えば、
* [[yii\data\Pagination::$totalCount|totalCount]] データ・アイテムの総数を指定します。
通常、データ・アイテムの総数は、一つのページを表示することが可能なデータ・アイテムの数より、ずっと大きなものになることに注意してください。
* [[yii\data\Pagination::$pageSize|pageSize]] 各ページが含むアイテムの数を指定します。
デフォルト値は 20 です。
* [[yii\data\Pagination::$page|page]] 現在のページ番号 (0 から始まる) を示します。
デフォルト値は 0 であり、最初のページを意味します。
* [[yii\data\Pagination::$page|page]] 現在のページ番号 (0 から始まる) を示します。デフォルト値は 0 であり、最初のページを意味します。
これらの情報を全て定義した [[yii\data\Pagination]] オブジェクトを使って、データの一部分を取得して表示することが出来ます。
例えば、データ・プロバイダからデータを取得する場合であれば、ページネーションによって提供される値によって、それに対応する `OFFSET``LIMIT` の句を DB クエリに指定することが出来ます。
下記に例を挙げます。
例えば、データ・プロバイダからデータを取得する場合であれば、ページネーションによって提供される値によって、それに対応する
`OFFSET``LIMIT` の句を DB クエリに指定することが出来ます。下記に例を挙げます。
```php
use yii\data\Pagination;
@ -36,14 +34,13 @@ $articles = $query->offset($pagination->offset)
->all();
```
上記の例で返される記事のページ番号はどうなるでしょう?
それは `page` という名前のクエリ・パラメータがリクエストに含まれるかどうかによって決ります。
デフォルトでは、ページネーションオブジェクトは [[yii\data\Pagination::$page|page]] に `page` パラメータの値をセットしようと試みます。
上記の例で返される記事のページ番号はどうなるでしょう? それは `page` という名前のクエリ・パラメータがリクエストに含まれるかどうかによって決ります。
デフォルトでは、ページネーション・オブジェクトは [[yii\data\Pagination::$page|page]] に `page` パラメータの値をセットしようと試みます。
そして、このパラメータが提供されていない場合には、デフォルト値である 0 が使用されます。
ページネーションをサポートする UI 要素の構築を容易にするために、Yii はページボタンのリストを表示する [[yii\widgets\LinkPager]] ウィジェットを提供しています。
これは、ユーザがページボタンをクリックして、どのページを表示すべきかを指示することが出来るものです。
このウィジェットは、ページネーション・オブジェクトを受け取って、現在のページ番号が何であるかを知り、何個のページボタンを表示すべきかを知ります。
ページネーションをサポートする UI 要素の構築を容易にするために、Yii はページボタンのリストを表示する [[yii\widgets\LinkPager]] ウィジェットを提供しています。
これは、ユーザがページボタンをクリックして、どのページを表示すべきかを指示することが出来るものです。
このウィジェットは、ページネーション・オブジェクトを受け取って、現在のページ番号が何であるかを知り、何個のページボタンを表示すべきかを知ります。
例えば、
```php
@ -70,4 +67,5 @@ echo $pagination->createUrl(100);
echo $pagination->createUrl(101);
```
> Tip: `page` クエリ・パラメータの名前をカスタマイズするためには、ページネーション・オブジェクトを作成する際に [[yii\data\Pagination::pageParam|pageParam]] プロパティを構成します。
> Tip: `page` クエリ・パラメータの名前をカスタマイズするためには、ページネーション・オブジェクトを作成する際に
[[yii\data\Pagination::pageParam|pageParam]] プロパティを構成します。

18
docs/guide-ja/output-sorting.md

@ -7,14 +7,14 @@ Yii は [[yii\data\Sort]] オブジェクトを使って並べ替えのスキー
* [[yii\data\Sort::$attributes|attributes]] データの並べ替えに使用できる *属性* を指定します。
単純で良ければ、[モデルの属性](structure-models.md#attributes) をこの属性とすることが出来ます。
また、複数のモデル属性や DB のカラムを結合した合成的な属性を指定することも出来ます。
詳細については後述します。
* [[yii\data\Sort::$attributeOrders|attributeOrders]] 各属性について、現在リクエストされている並べ替えの方向を指定します。
また、複数のモデル属性や DB のカラムを結合した合成的な属性を指定することも出来ます。詳細については後述します。
* [[yii\data\Sort::$attributeOrders|attributeOrders]] 各属性について、
現在リクエストされている並べ替えの方向を指定します。
* [[yii\data\Sort::$orders|orders]] 並べ替えの方向をカラムを使う低レベルな形式で示します。
[[yii\data\Sort]] を使用するためには、最初にどの属性が並べ替え可能であるかを宣言します。
次に、現在リクエストされている並べ替え情報を [[yii\data\Sort::$attributeOrders|attributeOrders]] または [[yii\data\Sort::$orders|orders]] から取得して、データのクエリをカスタマイズします。
例えば、
次に、現在リクエストされている並べ替え情報を [[yii\data\Sort::$attributeOrders|attributeOrders]]
または [[yii\data\Sort::$orders|orders]] から取得して、データのクエリをカスタマイズします。例えば、
```php
use yii\data\Sort;
@ -37,8 +37,7 @@ $articles = Article::find()
->all();
```
上記の例では、[[yii\data\Sort|Sort]] オブジェクトに対して二つの属性が宣言されています。
すなわち、`age` と `name` です。
上記の例では、[[yii\data\Sort|Sort]] オブジェクトに対して二つの属性が宣言されています。すなわち、`age` と `name` です。
`age` 属性は `Article` アクティブ・レコード・クラスの `age` 属性に対応する *単純な* 属性です。
これは、次の宣言と等価です。
@ -65,8 +64,9 @@ $articles = Article::find()
設定されていない場合は、[[yii\helpers\Inflector::camel2words()]] が呼ばれて、属性名からラベルが生成されます。
ラベルは HTML エンコードされないことに注意してください。
> Info: [[yii\data\Sort::$orders|orders]] の値をデータベースのクエリに直接に供給して、`ORDER BY` 句を構築することが出来ます。
データベースのクエリが認識できない合成的な属性が入っている場合があるため、[[yii\data\Sort::$attributeOrders|attributeOrders]] を使ってはいけません。
> Info: [[yii\data\Sort::$orders|orders]] の値をデータベースのクエリに直接に供給して、
`ORDER BY` 句を構築することが出来ます。 データベースのクエリが認識できない合成的な属性が入っている場合があるため、
[[yii\data\Sort::$attributeOrders|attributeOrders]] を使ってはいけません。
[[yii\data\Sort::link()]] を呼んでハイパーリンクを生成すれば、それをクリックして、指定した属性によるデータの並べ替えをリクエストすることが出来るようになります。
[[yii\data\Sort::createUrl()]] を呼んで並べ替えを実行する URL を生成することも出来ます。

15
docs/guide-ja/output-theming.md

@ -13,8 +13,9 @@
- [[yii\base\Theme::pathMap]]: ビュー・ファイルの置換の規則を指定します。
詳細は後述する項で説明します。
例えば、`SiteController` で `$this->render('about')` を呼び出すと、ビュー・ファイル `@app/views/site/about.php` をレンダリングすることになります。
しかし、下記のようにアプリケーション構成情報でテーマを有効にすると、代りに、ビュー・ファイル `@app/themes/basic/site/about.php` がレンダリングされます。
例えば、`SiteController` で `$this->render('about')` を呼び出すと、ビュー・ファイル `@app/views/site/about.php`
をレンダリングすることになります。しかし、下記のようにアプリケーション構成情報でテーマを有効にすると、
代りに、ビュー・ファイル `@app/themes/basic/site/about.php` がレンダリングされます。
```php
return [
@ -86,10 +87,9 @@ $file = $theme->getPath('img/logo.gif');
## テーマの継承 <span id="theme-inheritance"></span>
場合によっては、基本的なルック・アンド・フィールを含むアプリケーションの基本テーマを定義しておいて、現在の祝日に基づいてルック・アンド・フィールを少し変更したい、ということがあるかもしれません。
テーマの継承を使ってこの目的を達することが出来ます。
テーマの継承は、一つのビュー・パスを複数のターゲットに割り付けることによって設定することが出来ます。
例えば、
場合によっては、基本的なルック・アンド・フィールを含むアプリケーションの基本テーマを定義しておいて、
現在の祝日に基づいてルック・アンド・フィールを少し変更したい、ということがあるかもしれません。
テーマの継承を使ってこの目的を達することが出来ます。テーマの継承は、一つのビュー・パスを複数のターゲットに割り付けることによって設定することが出来ます。例えば、
```php
'pathMap' => [
@ -100,6 +100,7 @@ $file = $theme->getPath('img/logo.gif');
]
```
この場合、ビュー `@app/views/site/index.php` には、どちらのテーマ・ファイルが存在するかに従って、`@app/themes/christmas/site/index.php` か `@app/themes/basic/site/index.php` か、どちらかのテーマが適用されます。
この場合、ビュー `@app/views/site/index.php` には、どちらのテーマ・ファイルが存在するかに従って、
`@app/themes/christmas/site/index.php``@app/themes/basic/site/index.php` か、どちらかのテーマが適用されます。
テーマ・ファイルが両方とも存在する場合は、最初のものが優先されます。
実際の場面では、ほとんどのテーマ・ビュー・ファイルを `@app/themes/basic` に保管し、その中のいくつかを `@app/themes/christmas` でカスタマイズすることになるでしょう。

Loading…
Cancel
Save