Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 如何在同一页上呈现窗体和表_Forms_Drupal - Fatal编程技术网

Forms 如何在同一页上呈现窗体和表

Forms 如何在同一页上呈现窗体和表,forms,drupal,Forms,Drupal,有人能帮我在同一页上呈现表单和表格吗?我相信这很容易,但想不出怎么做 这是hook_菜单: function ncbi_subsites_menu() { $items = array(); $items['admin/content/ncbi_subsites'] = array( 'title' => 'NCBI Subsites Module', 'description' => 'Inform

有人能帮我在同一页上呈现表单和表格吗?我相信这很容易,但想不出怎么做

这是hook_菜单:

 function ncbi_subsites_menu() {
        $items = array();

        $items['admin/content/ncbi_subsites'] = array(
            'title' => 'NCBI Subsites Module',
            'description' => 'Informs Drupal about NCBI subsites as defined by the Content Inventory database',
            'page callback' => 'ncbi_subsites_show_main_page',
            'access arguments' => array( 'administer site configuration' ),
            'type' => MENU_NORMAL_ITEM,
        );
        return $items;
}
以下是回调:

function ncbi_subsites_show_main_page() {
    $subsites = ncbi_subsites_get_subsites_from_inventory(); // fnc returns associative array from inventory, defined in include
    return ncbi_subsites_make_table( $subsites );
}
在回调中,我调用了一些助手函数,这些函数返回一个主题化的分页表


我想要的是桌子上方的一张小表格。我该怎么回答呢?

我知道这是很久以前发布的,但也许有人可以使用一个通用的更新答案。最清晰的方法是使用三个函数:一个用于页面回调,一个用于表单,一个用于表

function ncbi_subsites_show_main_page() {  
    $subsites = ncbi_subsites_get_subsites_from_inventory(); 
    $page = drupal_get_form('your_form');  
    $page .= ncbi_subsites_make_table( $subsites );  
    return $page;  
}
/**
 * Implements hook_form().
 */
function my_module_form($form, &$form_state) {
  //form fields
  return $form;
}

/**
 * Function for table.
 */
function my_module_table() {
  //Define $header
  //Define $rows
  return theme('table', array('header' => $header, 'rows' => $rows));
}

/**
 * Page callback function for /my_module as defined in hook_menu().
 */
function _my_module() {
  $page = drupal_render(drupal_get_form('my_module_form'));
  $page .= my_module_table();
  return $page;
}

这是一个完整的工作示例,用于在同一页面中显示表单和表:

<?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);
}

虽然此代码可以回答问题,但提供有关此代码回答问题的原因和/或方式的附加上下文可提高其长期价值。请记录代码以确保其能够被理解。也许您还可以删除注释掉的代码。