[eside-ghost] Formulario de alta para content type Drupal 7

Eneko chan enekochan en gmail.com
Dom Feb 19 22:59:42 CET 2012


Hola!

Acabo de empezar con Drupal así que es posible que lo que voy a preguntar
sea una tontería, pero es que llevo unos cuantos días que no consigo
descubrir como sacar un formulario de alta para un content type a usuarios
anónimos. Hasta ahora solo he sido capaz usando el típico "Add content" de
la consola administrativa pero no es lo que busco.

Estoy haciendo un módulo que mediante hook_menu coge unas URL determinadas
(de la forma
http://midominio.com/mipathespecial/parametro1/parametro2/parametro3) y en
función de esta se llama a una función que busca en la base de datos los
nodos que cumplen ciertas condiciones. Si existen se muestran al usuario
(de momento en una lista de enlaces), y si no existe ninguno quiero mostrar
un formulario para dar de alta un nuevo nodo de mi content type pero que
algunos de los fields ya estén rellenados con los datos que venían en la
URL.

De momento tengo algo más o menos así (he quitado partes de código que no
vienen a cuento para simplificar al máximo):

function current_posts_menu() {
  $items = array();
  $texto = 'mipathespecial';
  $items[$texto] = array(
    'title' => 'Mis URLs',
    'page callback' => '_current_posts_procesar_url',
    'page arguments' => array(0), // Pasamos los argumentos desde el root
argument
    'access arguments' => array('access current_posts content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function _current_posts_procesar_url($parametro1 = '', $parametro2 = '',
$parametro3 = '') {
  $query = db_select('node', 'n');
  .....aqui se buscan los nodos....
  $result = $query->execute();
  $output = '';

  //Array to contain items for the page to render.
  $items = array();
  //Iterate over the resultset and format as links.
  foreach ($result as $row) {
    $items[] = array(
    'data' => l($row->title, 'node/' . $row->nid),
    );
  }

  foreach ($result as $row) {
    node_view(node_load($row->nid));
  }

  if (empty($items)) { //No content
    $page_array['current_posts_arguments'] = array(
      //Title serves as page subtitle
      '#title' => t('No conocemos ninguno.'),
      '#markup' => t('No posts available.') . ' Parametro1: ' . $parametro1
. ' Parametro2: ' . $parametro2 .' Parametro3: ' . $parametro3,
    );
    return $page_array;
  }
  else {
    $page_array['current_posts_arguments'] = array(
      '#title' => t('Conocemos estos:'),
      '#items' => $items,
      //Theme hook with suggestion.
      '#theme' => 'item_list__current_posts',
    );
    return $page_array;
  }
}

No se si el formulario lo puedo meter de alguna forma dentro de un fichero
del theme (por ejemplo micontenttype--form.tpl.php o algo así) para poder
luego configurarlo con CSS y todo eso, pero tampoco me queda claro como
hacer que se cargue ese .tpl.php donde yo quiera. La verdad es que todavía
estoy muy verde con Drupal y se nota que la curva de aprendizaje es algo
lenta :(

Si no recuerdo mal en esta lista hay más de uno que controla Drupal, a ver
si me podéis echar una mano. Muchas gracias!
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://listas.deusto.es/mailman/private/eside-ghost/attachments/20120219/cb551984/attachment.html>


Más información sobre la lista de distribución eside-ghost