2016-12-18 24 views
0

データベースからの値に基づいてカスタム通貨フォーマッタ+コンバータを作成しました。 これは私が私はこのような動作を実現することができます。このウィジェットではDetailViewYii2 GridView - 他の属性の値に基づく属性形式

use yii\helpers\Html; 
use app\commands\AppHelper; 
use yii\widgets\DetailView; 
use app\models\Part; 

<?= DetailView::widget([ 
    'model' => $model, 
    'attributes' => [ 
     // ... 
     [ 
      'attribute' => 'price', 
      'label' => (new Part())->getAttributeLabel('price_user'), 
      'format' => [ 
       'currency', 
       AppHelper::getUserCurrencyCode(), 
       [ 
        'convert' => true, 
        'currencyFrom' => $model->currency->code, 
        'currencyTo' => AppHelper::getUserCurrencyCode(), 
       ], 
      ], 
     ], 
     // ... 
    ], 
]) ?> 

でそれを使用する方法である:数値がある場合に、それがNULL値、通常の(未設定)がある場合に印刷され、フォーマットされアウト... DetailViewのリレーションからのデータである$model->currency->codeがありますが、そのデータをformatterGridViewに取得する方法がわかりません。

データをフォーマットするときに問題が発生するのは、GridViewです。

私は上のフォーマッタを使用する必要がある列にNULL値を許可し、そうNULL値が存在する場合、Yiiのはこの

<span class="not-set">(not set)</span> 
のようにデータを送信しますので、私はすでに

'value' => function ($data, $key, $index, $column) { return $data->value; } 

を使用してのアイデアを捨てました

と私はカスタム値(NULL値で他の列の値が異なると考えて)を設定したいと思っています。

もう1つの理由は、私が気付いたように、属性パラメータで'format' => ...を使用すると、書式設定はそれらの値を設定する前に起こるということです。

だから私は何とか関係からのデータである$model->currency->codeをそのフォーマッタに渡すことを考えていました。

アイデア?ありがとう。

答えて

0

私はこのような'<span'またはNULLが含まれている値をダンプ値でフォーマッタを使用しますが、それは醜いと私はそれを好まない最悪のケースのシナリオ...

編集:私は未設定のデータをフォーマットするために、カスタムの静的メソッドを追加しました。私はまだそれを好まない、ちょっと、それは動作します...:D

use yii\helpers\Html; 
use app\commands\AppHelper; 
use yii\grid\GridView; 
use app\models\Part; 

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     // ... 
     [ 
      'attribute' => 'price', 
      'label' => (new Part())->getAttributeLabel('price_user'), 
      'value' => function ($data, $key, $index, $column) { 
       return Part::requestPrice(Yii::$app->formatter->asCurrency(
        $data->price, 
        AppHelper::getUserCurrencyCode(), 
        [ 
         'precision' => 2, 
         'convert' => true, 
         'currencyFrom' => $data->currencyCode, 
         'currencyTo' => AppHelper::getUserCurrencyCode(), 
        ])); 
      }, 
      'format' => 'raw', 
     ], 
     // ... 
    ], 
]); ?> 

とPart.php(パートモデル)で、私は方法を追加

public static function requestPrice($price) 
{ 
    if (strpos($price, 'class') !== false || empty($price) || floatval($price) == 0) 
     return '<span class="not-set">' . Yii::t('app', 'na vyžiadanie') . '</span>'; 
    else 
     return $price; 
} 
関連する問題