Espero les ayude a generar campos de forma dinamica, despues agregare un javascript que valide de forma dinamica los campos generados, para solicitar los campos indispensables.
Código PHP:
<script>
/*************** Comienza Agregar 4 Campos Dinamicos ************************/
camposmax=4;
var numero = 0;
var fn = 0;
var cont = 0;
limit=camposmax-1;
// Funciones comunes
c= function (tag) { // Crea un elemento
return document.createElement(tag);
}
d = function (id) { // Retorna un elemento en base al id
return document.getElementById(id);
}
e = function (evt) { // Retorna el evento
return (!evt) ? event : evt;
}
f = function (evt) { // Retorna el objeto que genera el evento
return evt.srcElement ? evt.srcElement : evt.target;
}
function addField() {
if(cont == limit){
document.getElementById('addPest').style.display="none";
}
cont++;
container = d('files');
span = c('DIV');
span.className = 'cssPesta';
span.id = 'file' + (++numero);
divclo = c('DIV');
divclo.align ="right";
imgclo = c('IMG');
imgclo.name = span.id;
imgclo.src = 'images/fileclose.png';
imgclo.onclick = removeField;
imgclo.height = '15';
imgclo.alt = 'x';
imgclo.className = 'hand';
divclo.appendChild(imgclo);
divord = c('DIV');
divord.className = 'pesTit';
divord.innerHTML ="Orden: ";
orden = c('INPUT');
orden.name = 'pestania['+(++fn)+'][orden]';
orden.type = 'text';
orden.size = '1';
divord.appendChild(orden);
divnom = c('DIV');
divnom.className = 'pesTit';
divnom.innerHTML ="Nombre: ";
nombre = c('INPUT');
nombre.name = 'pestania['+(fn)+'][nombre]';
nombre.type = 'text';
nombre.size = '26';
divnom.appendChild(nombre);
divtit = c('DIV');
divtit.className = 'pesTit';
divtit.innerHTML ="Titulo: ";
titulo = c('INPUT');
titulo.name = 'pestania['+(fn)+'][titulo]';
titulo.type = 'text';
titulo.size = '26';
divtit.appendChild(titulo);
divcon = c('DIV');
divcon.className = 'pesTit';
divcon.innerHTML ="Contenido: ";
contenido = c('textarea');
contenido.name = 'pestania['+(fn)+'][contenido]';
contenido.cols = '34';
contenido.rows = '8';
contenido.className = 'tinymce';
divcon.appendChild(contenido);
span.appendChild(divclo);
span.appendChild(divord);
span.appendChild(divnom);
span.appendChild(divtit);
span.appendChild(divcon);
container.appendChild(span);
}
removeField = function (evt) {
cont--;
if(cont == limit){
document.getElementById('addPest').style.display="block";
}
lnk = f(e(evt));
span = d(lnk.name);
span.parentNode.removeChild(span);
}
/*************** Termina Agregar 4 Campos Dinamicos ************************/
</script>
<style>
.pesTit{
height:30px;
color:#666;
font-size:12px;
font-style:italic;
}
.cssPesta{
height:290px;
border-bottom:2px #999 dashed;
margin-bottom:15px;
margin-top:15px;
padding-left:52px;
}
</style>
<p> </p>
<form method="post" name="formUsr">
<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="35" colspan="2" class="menuDivider"><strong>Contenido</strong>
</td>
</tr>
<tr>
<td width="85" height="35"> Nombre:</td>
<td width="265"><input type="text" name="contenido[nombre]" id="contenido_nombre" /></td>
</tr>
<tr>
<td height="35"> Etiqueta:</td>
<td><input type="text" name="contenido[etiqueta]" id="contenido_etiqueta" /></td>
</tr>
<tr>
<td height="60" valign="top"> Descripción:</td>
<td valign="top"><textarea name="contenido[descripcion]" id="contenido_descripcion" cols="30" rows="3"></textarea></td>
</tr>
<tr>
<td height="20" valign="top"> </td>
<td valign="top"> </td>
</tr>
<tr>
<td height="60" valign="top"> Pie Legal:</td>
<td valign="top"><textarea name="contenido[legal]" id="contenido_legal" cols="30" rows="3"></textarea></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="30" valign="top"> </td>
<td align="right" valign="bottom">
<!-- Este boton es el que hace que se agreguen los campos de forma dinamica -->
<a href="JavaScript:;" id="addPest" onclick="JavaScript:addField();" accesskey="5" class="main_link">Añadir Pestaña</a>
</td>
</tr>
<tr>
<td colspan="2" valign="top">
<!-- Aqui se cargan los campos dinamicos --!>
<div id="files"></div>
</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td align="right">
<input type="reset" name="btnLimpiar" value="Limpiar" id="btnLimpiar" />
<input type="submit" name="btnSave" value="Guardar Contenido" id="btnSave" /></td>
</tr>
</table>
<p> </p>
</form>
Aclaro no todo el código es mio, yo solo adecue demasiadas ideas que he visto por toda la web.