¿Cómo puedo imprimir los resultados de envío de un formulario en la misma página del formulario en sí?

Relevantes hook_menu:

    $items['admin/content/ncbi_subsites/paths'] = array(
        'title' => 'Paths',
        'description' => 'Paths for a particular subsite',
        'page callback' => 'ncbi_subsites_show_path_page',
        'access arguments' => array( 'administer site configuration' ),
        'type' => MENU_LOCAL_TASK,
    );

página de devolución de llamada:

function ncbi_subsites_show_path_page() {
  $f = drupal_get_form('_ncbi_subsites_show_paths_form');
  return $f;
}

Edificio de la forma de la función:

   function _ncbi_subsites_show_paths_form() {
      //bunch of code here

      $form['subsite'] = array(
        '#title' => t('Subsites'),
        '#type' => 'select',
        '#description' => 'Choose a subsite to get its paths',
        '#default_value' => 'Choose a subsite',
        '#options'=> $tmp,
      );

      $form['showthem'] = array(
        '#type' => 'submit',
        '#value' => 'Show paths',
        '#submit' => array( 'ncbi_subsites_show_paths_submit'),    
      );

      return $form;
    }

Función de envío (omitido validar la función de la brevedad)

function ncbi_subsites_show_paths_submit( &$form, &$form_state ) {
  //dpm ( $form_state );
  $subsite_name = $form_state['values']['subsite'];
  $subsite = new Subsite( $subsite_name ); //y own class that I use internally in this module
  $paths = $subsite->normalized_paths;

  //build list
  $list = theme_item_list( $paths );
}

Si yo impresión de que $lista variable, es exactamente lo que quiero, pero no estoy seguro de cómo entrar en la página con el formulario original de la página construido a partir de ‘ncbi_subsites_show_path_page’. Cualquier ayuda se agradece mucho!

OriginalEl autor Aaron | 2010-04-28

5 Comentarios

  1. 7

    La clave de la información en el enlace Nikit publicado es de $form_state[‘reconstruir’]. Aquí un poco de info de Drupal 7 documentación que creo que se aplica el mismo para Drupal 6…

    $form_state[‘reconstruir’]: Normalmente, después de todo
    el procesamiento del formulario es completado y
    presentar los controladores de ran, una forma es
    considera hacer y
    drupal_redirect_form() redirigirá
    el usuario a una nueva página con un GET
    petición (un navegador de actualización no
    re-enviar el formulario). Sin embargo, si
    ‘reconstruir’ ha sido establecido a TRUE, un
    nueva copia del formulario de inmediato
    construido y enviado al navegador; en lugar
    de una redirección. Esto se utiliza para
    multi-paso de formas, tales como los asistentes y
    la confirmación de las formas. También, si un formulario
    la validación del controlador se ha configurado ‘reconstruir’
    a la VERDAD y un error de validación
    se produjo, entonces la forma es reconstruido
    antes de ser devuelto, permitiendo formulario
    los elementos a ser modificadas, según proceda
    para el particular de error de validación.

    Tengo trabajo, gracias a este consejo. Sin embargo,la única manera de que yo pueda «pasar» los datos de la función de envío a la función que procesa el formulario es mediante el establecimiento de variables globales en la función de envío, entonces la reconstrucción de la forma, y la comprobación de si los varaibles se establecen. Hay otra manera de hacer esto? No me gusta variables globales.
    También en el ejemplo de ese enlace, se puede ver $form_state[‘almacenamiento’] que se utiliza. Yo creo que [‘almacenamiento’] es un lugar dedicado donde se puede almacenar de forma segura los datos entre las validaciones, se somete, etc.
    El problema es que no tengo acceso a $form_state de la página en función de controlador. Me gustaría guardar algo en la matriz de almacenamiento de $form_state, pero necesito que el valor en el controlador de la página, no el edificio de la forma de la función…
    Drupal va a pasar en el $form_state variable en el edificio de la forma de la función si la pones en la definición de la función — nunca será pasado a la página de devolución de llamada, como que está fuera de la forma de la API de alcance. En el interior de su forma generador de función puede cambiar según el contenido de la forma estado y agregar elementos adicionales de tipo ‘marcado’ que contiene los resultados que desea mostrar.

    OriginalEl autor

  2. 1

    Este es un ejemplo de una página y una lista en la misma página

    <?php
    /*
    * Implements hook_mennu()
    */
    function test_menu() {
    $items['test'] = array(
    'title'             => t('Test'),
    'page callback'     => 'test_search_page',
    'access callback'   => True,
    );
    return $items;
    }
    function test_search_page(){
    $form = drupal_get_form('test_search_form');
    return $form;
    }
    function test_search_form($form, &$form_state){
    $header = array(t('id'), t('name'), t('firstname'));
    $rows = Null;
    $form['name'] = array(
    '#type'             => 'textfield',
    '#title'            => t('Name'),
    '#required'         => True,
    '#default_value'    => isset($_GET['name']) ? $_GET['name'] : Null
    );
    $form['submit'] = array(
    '#type'           => 'submit',
    '#value'          => t('submit'),
    );
    if (isset($_GET['name'])){
    $rows = get_data();
    }
    $form['table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#empty' => t('Aucun résultat.')
    );
    $form['pager'] = array('#markup' => theme('pager'));
    /*
    if (isset($form_state['table'])) {
    $form['table']  = $form_state['table'];
    }
    $form['pager'] = array('#markup' => theme('pager'));
    */
    return $form;
    }
    function test_search_form_submit($form, &$form_state){
    $form_state['redirect'] = array(
    //$path
    'test',
    //$options
    array('query' => array('name' => $form_state['values']['name'])),
    //$http_response_code
    302,
    );
    }
    //$header = array(t('id'), t('name'), t('firstname'));
    function get_data(){
    $data =  array(
    0   => array(
    'id' => '0',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    1   => array(
    'id' => '1',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    2   => array(
    'id' => '2',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    3   => array(
    'id' => '3',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    4   => array(
    'id' => '4',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    5   => array(
    'id' => '5',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    6   => array(
    'id' => '6',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    7   => array(
    'id' => '7',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    8   => array(
    'id' => '8',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    9   => array(
    'id' => '9',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    10   => array(
    'id' => '10',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    ),
    11   => array(
    'id' => '11',
    'name'  => 'pokpokpok',
    'firstname' => 'pokpokpok',
    )
    );
    $paging = pager_array_splice($data, 2);
    return $paging;
    }
    /*
    $header = array(t('id'), t('name'), t('firstname'));
    $form_state['table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $paging,
    '#empty' => t('Aucun r?sultat.')
    );
    $form_state['rebuild'] = True;*/
    function pager_array_splice($data, $limit = 9, $element = 0) {
    global $pager_page_array, $pager_total, $pager_total_items;
    $page = isset($_GET['page']) ? $_GET['page'] : '';
    //Convert comma-separated $page to an array, used by other functions.
    $pager_page_array = explode(',', $page);
    //We calculate the total of pages as ceil(items /limit).
    $pager_total_items[$element] = count($data);
    $pager_total[$element] = ceil($pager_total_items[$element] / $limit);
    $pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1));
    return array_slice($data, $pager_page_array[$element] * $limit, $limit, TRUE);
    }

    OriginalEl autor billyJoe

  3. 0

    Drupal6 nodo.módulo y dblog.módulo de hacer esto por admin/content/node y admin/informes/dblog proporcionando una página de devolución de llamada que incluye la representación de la forma en su salida.

    modules/dblog/dblog.admin.inc
    dblog_overview()
    modules/node/node.admin.inc
    node_admin_nodes()

    En forma de presentar, actualizado filtro de configuración se almacena en $_SESSION.

    En la página de devolución de llamada se hace de los resultados basados en la configuración de filtro almacenado en $_SESSION.

    $_SESSION es sólo otro mundial aquí (aunque sea un persistente).

    OriginalEl autor Chris Burgess

  4. 0

    Para Drupal7 me parece que si usas $form_state['rebuild'], a continuación, las variables de formulario puede ser la mejor forma de acceder desde el PHP super-variable global $_POST (o $_REQUEST). Sin embargo, si utiliza $form_state['redirect'], la solución con $_SESSION es mejor (en lugar de utilizar $_GET o $_REQUEST).

    Me parece que este tema bastante complicado incluso para los expertos. Tal vez Drupal tiene algo más de forma fácil e intuitiva que no sabemos.

    Aunque ¿cómo puedo mostrar estos valores en mi página?

    OriginalEl autor dashohoxha

Dejar respuesta

Please enter your comment!
Please enter your name here