@alekssamos
Программист любитель

Как избежать дублирования кода при создании полей форм?

Можно ли избежать дублирования кода при выводе форм?
Например, для вывода меню я бы сделал так:
<div class="nav" role="navigation">
			<ul>
<?foreach(array(
  'index' => 'Главная',
  'services' => 'Услуги',
  'portfolio' => 'Портфолио',
  'contacts' => 'Контакты'
) as $href=>$txt):?>
<li><a href="<?=$href?>">
					<?=$txt?>
				</a></li>
<?endforeach?>
</ul>
		</div>

Согласитесь, это лучше, чем каждый раз писать <li><a target ... class ...></a></li>
_________________
Теперь понадобилось мне вывести форму с большим количеством полей.
С обработкой проблем нет, циклы и функции для массивов могут помочь.
А с выводом?
Разметка будет примерно такая:
<form method="POST" action="">
<div class="field">
<label>
<input type="text" name="aaa" <?=check_validation('aaa');?> value="<?=myfilter($_POST['aaa']);?>">
</label>
</div>
<!-- несколько полей такого типа -->

<div class="field">
<label>
<textarea name="ggg" <?=check_validation('ggg');?>><?=myfilter($_POST['ggg']);?></textarea>
</label>
</div>
<!-- два - три таких -->
<div class="field">
<label>
<select name="kkk" <?=check_validation('kkk');?>>
<option <?=isSelected('kkk', '1');?> value="1">qwe</option>
<option <?=isSelected('kkk', '2');?> value="2">asd</option>
</select>
</label>
<!-- такие,
ну и несколько checkbox и radio, где is checked проверяется. -->
</div>
</form>


Как обычно делают, так вручную все поля прописывают? Или все же нет?
Задумался над созданием своего класса FormBuilder, типа передаем массивы с тегами, атрибутами, значениями, а в шаблоне циклом выводить.
Как лучше реализовать? Что посоветуете?
  • Вопрос задан
  • 192 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Yan-s
Это не проблема прогнать подходящий формат с данными элементов форм через foreach и сгенерировать так всю форму. Просто очень часто формы и их элементы должны быть заверстаны и кастомизированы не одинаково. И даже если сперва вам это не понадобится, рано или поздно такая потребность сделает всю вашу абстракцию бесполезной.

Наверное лучшее что можно сделать в плане организации кода, это применять компоненты на фронте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы