Me presento

Events happening in the community are now at Drupal community events on www.drupal.org.
mariano86's picture

Hola a Todos:
Me llamo Mariano, soy de Rosario. Empecé a trabajar con Drupal hace un par de meses especialmente en todo lo que es programación con php.
Lo que más gusto me da de haber encontrado este grupo es que no tengo que escribir los post en ingles.

Le planteo un problema que tengo. Desde ya cualquier ayuda que necesiten y pueda responderla cuenten con migo.

Estoy desarrollando un modulo que funcionaria de forma parecida al nodeLimit, su función es restringir la cantidad de nodos que un determinado tipo de rol puede subir de cada content type.
El módulo tiene dos secciones para configurar estas cantidades. Una es admin/nodeRestrict/Settings y la otra es una sección en cada pagina de edición de los content types disponibles.
El problema lo tengo en este último caso. Para agregar los campos de modificacion de limites, utilizo el hook_form_alter() de esta forma

<?php
function nodeRestrict_form_alter($form_id, &$form)
{
   if (
$form_id == 'node_type_form')
  {
   
$role_perms_content_types = <em>nodeRestrict_create_perms_content_types($form['#node_type']->type);
   
$nodeRestrictForm = array();
   
$count = sizeof($role_perms_content_types);

   
$nodeRestrictForm['nodeRestrict'] = array(
     
'#type' => 'fieldset',
     
'#title' => t('Node Restrict Upload'),
     
'#description' => $count?t('Avaiable roles for this content type'):t('Only the admin user can create this content type. No limits to upload can be defined.'),
     
'#tree' => FALSE,
      );
     
      foreach(
$role_perms_content_types as $role_perm_content_type)
     {
     
$key = 'nodeRestrict</em>' . $role_perm_content_type['contentTypeType'] . '_' $role_perm_content_type['roleID'];
     
$nodeRestrictForm['nodeRestrict'][$key] = array(
       
'#title' => t($role_perm_content_type['roleName']),
       
'#type' => 'textfield',
       
'#size' => 15,
       
'#maxlength' => 4,
       
'#default_value' => variable_get($key, 0),
       
'#description' => t('Enter the maximum number of nodes this role can create. 0 = unlimited.'),);
      }
     
$form['workflow']['nodeRestrict'] = $nodeRestrictForm;
  }  
}
?>

El problema es que cuando presiono el botón enviar, se guardan todas las demás opciones, como la de los módulos comentarios, o node, pero no las de mi modulo.

¿A alguien le ha pasado? En otros lugares he encontrado que se debe usar una función cuando se presione el botón enviar que ejecute las sentencias de variable_set(), pero desde Drupal 5 esto ya no se usa más porque lo hace de forma automática, solo que debo tener algún problema con la forma en que está estructurado el formulario, o los nombres de los campos.

Bueno, desde ya les agradezco.
Saludos
Mariano D'Agostino

Comments

Bienvenido al grupo drupalero Mariano!

Rosamunda's picture

Lástima que estando en Rosario no podés participar de las reuniones que hacemos en Baires...
Estaremos comunicados por este medio pues! :)
Lamentablemente no te sé dar una respuesta al problema que planteás, pero no quería dejar de saludarte y darte la bienvenida al grupete!

Saludos!
Rosamunda

Gracias

mariano86's picture

Bueno pasó como un mes y medio de este "mi único" post, quería conterles que todavia ando por acá.
Encontré la solución hace unas semanas. finalmente opte por la opcion que yo indicaba como incorrecta.
Con respecto a las reuiniones, quien sabe, rosario tan poco estuvo tan lejos.
Saludos
Mariano

Les dejo la solución por si alguno le sirve.

<?php
//Agregando esto a la  funcion nodeRestrict_form_alter()
...    $form['nodeRestrict'][$key]['#validate'] = array('<em>nodeRestrict_form_alter_validate' => array($key));




function
_nodeRestrict_form_alter_validate($elements, $key)
{
 
$error = FALSE;
  foreach(
$elements['#post'] as $form_value => $value)
{
   if(
substr($form_value, 0,13) == 'nodeRestrict</em>')
    {
     
      if (!
is_numeric($value) )
      {
       
$error = TRUE;
       
form_set_error($form_value, t('The limit of nodes to upload must be a number.'));
      }
    }
  }
 
 
if(
$error == FALSE)
  {
    foreach(
$elements['#post'] as $form_value => $value)
    {
      if(
substr($form_value, 0,13) == 'nodeRestrict_')
      {
       
variable_set($form_value, $value);
       }
     }
  }

}
?>

Argentina

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: