Вопросы по созданию настраиваемого поля для drupal - PullRequest
0 голосов
/ 14 марта 2012

Я начал изучать настройку drupal и пытаюсь создать очень простое настраиваемое поле для drupal.

Я пытался следовать нескольким учебникам, но когда я устанавливаю поле (очевидно, без проблем), оно не появляется в списке полей. Но если я попытаюсь взглянуть на исходный код, мое поле будет иметь атрибут «скрытый».

На самом деле я разработал 2 файла, информационный файл и файл module_file.

Вот код для модуля:

<?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? (Глядя на другой базовый модуль, некоторые из них реализуют только эту функцию, но другие реализуют метод insatll, а не field_schema).

Так, например, если я хочу добавить свое настраиваемое поле, которое будет строкой, и ему нужно только текстовое поле, что мне еще нужно сделать, чтобы мое поле было доступно на drupal?

В принципе мне не нужен новый виджет для моего настраиваемого поля, я хочу использовать обычный текстовый виджет, уже доступный в drupal.

1 Ответ

2 голосов
/ 14 марта 2012

Если я вас правильно понял, вам нужно реализовать hook_field_widget_info_alter() и сообщить Drupal, что виджет текстового поля может использоваться вашим полем:

function pricefield_field_widget_info_alter(&$info) {
  // 'pricefield' will be whatever the machine name of your field is
  $info['text_textfield']['field types'][] = 'pricefield';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...