Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Auramel
Сообщения: 80 Зарегистрирован: 2017.11.17, 14:39
Откуда: Russia, Ufa
Контактная информация:
Сообщение
Auramel » 2018.02.12, 11:50
Доброго времени суток, в своих проектах использую нативные формы (без ActiveForm) и очень часто необходимо добавлять placeholder. Раз уж есть метод attributeLabels, добавил и attributePlaceholders(). Предлагаю добавить это в класс \yii\base\Model.
Пример:
Код: Выделить всё
/**
* @param string $attribute
* @return string
*/
public function getAttributePlaceholder(string $attribute)
{
$placeholders = $this->attributePlaceholders();
return ($placeholders[$attribute]) ?? $this->getAttributeLabel($attribute);
}
Код: Выделить всё
/**
* @return array
*/
public function attributePlaceholders(): array
{
return [
'title' => 'Введите заголовок',
'shortText' => 'Краткий текст',
'text' => 'Полное содержание'
];
}
Было бы очень удобно
samdark
Администратор
Сообщения: 9489 Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:
Сообщение
samdark » 2018.02.12, 12:08
И как это потом использовать?
Auramel
Сообщения: 80 Зарегистрирован: 2017.11.17, 14:39
Откуда: Russia, Ufa
Контактная информация:
Сообщение
Auramel » 2018.02.12, 13:34
Код: Выделить всё
<form id="add-article" class="form" action="<?= Url::to(['add']) ?>" method="POST">
<div class="form__block">
<label class="form__label" for="title"><?= $model->getAttributeLabel('title')?></label>
<input id="title"
class="form__field"
name="title"
value="<?= $model->title?>"
placeholder="<?= $model->getAttributePlaceholder('title') ?>"
>
</div>
<div class="form__block">
<label class="form__label" for="shortText"><?= $model->getAttributeLabel('shortText')?></label>
<textarea id="shortText"
class="form__field"
name="shortText"
placeholder="<?= $model->getAttributePlaceholder('shortText') ?>"
rows="10"
><?= $model->shortText ?></textarea>
</div>
<div class="form__block">
<label class="form__label" for="text"><?= $model->getAttributeLabel('text')?></label>
<textarea id="text"
class="form__field"
name="text"
placeholder="<?= $model->getAttributePlaceholder('text') ?>"
rows="20"
><?= $model->text ?></textarea>
</div>
<div class="form__block align-text-xs-center">
<button class="form__button" type="submit"><?= $buttonText ?></button>
</div>
<input type="hidden" name="<?= Yii::$app->getRequest()->csrfParam?>" value="<?= Yii::$app->getRequest()->getCsrfToken() ?>">
</form>
вот пример из одной формы. Если же сильно заморочиться, можно и ActiveForm немного переписать, чтобы он автоматически placeholder делал, подобно attributeLabel'у
Auramel
Сообщения: 80 Зарегистрирован: 2017.11.17, 14:39
Откуда: Russia, Ufa
Контактная информация:
Сообщение
Auramel » 2018.02.12, 16:40
понятно. Спасибо за ответ