Заполнение договора. При заполнении определенных полей формируется документ, эти поля занимают свои места.[РЕШЕНО]

Главные вкладки

Аватар пользователя lionman lionman 16 апреля 2013 в 12:51

Здравствуйте уважаемые посетители сайта drupal.ru Делаю курсовую работу на drupal. Управление персоналом на предприятии. Создал тип материала Сотрудники - у них определенные анкетные поля. Далее нужно создать тип докуметна Трудовой договор, Заявление, Документ. В данных типах сожержимого нужно через Entity Reference выбрать сотрудника. А уже на основании анкетных данных сотрудника нужно сформировать текст трудового договора. Текст подготовлен, нужно только чтобы автоматически поля из анкеты добавлялись в определенные места в тексте. Как это можно решить? Заранее спасибо за ответ.

Комментарии

Аватар пользователя aa2007 aa2007 16 апреля 2013 в 13:07

темизацией страницы. или через модули для работы с pdf. я как-то через них делал генерацию счетов для оплаты заказа.

Аватар пользователя Andruxa Andruxa 16 апреля 2013 в 13:26

Договор - отдельный тип материала, текст разбить на поля в соответствии со вставляемыми в него полями юзера

потом, если есть навыки php - собрать из имеющихся кусков полный текст договора, например в hook_node_view

если таковые отсутствуют - сделать это вьюсом

Аватар пользователя lionman lionman 16 апреля 2013 в 14:52

Так можно теперь поподробней. К сожалению друпал изучаю где то месяц от силы. Допустим вот такой кусок текста договора

1.1. Работник __________________принимается на должность ________________________ для выполнения следующих трудовых обязанностей............

Уже создал тип материала Сотрудник. Здесь допустим есть поле таксономии должность, и другие поля анкеты, такие как дата рождения, и т.д. ФИО сотрудника является заголовок.

Далее тим материала Трудовой договор. Первое поле Entity Reference где выбирается нужный сотрудник из типа материалов Сотрудники. Допустим полей больше нету. При кнопке сохранить как сделать чтобы формировалась статья или документ pdf или doc который прикрепляется к созданому материалу. С указанным выше текстом но вместо пустых мест __________ вставлялась информация из материала с выбранным сотрудником.

Аватар пользователя Andruxa Andruxa 16 апреля 2013 в 17:21

в типе содержимого "договор" добавляете поля:
text1: "1.1. Работник"
text2: "принимается на должность"
text3: "для выполнения следующих трудовых обязанностей............"

потом склеиваете значения полей договора со значениями полей сотрудника в необходимом порядке

можно упростить - не резать текст договора, а вместо "_________" вписать какой-нибудь текст, который потом явно не встретится в текст договора, что-то вроде "field_user_fio" и т.п.
потом в hook_node_view делаете замену: $body = str_replace('field_user_fio', $field_user_fio, $body);
названия переменных от балды, будут скорее всего другими

Аватар пользователя lionman lionman 17 апреля 2013 в 7:50

Т.е. при втором варианте, делаем одно текстовое поле. Где введен весь текст ну вместо пробелов стоит переменная, которая берет данные из анкеты выбранного сотрудника?
Да второй вариант более привлекательный.

Аватар пользователя lionman lionman 23 апреля 2013 в 14:38

"Andruxa" wrote:
можно упростить - не резать текст договора, а вместо "_________" вписать какой-нибудь текст, который потом явно не встретится в текст договора, что-то вроде "field_user_fio" и т.п.
потом в hook_node_view делаете замену: $body = str_replace('field_user_fio', $field_user_fio, $body);
названия переменных от балды, будут скорее всего другими

ВОПРОС. А где прописывать этот хук, в каком файле. А то че то никак не могу разобраться

Аватар пользователя lionman lionman 23 апреля 2013 в 15:11

Ну своего модуля то нету. Чето я совсем запутался. Извиняюсь конечно за незнание. Просто только начинаю. Но у меня просто тип содержимого. В нем одно поле field_vstavka в ввожу сюда допустим 123
Второе поле body, В котором предустановленный текст - Заменить текст field_zamena

Нажимаю сохранить, и статья имеет вид

Заменить текст значение 123

Или так не реально сделать. Как то по другому.

Аватар пользователя aa2007 aa2007 23 апреля 2013 в 16:02

"lionman" wrote:
Или так не реально сделать. Как то по другому.

Вам же уже во втором посте ответили:
"Andruxa" wrote:
потом, если есть навыки php ...

если таковые отсутствуют - сделать это вьюсом

Аватар пользователя Andruxa Andruxa 23 апреля 2013 в 18:38

на самом деле, написать свой модуль - как 2 байта обоссать

потребуется создать 2 файла - modulename.info и modulename.module
(кодировка: utf-8 без BOM)
сложить их в папку modulename и залить на хостинг в папку DRUPAL_ROOT/sites/all/modules

хорошим тоном считается складывать кастомные модули в папку custom там же, т.е. полный путь к файлам модуля получится DRUPAL_ROOT/sites/all/modules/custom/modulename

в modulename.module можно задействовать hook_node_view():

<?php
modulename_node_view
($node$view_mode$langcode) {
// во-первых, надо определиться с тем, какая нода показывается ($node),
// в каком виде ($view_mode)
// и кому:
global $user;
if ( 
// тут надо проверить Snode->type или $node->nid, $view_mode и $user->uid
$user user_load($user->uid); // вряд ли сразу $user будет содержать значения нужных полей
...
?>
Аватар пользователя lionman lionman 23 апреля 2013 в 23:43

Да похоже придется делать вьюхой. Вроде все и понятно, что нужно делать модуль. Но как этот модуль задействовать при создании трудового договора, как вообще чтобы он вообще создавал договор и сохранял их в ноду. В общем похоже знаний вообще не хватает. Просто вопросов еще больше появляется. Но вьюхой делать вообще не нравиться, слишком неудобно. Вариант с заменой переменных в тексте был бы оптимальным. Где то читал что можно заранее составить документ RTF где будут переменные, которые как то можно заменить.

Аватар пользователя lionman lionman 24 апреля 2013 в 9:25

Шикарный ответ. Спасибо за помощь. Если может кто ответит можно ли использовать токены, в теле поля body?