我們在創建系列Drupal網站的時候,都是用Drush腳本,其中運行PHP程序調用field_create_instance來創建新的字段。
現在需要将已經創建好的字段進行一些設置修改,例如在teaser模式顯示一部分字段内容,以後需要手工在網站菜單中操作,系列網站多的時候很麻煩,今天在網上查了一下資料,可以實現程序批量處理,具體PHP程序代碼如下:
# change content type fields' teaser display drush ev '$instance=field_info_instance("node", "field_city", "poi");$instance["display"]["teaser"]["type"]="taxonomy_term_reference_link";$instance["display"]["teaser"]["module"]="taxonomy";field_update_instance($instance);' drush ev '$instance=field_info_instance("node", "field_address", "poi");$instance["display"]["teaser"]["type"]="text_default";$instance["display"]["teaser"]["module"]="text";field_update_instance($instance);'
上面是在sh腳本中使用drush命令來運行兩小段php代碼,分别修改一個分類屬于字段和一個純文本字段的teaser顯示。當然也可以不在drush腳本中,直接用php程序來執行。
參考信息:
- how to update a field created with field_create_instance
- field_create_instance
- field_info_instance
- field_update_instance
2014-10-9補充:如果需要修改“字段設置”中“值的數量”cardinality等其它設置,可以這樣:
drush ev '$field=field_info_field("field_category");$field["cardinality"]=-1;field_update_field($field);'
參考信息:
2016-4-13補充:中文網站留言的地方如果提示是“Comment”就不太友好,可以修改為“更好”,這時需要修改“field_config_instance”表中“comment_body”字段中“label”的值,可以運行:
drush ev '$field=field_info_instance("comment","comment_body","comment_node_hangye");$field["label"]="評論";field_update_instance($field);'
其中hangye是内容類型的機器碼。
2016-6-28補充:修改所有内容類型的每個字段的顯示,将default标簽裡面的設置内容複制到drupalgap标簽裡面去,逐個内容類型、逐個字段設置起來太麻煩,可以用兩個循環:外面一個内容類型的循環,裡面一個字段的循環,就可以方便地全部執行,代碼如下:
drush ev ' $types = node_type_get_types(); foreach ($types as $type => $value) { print "type = $type\n"; $fields = field_info_instances('node', $type); //print_r($fields); foreach ($fields as $field => $instance) { print " $field,"; $instance["display"]["drupalgap"] = $instance["display"]["default"]; field_update_instance($instance); } print "\n"; } '
以上代碼是用在《以Drupal網站為基礎創建App》中批量修改系列站點的設置。
评论6
能示例一下PHP 的代碼嗎
能示例一下PHP 的代碼嗎上面已經是php代碼了
隻需要執行很簡單的幾行php代碼就可以了,用drush的方式可以免除編寫一個完整的php程序,如果不用drush、也不編寫完整php程序的話,你可以編輯一個允許php代碼的頁面,嵌入這幾句php代碼就可以,如果編寫一個完整php程序也不難、也不長,隻有開頭調用一些bootstrap等,類似這樣:
<?php
$_SERVER['HTTP_HOST'] = 'www.example.com';
$_SERVER['SCRIPT_NAME'] = '/sample.php';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$drupal_path = '/usr/local/apache2/htdocs/www.example.com/';
chdir($drupal_path);
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
......
大神能給個完整點的範例嗎。php不太懂
大神能給個完整點的範例嗎。php不太懂我可不是大神,也是自己一點點摸索的
我在搞Drupal之前也沒有了解PHP程序,後來被迫自學的一點,程序都不講規範,對付着湊合用。下面這個算是完整例子:
上面這是适用于drupal 7的網站,其中網址、文件名、IP地址、路徑、内容類型、字段名稱、字段類型等都要根據你自己實情來調整修改。我都是參照博文上面的幾個英文參考鍊接一點一點試出來的。
主要是drush怎麼都裝不上
主要是drush怎麼都裝不上,所以才迫不得已讓您寫下php的謝謝了
謝謝了