這兩年我們新建網站多數都采用了《在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調用起來更規範,隻是剛開始了解起來複雜了些