Я разрабатываю приложение в Yii2. Я сделал форму со следующей выпадающей структурой:
<!-- Konténer típus -->
<?= $form->field($model, 'kontener_tipus_id')
->dropDownList(
ArrayHelper::map(KontenerTipus::find()->AsArray()->all(), 'id',
function($model, $defaultValue) {
if ($model['tipus'] == "N") { $tipus = "Nyitott"; } else { $tipus = "Zárt"; };
if ($model['forma'] == "S") { $forma = "Szimmetrikus forma"; } else { $forma = "Aszimmetrikus forma"; };
if ($model['lancos'] == 0) { $lancos = "Láncos"; } else { $lancos = "Nem láncos"; };
if ($model['teto'] == "B") { $teto = "Billenő tetős"; } else { $teto = "Pille tetős"; };return $tipus . " - " . $forma . " - " . $lancos . " - " . $teto;
}
)
)
->label('Konténer típus');
?>
В файле просмотра «SingleView» я хочу распечатать тот же результат.
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'kod',
'nev',
'cim',
'kihelyezes_datuma',
'lng',
'lat',
['attribute' => 'sajat', 'value' => $model->getSajat()],
//Konténer típushoz tartozó tulajdonságok megjelenítése
['attribute' => 'kontener_tipus_id', 'value' => 11]
],
]) ?>
Я пытался записать функцию в секцию значений, но она выдала мне ошибку: «Специальные символы HTML получили объектный ввод».
Как вы думаете, какой самый простой способ сделать это?
Функция не допускается. Но окончательное значение может быть назначено:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'kod',
'nev',
'cim',
'kihelyezes_datuma',
'lng',
'lat',
['attribute' => 'sajat', 'value' => $model->getSajat()],
//Konténer típushoz tartozó tulajdonságok megjelenítése
['attribute' => 'kontener_tipus_id', 'value' =>
($model['tipus'] == "N" ? "Nyitott" : "Zárt") . ' - ' .
($model['forma'] == "S" ? "Szimmetrikus forma" : "Aszimmetrikus forma") . ' - ' .
($model['lancos'] == 0 ? "Láncos" : "Nem láncos") . ' - ' .
($model['teto'] == "B" ? "Billenő tetős" : "Pille tetős")
]
],
]) ?>
Лучшее решение:
Конечно, вы можете поместить создание строки в собственный метод модели
class KontenerTipus extends Model // or ActiveRecord....
...
public function getKonténerTípus() {
return
($this->tipus == "N" ? "Nyitott" : "Zárt") . ' - ' .
($this->forma == "S" ? "Szimmetrikus forma" : "Aszimmetrikus forma") . ' - ' .
($this->lancos == 0 ? "Láncos" : "Nem láncos") . ' - ' .
($this->teto == "B" ? "Billenő tetős" : "Pille tetős")
}
....
}
или во вспомогательной функции. Этот метод может быть повторно использован в виде:
<?= $form->field($model, 'kontener_tipus_id')
->dropDownList(
ArrayHelper::map(KontenerTipus::find()->AsArray()->all(), 'id', 'konténerTípus')
)
->label('Konténer típus');
?>
и в представлении единой модели:
DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'kod',
'nev',
'cim',
'kihelyezes_datuma',
'lng',
'lat',
['attribute' => 'sajat', 'value' => $model->getSajat()],
//Konténer típushoz tartozó tulajdonságok megjelenítése
'konténerTípus',
],
])
Других решений пока нет …