这两年我们新建网站多数都采用了《在Drupal中直接导入、使用数据库》这篇文章中说的办法,而没有用以前新建内容类型、导入到Drupal的Node中的办法,这对于数据量大、改动不大、读取多、写入少的需求很合适。
偶尔遇到需要修改、删除的事情,我们就是到阿里云RDS管理后台,Web界面来操作或者用SQL语句来进行,比以前在Node页面进行编辑要麻烦,但更改量不大的情况下也可以接受。
最近要用的一个新站也是用直接建表方式来搭建的,但内容需要人工来修改完善,而且是长久都需要添加、维护信息的,再用以前导入RDS后台就显得太麻烦了,于是想去找现成的Drupal第三方模块来解决,找了几个,发现需要把data导入的table进行entity实体化,那反而搞复杂了。
后来干脆决定自己写表单来操作,但需要解决权限的问题,尝试在自定义模块中添加menu项,利用Drupal自有的机制可以解决权限问题,只让具有管理员权限的用户可以访问。
function my_module_menu() {
$items= array();
$items['edit_table'] = array (
'title'=>t('Edit').' '.t('Table'),
'page callback'=>'edit_table',
'access callback' => 'user_access',
'access arguments'=>array('administer users'),
);
$items['edit_table_submit'] = array (
'title'=>t('Edit').' '.t('Table').' '.t('Submit'),
'page callback'=>'edit_table_submit',
'access callback' => 'user_access',
'access arguments'=>array('administer users'),
);
return $items;
}
menu项添加一个edit table路径和一个edit table submit路径,前者用于读取数据库表内容和生成相应的表单,后者用于接收处理前者提交来的表单对数据库表进行修改,这样就可以实现不进入RDS管理后台就修改数据库表的功能。简化后的示范程序如下:
function edit_table() {//读取数据库表,生成表单
$request_uri = $_SERVER['REQUEST_URI'];
$keyword = substr($request_uri,strpos($request_uri,'/edit_table/')+strlen('/edit_table/'));
$result = db_select('table_name')
->fields('table_name',array(
'field_1',
'field_2',
...
'field_n'
))
->condition('name', $name,'=')
->execute()
->fetchAssoc();
$field_1 = $result['field_1'];
$field_2 = $result['field_2'];
...
$field_n = $result['field_n'];
$form = "
<form class='edit_form' action='/edit_table_submit' method='post'>
<input type='hidden' name='field_1' value='$field_1' />
<div class='input_wrap'>
<label>Field 1: </label>
<input type='text' name='field_1' value='$field_1' disabled='disabled' />
</div>
<div class='input_wrap'>
<label>Field 2: </label>
<input type='text' name='field_2' value='$field_2' />
</div>
...
<div class='emoji_input_wrap'>
<label>Field n: </label>
<input type='text' name='field_n' value='$field_n' />
</div>
<div class='input_wrap submit_wrap'>
<input type='submit' value='".t('Submit')."' />
</div>
</form>
";
$output = str_replace("\n","<br />\n",$form);
return $output;
}
function edit_table_submit() {//接收表单提交数据,更改数据库表
$field_1 = $_POST["field_1"];
$field_2 = $_POST["field_2"];
...
$field_n = $_POST["field_n"];
$num_updated = db_update('table_name')
->fields(array(
'field_1' => $field_1,
'field_2' => $field_2,
...
'field_n' => $field_n,
))
->condition('name', $name, '=')
->execute();
$output = $num_updated;
return $output;
}
使用Drupal在找不到合适第三方模块的时候,自己来编写自定义模块也是一个很好的解决问题办法✌😀。
评论13
文章不错,非常喜欢
文章不错,非常喜欢找了半天,刚好有需要,谢谢了
找了半天,刚好有需要,谢谢了我只想知道我的网站为啥还没收录
我只想知道我的网站为啥还没收录这个只有自己对着搜索引擎收录的一些原则
这个只有自己对着搜索引擎收录的一些原则(网上可以搜索到来自百度、Google搜索引擎官方的相关文章)找原因了,别人也不知道您的具体网站内容。
感谢分享
感谢分享大佬就是厉害,不得不佩服啊
大佬就是厉害,不得不佩服啊正好需要,谢谢分享。
正好需要,谢谢分享。感谢分享,佩服啊。
感谢分享,佩服啊。别客气,文章能对大家有用就好🤝😀
别客气,文章能对大家有用就好🤝😀
感谢分享
感谢分享感谢分享
感谢分享大佬,我想说的是,drupal自己封装了form api
大佬,我想说的是,drupal自己封装了form api,可以方便的处理表单相关问题。。链接如下: api.drupal.org/api/drupal/developer%21topics%21forms_api_reference.html/7.x嗯,你说的drupal自己封装的form
嗯,你说的drupal自己封装的form api调用起来更规范,只是刚开始了解起来复杂了些