本文介绍了自定义Drupal 7字段仅保存第一个字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我本来试图用新的Drupal 7 Field API创建我的第一个字段类型模块。
我设法让它在编辑视图中正确显示。

但是,当我尝试保存一些数据时,它只保存第一个字符。



这是模块:

 <?php 

函数youtubefield_field_info(){
return array(
'youtubefield_video'=> array(
'label'=> t('Youtube video'),
'description'=> ; t('此字段存储YouTube视频ID并显示与之相关联的视频),
'settings'=>数组(
'max_length'=> 11,
) ,
'instance_settings'=>数组(
'text_processing'=> false,
),
'default_widget'=>'youtubefield_video_widget',
' default_formatter'=>'youtubefield_video_formatter',
),
);
}

function youtubefield_field_widget_info(){
return array(
'youtubefield_video_widget'=> array(
'label'=> t默认'),
'字段类型'=>数组('youtubefield_video'),
),
);
}

函数youtubefield_field_widget_form(& $ form,& $ form_state,$ field,$ instance,$ langcode,$ items,$ delta,$ element){
$ element ['#type'] ='textfield';
$ element ['#default_value'] = isset($ items [$ delta])? $ items [$ delta]:'';
return $ element;
}

函数youtubefield_field_is_empty($ item,$ field){
return!$ item;
}

function youtubefield_field_formatter_info(){
return array(
'youtubefield_video_formatter'=> array(
'label'=> t Youtube视频'),
'字段类型'=>数组('youtubefield_video'),
),
);
}

这里是安装程序:



$ pre

函数youtubefield_field_schema($ field){
返回数组(
'columns'=>数组) (
'value'=>数组(
'type'=>'varchar',
'length'=> 11,
'not null'=> true,
),
),
'indexes'=> array(),
);
}

编辑:问题似乎与窗口小部件有关,因为它工作正常当它以编程方式获取数据时。

解决方案

这个小部件表单适用于我:


$ b $函数youtubefield_field_widget_form(& $ form,& $ form_state,$ field,$ instance,$ langcode,$ items,$ delta,\
$ element)b

  {
$ main_widget = array();
switch($ instance ['widget'] ['type']){
case'youtubefield_video_widget':
$ main_widget = $ element + array(
'#type'= "'textfield',
'#default_value'=> isset($ items [$ delta] ['value'])?$ items [$ delta] ['value']:NULL,
);
break;
}
$ element ['value'] = $ main_widget;
return $ element;
}


I'm essentially trying to create my first field type module using the new Drupal 7 Field API.I've managed to get it to display correctly in the "edit" view.
However, when I try to save some data it only saves the first character.

Here's the module:

<?php

function youtubefield_field_info() {
  return array(
    'youtubefield_video' => array(
      'label' => t('Youtube video'),
      'description' => t('This field stores a youtube video ID and displays the video associated with it'),
      'settings' => array(
        'max_length' => 11,
      ),
      'instance_settings' => array(
        'text_processing' => false,
      ),
      'default_widget' => 'youtubefield_video_widget',
      'default_formatter' => 'youtubefield_video_formatter',
    ),
  );
}

function youtubefield_field_widget_info() {
  return array(
    'youtubefield_video_widget' => array(
      'label' => t('Default'),
      'field types' => array('youtubefield_video'),
    ),
  );
}

function youtubefield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
  $element['#type'] = 'textfield';
  $element['#default_value'] = isset($items[$delta]) ? $items[$delta] : '';
  return $element;
}

function youtubefield_field_is_empty($item, $field) {
  return !$item;
}

function youtubefield_field_formatter_info() {
  return array(
    'youtubefield_video_formatter' => array(
      'label' => t('Youtube video'),
      'field types' => array('youtubefield_video'),
    ),
  );
}

And here's the installer:

<?php

function youtubefield_field_schema($field) {
  return array(
    'columns' => array(
      'value' => array(
        'type' => 'varchar',
        'length' => 11,
        'not null' => true,
      ),
    ),
    'indexes' => array(),
  );
}

EDIT: The problem seems to be related to the widget, as it works fine when it gets the data programmatically.

解决方案

This widget form worked for me:

function youtubefield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta,\
 $element) {
  $main_widget = array();
  switch ($instance['widget']['type']) {
  case 'youtubefield_video_widget':
    $main_widget = $element + array(
      '#type' => 'textfield',
      '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL,
      );
    break;
  }
  $element['value'] = $main_widget;
  return $element;
}

这篇关于自定义Drupal 7字段仅保存第一个字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 13:37