文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

drupal创建拖动排序表格的方法

2022-06-12 02:22

关注

Drupal中,有许多用户界面采用了拖动排序的功能。在排序的界面上,拖动排序是一种比较友好的形式。

下面是一个例子。

1. 在hook_menu里定义一个menu


复制代码代码如下://栏目下,节点排序界面,可以拖动行来排序 $items['admin/nodeorder_taxonomy/term/%taxonomy_term/nodeorder'] = array ( 'title' => '节点排序', 'page callback' => 'drupal_get_form', 'page arguments' => array('nodeorder_taxonomy_term_nodeorder_form',3), 'access callback' => '_nt_node_order_right', 'access arguments' => array(3), 'type' => MENU_LOCAL_TASK, );

2.在hook_theme里定义表单的theme方法


复制代码代码如下:function my_module_theme() {

return array( 'nodeorder_taxonomy_term_nodeorder_form' => array( 'render element' => 'form', ), );

}

3.定义表单。表单的定义与一般表单基本一样。这里用$form['nodes']存储了表格里需要的数据,用$form['nodes'][$count]表示一行。但是对于tabledrag来说,这不是必须的。


复制代码代码如下:function nodeorder_taxonomy_term_nodeorder_form(&$form,&$form_state,$term) {

$tid=$term->tid; $query=db_select('node_term_order','nto')->extend('PagerDefault')->limit(20);

$query->join('node','n','nto.nid = n.nid');

$query->fields('n',array('nid','title','created')) ->fields('nto',array('tid','node_order')) ->condition('nto.tid',$tid) ->condition('sticky_order',0,'<=') ->orderBy('sticky_order','desc') ->orderBy('nto.node_order', 'desc');

$result=$query->execute();

$form['term_name']=array("#markup" => $term->name);

$form['nodes']['#tree']=true;

$form['nodes']['#theme'] = 'theme_nodeorder_taxonomy_term_nodeorder_form';

$delta=20*5; $count=0;

$form['foreactions'] = array('#type' => 'actions');

$form['foreactions']['submit'] = array('#type' => 'submit', '#value' => t('Save changes'));

foreach ($result as $row) { $form['nodes'][$count]['title']=array('#markup' => "nid)."">".check_plain($row->title)."" );

$form['nodes'][$count]['created']=array('#markup' => date("Y-m-d H:i:s",$row->created));

$form['nodes'][$count]['nid']=array( '#type'=>'value', '#title_display' => 'invisible', '#value' => $row->nid, );

$form['nodes'][$count]['tid']=array( '#type'=>'value', '#title_display' => 'invisible', '#value' => $row->tid, );

$form['nodes'][$count]['node_order']=array( '#type' => 'value', '#title_display' => 'invisible', '#value' => $row->node_order, );

$form['nodes'][$count]['weight'] = array( '#type' => 'weight', '#delta' => $delta, '#title_display' => 'invisible', '#default_value' => $count, '#title' => t('Weight for @title', array('@title' => $row->title)), );

$count +=1; } $form['actions'] = array('#type' => 'actions');

$form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save changes'));

return $form;

}

4.theme上面定义的表单。这里的关键

① 对每一行中用于存放顺序的weight字段,指定class 
复制代码代码如下:$form['nodes'][$count]['weight']['#attributes']['class'] = array('text-format-order-weight');

② theme table时指定table的ID:


复制代码代码如下:$output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'text-format-order')));

③ 加上tabledrag需要的功能:


复制代码代码如下:drupal_add_tabledrag('text-format-order', 'order', 'sibling', 'text-format-order-weight');

function theme_nodeorder_taxonomy_term_nodeorder_form($variables) {

$form = $variables['form'];

$rows = array();

if (isset($_GET["page"]))

$page=intval($_GET["page"]);

else

$page=0;

foreach (element_children($form['nodes']) as $count) { $form['nodes'][$count]['weight']['#attributes']['class'] = array('text-format-order-weight');

$rows[] = array( 'data' => array( drupal_render($form['nodes'][$count]['title']), drupal_render($form['nodes'][$count]['created']), drupal_render($form['nodes'][$count]['weight']), ), 'class' => array('draggable'), );

}

$header = array(t('title'), t('created'), t('weight') );

$output = drupal_render($form['term_name']);

$output .= drupal_render($form['foreactions']);

$output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'text-format-order')));

$output .= drupal_render_children($form);

$output .= theme('pager', array('#theme' => 'pager', '#weight' => 5,));

drupal_add_tabledrag('text-format-order', 'order', 'sibling', 'text-format-order-weight');

return $output;

}

5. 最后一步,用hook_form_submit处理结果数据。

希望本文所述对大家的drupal二次开发有所帮助。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-开源
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯