我开始学习drupal自定义,并试图为drupal创建一个非常简单的自定义字段。
我试着遵循了几个教程,但当我安装字段时(显然没有问题),它不会出现在字段列表中。但如果我尝试查看源代码,我的字段具有"隐藏"属性。
实际上,我开发了两个文件,信息文件和模块文件。
这里是模块的代码:
<?php
/**
* @pricefield.module
* add a price field.
*
*/
/**
* Implements hook_field_formatter_info().
*/
function pricefield_field_formatter_info() {
return array(
'pricefield_custom_type' => array( //Machine name of the formatter
'label' => t('Price'),
'field types' => array('text'), //This will only be available to text fields
'settings' => array( //Array of the settings we'll create
'currency' => '$', //give a default value for when the form is first loaded
),
),
);
}
/**
* Implements hook_field_formatter_settings_form().
*/
function pricefield_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
//This gets the view_mode where our settings are stored
$display = $instance['display'][$view_mode];
//This gets the actual settings
$settings = $display['settings'];
//Initialize the element variable
$element = array();
//Add your select box
$element['currency'] = array(
'#type' => 'textfield', // Use a select box widget
'#title' => 'Select Currency', // Widget label
'#description' => t('Select currency used by the field'), // Helper text
'#default_value' => $settings['currency'], // Get the value if it's already been set
);
return $element;
}
/**
* Implements hook_field_formatter_settings_summary().
*/
function pricefield_field_formatter_settings_summary($field, $instance, $view_mode) {
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
$summary = t('The default currency is: @currency ', array(
'@currency' => $settings['currency'],
)); // we use t() for translation and placeholders to guard against attacks
return $summary;
}
/**
* Implements hook_field_formatter_view().
*/
function pricefield_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array(); // Initialize the var
$settings = $display['settings']; // get the settings
$currency = $settings['currency']; // Get the currency
foreach ($items as $delta => $item) {
$price = $item['safe_value']; // Getting the actual value
}
if($price==0){
$element[0] = array('#markup' => 'Free');
} else {
$element[0] = array('#markup' => $currency.' '.$price);
}
return $element;
}
?>
我不确定问题是否是缺少安装文件。我试着看了其中的几个,但它们太不一样了。我不知道如何将我的自定义字段添加到数据库中(我认为这是必要的)。我必须做一个查询?或者我必须使用一些函数。
我需要制作一个mymodule_install方法吗?或者在这种情况下只需要mymodule_field_schema?(看看不同的基本模块,其中一些模块只实现该函数,但另一些模块实现了一个永不满足的方法,而不是field_schema)。
例如,如果我想添加我的自定义字段,它将是一个字符串,并且只需要一个文本框,我还需要做什么,才能在drupal上使用我的字段?
基本上,我不需要一个新的小部件用于我的自定义字段,我想使用drupal中已经提供的常用文本小部件。
如果我理解正确,您需要实现hook_field_widget_info_alter()
,并告诉Drupal您的字段可以使用textfield小部件:
function pricefield_field_widget_info_alter(&$info) {
// 'pricefield' will be whatever the machine name of your field is
$info['text_textfield']['field types'][] = 'pricefield';
}