Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть нужда реализовать механизм заполнения договоров на основе типового шаблона.
Я вижу это так.
В БД делаю таблицу Вид_Договоров. Каждый вид имеет шаблон с текстовым полем: наполнение и спец ключи для вставки параметров.
Например: Настоящий договор заключен между [Org name] далее Продавец и [Partner name] далее Покупатель. Сумма договора: [text_area 1]. Срок договора [combo_box 1]. Примечание [text_area 2]... и т.д.
При создании нового договора выбирается вид договора и читается из БД соответствующий шаблон. Шаблон парсится на текст и параметры. Текст отображается пользователю без возможности редактирования, параметры выбираются-заполняются пользователем. Дальше договор на печать и в БД.
Буду рад советам /критике /ссылкам на что-то похожее.
Не в сети
Ваша схема вполне логична, не вижу здесь никаких сложностей. Я бы сделал простой шаблонизатор, наподобие описанного вами — на входе текст с [заглушками], каждая заглушка задаёт имя поля и его тип (select, text, email и пр.) + какие-то дополнительные поля по необходимости. На выходе получается HTML-форма, с текстом и вставленными внутри input’ами, select’ами и прочим. Шаблон хранить можно хоть в текстовом файле.
При заполнении формы в БД сохраняются только поля, можно это делать через serialize(), можно через json_encode(). Имя поля = значение. Здесь шаблонизатор вместо подстановки вместо заглушек HTML-кода подставляет текстовые значения. В итоге получается форма.
Единственное, что вам надо продумать — как совмещать старые введённые формы с новыми, то есть если у вас изменяется шаблон договора (это 100% будет, рано или поздно). Я бы сделал так, что при изменении шаблона не редактируется текущий, а создается его копия. Копии можно помечать в БД каким-то единым именем (типа «то_некое_соглашение»), которое не меняется для копий, и по которому можно найти последнюю (новую) версию данного шаблона для вывода для новых форм. А старые формы выводить старыми шаблонами.
Можно вместо этого держать всегда только единственную версию шаблона и делать пропущенные поля пустыми, но это очень хрупкая система и почти наверняка её придётся менять, что в процессе будет сделать сложно.
Не в сети
Я бы сделал так:
Первая таблиц: ConctractTemplates:
id, contract_name, contract_template
Вторая таблица: ContractsData:
id, contract_id, contract_var, contract_val, contract_date
В первой таблице - шаблоны договоров, во второй таблице - сохраненные данные.
Возможно, у вас так и есть. А если появится новый вариант договора, то в первую таблицу его записать как новый договор.
Не в сети
Страницы 1