Подскажите, чем можно в джумле сделать форму подобную такой: http://miracletour.com/1192/Nepal_Butan.html (в самом низу страницы) Я уж накопал всяких скриптов. Просто в ШТМЛе могу сделать такую форму. Но из всего, что нашел под джумлу, как-то ничего не подходит Все, что нашел завязано на базу данных. Мне вообщем-то не надо хранить результаты заполнения этих форм. Заполнил - отправил и все. Joomla 1.5.22
Посмотри вот здесь http://www.joomla-master.com/lessons/joomla-components/81-chronoforms-example.html, может подойдет, а вид формы можно подогнать по своему вкусу.
Замечательно. Я пробовал Chronoforms, но как созадть динамическую табличную часть, как это сделано в примере по ссылке в моем первом сообщении? т.е. в заявке может быть один человек, а может быть n-человек. Пользователь сам добавляет нужное количество строк в таблицу на форме.
RS Forms PRO я смотрел. Но там создание формы завязано на заведение полей в базе данных. Если форма статическая, то все ок, но мне надо чтобы пользователь сам добавлял столько строк, сколько надо. Пока не догоняю как это реализовать Может есть какие уроки про RS Forms?
Часть формы в виде таблицы. Одна строка в этой таблице сделана. А остальные пользователь сам добавляет сколько надо. Как в примере, который я приводил в первом своем сообщении.
В Chronoforms, правда в админке, такая штука реализована. Там добавляешь поля в форму по мере редактирования формы, как раз то, что нужно. Смотреть как реализовано и потом уже прикручивать код в форму. Либо рыть документацию. jQuery
Скоммуниздено отсюда: <a onclick="addPerson(); return false;" href="#">Добавить человека</a> <a onclick="delPerson(); return false;" href="#">Удалить человека</a> Код (CODE): // глобальные метки // колличество персон var personCount=0; // добавляем отображение ранее введеных значений в динамические элементы window.onload = showLastValues; // отображает ранее заполненные поля персон и путей function showLastValues(){ var persons = document.getElementById("raPersons").value; var persVal = new Array(); if (persons != ''){ persons = persons.split('\n'); for (i=1; persons.length >= i; i++){ // добавлем персону addPerson(); persVal = persons[i-1].split(' | '); // добавляем значения полей для персоны document.getElementById("fio"+i).value = persVal[0]; document.getElementById("passport"+i).value = persVal[1]; document.getElementById("passport_valid_till"+i).value = persVal[2]; document.getElementById("birthday"+i).value = persVal[3]; document.getElementById("roomsize"+i).value = persVal[4]; } } // если нет никаких записей, то вставляем по одной пустой строке if (!personCount){ addPerson(); } } // добавляем персону function addPerson(){ // увеличиваем счетчик персон personCount++; var parent = document.getElementById('persons'); // создаем объединяющий DIV newPerson = document.createElement('div'); newPerson.id = 'person_'+personCount; newPerson.className = "person"; // создаем поля для новой персоны // создаем номерацию полей numP = document.createElement('p'); numP.className = "numb"; var numSpan = document.createElement('span'); var text = personCount+"."; var textNode = document.createTextNode(text); numSpan.appendChild(textNode); numP.appendChild(numSpan); //создаем ФИО fioP = document.createElement('p'); fioP.className = "name"; var fioLabel = document.createElement('label'); fioLabel.setAttribute("for","fio_"+personCount); var fioInput = document.createElement('input'); fioInput.type = "text"; fioInput.id = "fio"+personCount; fioInput.name = "fio"+personCount; fioInput.value = fioInput.value; fioLabel.appendChild(fioInput); fioP.appendChild(fioLabel); // создания поля паспотр pasportP = document.createElement('p'); pasportP.className = "pass"; var pasportLabel = document.createElement('label'); pasportLabel.setAttribute("for","pasport"+personCount); var pasportInput = document.createElement('input'); pasportInput.type = "text"; pasportInput.id = "passport"+personCount; pasportInput.name = "passport"+personCount; pasportInput.value = ""; pasportLabel.appendChild(pasportInput); pasportP.appendChild(pasportLabel); // создание поля дата рождения dateP = document.createElement('p'); dateP.className = "date"; var dateLabel = document.createElement('label'); dateLabel.setAttribute("for","birthday"+personCount); dateLabel.className = "indate"; var dateInput = document.createElement('input'); //dateInput.maxlength = "10"; dateInput.type = "text"; dateInput.id = "birthday"+personCount; dateInput.name = "birthday"+personCount; dateInput.setAttribute = ('onFocus','10'); dateInput.value = ""; dateInput.className = "inDate"; //кнопка для вызова календарика var personDateInput2 = document.createElement('input'); personDateInput2.type = "button"; personDateInput2.id = "trigger"+personCount; personDateInput2.value = "..."; personDateInput2.className = "calbut"; dateLabel.appendChild(dateInput); dateLabel.appendChild(personDateInput2); dateP.appendChild(dateLabel); // создания поля паспотр даты окончания pasportDo = document.createElement('p'); pasportDo.className = "passd"; var pasportdLabel = document.createElement('label'); pasportdLabel.setAttribute("for","passport_valid_tillt"+personCount); pasportdLabel.className = "indate"; var pasportdInput = document.createElement('input'); pasportdInput.type = "text"; pasportdInput.id = "passport_valid_till"+personCount; pasportdInput.name = "passport_valid_till"+personCount; pasportdInput.value = ""; //кнопка для вызова календарика var personDateInput3 = document.createElement('input'); personDateInput3.type = "button"; personDateInput3.id = "trigger2"+personCount; personDateInput3.value = "..."; personDateInput3.className = "calbut"; pasportdLabel.appendChild(pasportdInput); pasportdLabel.appendChild(personDateInput3); pasportDo.appendChild(pasportdLabel); // создания поля размещения select roomsizeo = document.createElement('p'); roomsizeo.className = "room"; var roomsizeLabel = document.createElement('label'); roomsizeLabel.className = "last"; roomsizeLabel.setAttribute("for","roomsize"+personCount); var roomsizeSelect = document.createElement('select'); roomsizeSelect.id = "roomsize"+personCount; roomsizeSelect.name = "roomsize"+personCount; var newOpt = document.createElement('OPTION'); newOpt.value = 'SNGL'; newOpt.innerHTML += 'SNGL'; roomsizeSelect.appendChild(newOpt); var newOpt1 = document.createElement('OPTION'); newOpt1.value = '1/2 DBL'; newOpt1.innerHTML += '1/2 DBL'; roomsizeSelect.appendChild(newOpt1); var newOpt2 = document.createElement('OPTION'); newOpt2.value = '1/3 TRPL'; newOpt2.innerHTML += '1/3 TRPL'; roomsizeSelect.appendChild(newOpt2); roomsizeLabel.appendChild(roomsizeSelect); roomsizeo.appendChild(roomsizeLabel); // собираем все элементы в кучу newPerson.appendChild(numP); newPerson.appendChild(fioP); newPerson.appendChild(pasportP); newPerson.appendChild(pasportDo); newPerson.appendChild(dateP); newPerson.appendChild(roomsizeo); parent.appendChild(newPerson); Calendar.setup( { inputField : "birthday"+personCount, // ID of the input field ifFormat : "%d.%m.%Y", // the date format button : "trigger"+personCount // ID of the button } ); Calendar.setup( { inputField : "passport_valid_till"+personCount, // ID of the input field ifFormat : "%d.%m.%Y", // the date format button : "trigger2"+personCount // ID of the button } ); } // собираем информацию из динамическии созданных полей // и складываем информацию в одно поле function getDataForSubmit(){ var persons = new Array(); if (personCount <= 0){ alert('Довьте хотябы одну персону'); return false; } // 1. собираем информацию для персон for (i=1; i<=personCount; i++){ if ((document.getElementById("fio"+i).value == '') || (document.getElementById("passport"+i).value == '') || (document.getElementById("passport_valid_till"+i).value == '') || (document.getElementById("birthday"+i).value == '')){ alert ('Данные о туристе должны быть заполнены '); return false; }else{ persons[i-1]=document.getElementById("fio"+i).value+" | "+ document.getElementById("passport"+i).value+" | "+ document.getElementById("passport_valid_till"+i).value+" | "+ document.getElementById("birthday"+i).value+" | "+ document.getElementById("roomsize"+i).value; } } // передаем собранные даные в одно поле document.getElementById("raPersons").value = persons.join("\n"); return true; } function delPerson() { if (personCount >= 2){ //var oneChild; var mainObj = document.getElementById("persons"); oneChild = mainObj.childNodes[personCount]; mainObj.removeChild(oneChild); personCount = personCount-1; } }