1

嗨,我在使用自定义字段创建自定义节点类型时遇到这种错误:

未定义索引:locale_field_entity_form_submit() 中的 field_block_pre_login_body(D:\xampp\htdocs\projects\foo\modules\locale\locale.module 的第 438 行)。

通过 hook_install 创建自定义字段和自定义节点类型:

function custom_module_install() {
        $nodeType = new stdClass();
        $nodeType->type = "foo_block";
        $nodeType->orig_type = "foo_block";
        $nodeType->base = "node_content";
        $nodeType->name = "FooBlock";
        $nodeType->description = $t("This is a Custom Content Type for Defining Custom blocks for Pre and Post Login State Functionality on blocks");
        $nodeType->help = "Use This Content Type only if the block will have a Login State requirements";
        $nodeType->custom = TRUE;
        $nodeType->has_title = TRUE;
        $nodeType->title_label = "Custom Block";
        $nodeType->locked = FALSE;
        $nodeType->disabled = FALSE;

        node_type_save($nodeType);
        if (!field_info_field('field_block_pre_login_body')) {
            $field = array(
                'field_name' => $t('field_block_pre_login_body'),
                'type' => 'text_long',
            );
            field_create_field($field);

            // Create the field instance on the bundle.
            $instance = array(
                'field_name' => $t('field_block_pre_login_body'),
                'label' => $t('Pre-Login Body'),
                'bundle' => 'matterhorn_block',
                'entity_type' => 'node',
                'required' => FALSE,
                'widget' => array('type' => 'text_textarea'),
                'settings' => array('text_processing' => 1),
                'format' => 'filter_html',
            );
            field_create_instance($instance);
        }
}

现在,在我在 Drupal 中安装了我的自定义模块并通过我创建的自定义节点类型添加内容之后,locale.module 在创建或更新使用该内容类型创建的内容后提示错误,任何想法如何解决这个问题?谢谢!

** 编辑 **

注意:这是 drupal 模块,我需要更详细的解释来说明 drupal-field-api 如何与它一起工作,因为field_block_pre_login_body一旦您调用了该field_create_field方法,就会在索引中创建它。

4

1 回答 1

0

你可以使用这个补丁:

diff --git a/modules/locale/locale.module b/modules/locale/locale.module
    index 768fead..39ae31f 100644
    --- a/modules/locale/locale.module
    +++ b/modules/locale/locale.module
    @@ -434,14 +434,16 @@ function locale_field_entity_form_submit($entity_type, $form, &$form_state ) {

         foreach (field_info_instances($entity_type, $bundle) as $instance) {
           $field_name = $instance['field_name'];
    -      $field = field_info_field($field_name);
    -      $previous_language = $form[$field_name]['#language'];
    -
    -      // Handle a possible language change: new language values are inserted,
    -      // previous ones are deleted.
    -      if ($field['translatable'] && $previous_language != $current_language) {
    -        $form_state['values'][$field_name][$current_language] = $entity->{$field_name}[$previous_language];
    -        $form_state['values'][$field_name][$previous_language] = array();
    +      if (!empty($form[$field_name])) {
    +        $field = field_info_field($field_name);
    +        $previous_language = $form[$field_name]['#language'];
    +
    +        // Handle a possible language change: new language values are inserted,
    +        // previous ones are deleted.
    +        if ($field['translatable'] && $previous_language != $current_language) {
    +          $form_state['values'][$field_name][$current_language] = $entity->{$field_name}[$previous_language];
    +          $form_state['values'][$field_name][$previous_language] = array();
    +        }
           }
         }
       }

在Throwing Notice: Undefined index: in locale_field_entity_form_submit() 中阅读更多信息(/path/to/drupal/installation/modules/locale/locale.module 的第 438 行)。

于 2015-08-05T17:46:23.083 回答