drupal学习经验(后台添加,编辑,删除,一览)

张映 发表于 2010-12-22

分类目录: drupal

标签:,

网络后台是整个网站的控制室,数据从后台录入,在前台进行显示。数据要录入,肯定要有添加页面。添加完了,要有显示列表的页面,如果添加的时候有错误,我们要修改,这个时候要有编辑页面,如果有些数据不想要了,这个时候要能把它删除,这个时候要有删除功能。下面以drupal系统自带的taxonomy分类模块,分析一下,上面提到的操作。这篇博文的不是讨论taxonomy有什么功能,而在于说明后台开发的方法。

一,taxonomy的菜单

taxonomy menu

taxonomy menu

上面我们可以看到list是显示一览的链接,add vocabulary是添加的链接,关于菜单的制作要搞清楚MENU_DEFAULT_LOCAL_TASK,MENU_LOCAL_TASK,MENU_CALLBACK可以参考drupal专业开发指南第四章(菜单)。

二,list一览页面

taxonomy list

taxonomy list

上面就是第一级分类的一览页面,它对应的url是http://localhost/drupal/?q=admin/content/taxonomy,下面一步一步分析它的流程

它会先去调用taxonomy.module中的taxonomy_menu这个函数,

$items['admin/content/taxonomy'] = array(                                           //根url的路径对上了
 'title' => 'Taxonomy',
 'description' => 'Manage tagging, categorization, and classification of your content.',
 'page callback' => 'drupal_get_form',                                                         //回调函数是drupal_get_form
 'page arguments' => array('taxonomy_overview_vocabularies'),           //传的参数是一个函数的名字
 'access arguments' => array('administer taxonomy'),                              //权限
 'file' => 'taxonomy.admin.inc',                                                                    //page arguments函数所在的位置
 );

上面的这个drupal_get_form这个函数位于includes/form.inc,drupal_get_form会根据传的参数taxonomy_overview_vocabularies,从函数taxonomy_overview_vocabularies来得到内容,

function taxonomy_overview_vocabularies() {
 $vocabularies = taxonomy_get_vocabularies();                                             //这个函数把数据库的第一层分类的数据都取出来了
。。。。。。。。。
//下面的部分是设置值和链接
 $form[$vocabulary->vid]['#vocabulary'] = (array)$vocabulary;
 $form[$vocabulary->vid]['name'] = array('#value' => check_plain($vocabulary->name));
 $form[$vocabulary->vid]['types'] = array('#value' => implode(', ', $types));
 $form[$vocabulary->vid]['weight'] = array('#type' => 'weight', '#delta' => 10, '#default_value' => $vocabulary->weight);
 $form[$vocabulary->vid]['edit'] = array('#value' => l(t('edit vocabulary'), "admin/content/taxonomy/edit/vocabulary/$vocabulary->vid"));
 $form[$vocabulary->vid]['list'] = array('#value' => l(t('list terms'), "admin/content/taxonomy/$vocabulary->vid"));
 $form[$vocabulary->vid]['add'] = array('#value' => l(t('add terms'), "admin/content/taxonomy/$vocabulary->vid/add/term"));
 }

上面只是部分代码,函数taxonomy_overview_vocabularies生成的,只是上图中的数据块部分,标题部分不是在这里进行调用的。在这里要谈到drupal主题注册表(请参考drupal专业开发指南第八章,主题系统)了。

function taxonomy_theme() {
 return array(
 'taxonomy_term_select' => array(
 'arguments' => array('element' => NULL),
 ),
 'taxonomy_term_page' => array(
 'arguments' => array('tids' => array(), 'result' => NULL),
 ),
 'taxonomy_overview_vocabularies' => array(              //taxonomy_overview_vocabularies调用的主题theme_taxonomy_overview_vocabularies
 'arguments' => array('form' => array()),
 ),
 'taxonomy_overview_terms' => array(
 'arguments' => array('form' => array()),
 ),
 );
}

从上面我们可以看出,在函数的前面加上了一个theme_就是他所调用的主题函数了,你可以查一下其他模块的主题函数,比如user_theme(),关于主题,我可以自定义user.tpl.php,taxonomy.tpl.php我觉得自定义主题模板更灵活一点。

function theme_taxonomy_overview_vocabularies($form) {
。。。。。。。。。
。。。。。。。。。
 return theme('table', $header, $rows, array('id' => 'taxonomy')) . drupal_render($form);   //最终能过主题函数将内容显示出来
}

到这儿一览就走完了

三,新增和编辑

新增和编辑走的流程差不多,以编辑为例,http://localhost/drupal/?q=admin/content/taxonomy/edit/vocabulary/1简单解释一下,表示对第一级分类,id为1的这条记录进行编辑,它会先去调用taxonomy.module中的taxonomy_menu这个函数,

$items['admin/content/taxonomy/edit/vocabulary/%taxonomy_vocabulary'] = array(   //从这里我可以得知它会先调用taxonomy_vocabulary_load这个函数
 'title' => 'Edit vocabulary',
 'page callback' => 'taxonomy_admin_vocabulary_edit',                   //回调函数
 'page arguments' => array(5),                                                               //在这里为什么是5呢,因为通配符在第5的位置上
 'access arguments' => array('administer taxonomy'),
 'type' => MENU_CALLBACK,
 'file' => 'taxonomy.admin.inc',
 );

从url上面看,根$items下标中的内容不一样啊,怎么会调用这个呢,并且为什么会调用taxonomy_vocabulary_load(参考drupal专业开发手册第四章,通配符),

function taxonomy_vocabulary_load($vid) {
。。。。。。。。。。
//从这里我们可以看出,根据id我们从数据中把要修改的这条数据取出来了。
 $result = db_query('SELECT v.*, n.type FROM {vocabulary} v LEFT JOIN {vocabulary_node_types} n ON v.vid = n.vid WHERE v.vid = %d', $vid);
。。。。。。。。。。
}

下面是回调用函数

function taxonomy_admin_vocabulary_edit($vocabulary) {
  if ((isset($_POST['op']) && $_POST['op'] == t('Delete')) || isset($_POST['confirm'])) {
    return drupal_get_form('taxonomy_vocabulary_confirm_delete', $vocabulary->vid);
  }
  return drupal_get_form('taxonomy_form_vocabulary', (array)$vocabulary);   //taxonomy_form_vocabulary是函数名当参数
}

去taxonomy.admin.inc文件中看一下taxonomy_form_vocabulary函数,其实就是一个表单的定义。修改好后,表单提交函数 taxonomy_form_vocabulary_submit,如果是新增就插入,编辑就更新。其实把里面的东西弄通了,还是很容易的。

三,删除

taxonomy把删除也当作更新来操作了,

taxonomy delete

taxonomy delete

当我点删除按钮时,url还是http://localhost/drupal/?q=admin/content/taxonomy/edit/vocabulary/1根编辑的时候是一样的,走的流程也一样,不过看一下

function taxonomy_admin_vocabulary_edit($vocabulary) {
  if ((isset($_POST['op']) && $_POST['op'] == t('Delete')) || isset($_POST['confirm'])) {          //如果是删除的话就这个流程
    return drupal_get_form('taxonomy_vocabulary_confirm_delete', $vocabulary->vid);
  }
  return drupal_get_form('taxonomy_form_vocabulary', (array)$vocabulary);    //taxonomy_form_vocabulary是函数名当参数
}

提交删除的方法taxonomy_vocabulary_confirm_delete_submit



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/drupal/1184.html