标签归档:drupal

JS获取Jason数据失败一例

    在使用image_captcha_refresh刷新captcha模块提供的校验码时,发现无法刷新(原生主题中使用不存在该问题)。经调试,发现是js执行没有成功。image_captcha_refresh.js的代码如下:

Drupal.behaviors.imageCaptchaRefresh = function (context) {
  $('.reload-captcha', context).not('.processed').bind('click', function () {
    $(this).addClass('processed');
    var $form = $(this).parents('form');
    // send post query for getting new captcha data
    var date = new Date();
    var url = this.href + '?' + date.getTime();
    $.get(
      url,
      {},
      function (response) {
        if (response.status == 1) {
          $('.captcha', $form).find('img').attr('src', response.data.url);
          $('input[name=captcha_sid]', $form).val(response.data.sid);
          $('input[name=captcha_token]', $form).val(response.data.token);
        }
        else {
          alert(response.message);
        }
      },
      'json'
    );
    return false;
  });
};

通过firefox中的firebug插件看到,执行这个js后服务端有jason数据的返回,但是在$.get()中,却认为响应没有成功。最后将'json'去掉,才认为成功,但是返回的response为字符串。新增response=eval("("+response+")"); 则可以成功实现验证码的刷新了。
 

html: select 多选时只能提交一个值的原因

在drupal 6中自定义表单,设置了一个multiple select,但是在提交表单时,发现虽然选择了多个值,但是都只传递了一个值。
最初定义如下:

  $fields['event']['roles'] = array(
    '#title' => '用户类型',
    '#type' => 'select',
    '#required' => TRUE,
    '#options' => array(1=>'Type1',2=>'Type2'),
    '#size' => 2,
    '#attributes' => array(multiple=>"multiple",),
  );

生成的HTML为:
<select name="event[roles]" multiple="multiple" class="form-select required" id="edit-event-roles-"  size="2"><option value="1">Type1</option><option value="2">Type2</option></select>

解决办法:

将 $fields['event']['roles']  修改为 $fields['event']['roles'][''] 就可以解决问题了。

Drupal 6 区块管理页面的主题

    通常我们只定制Drupal的前台主题(设置为网站的默认主题),管理后台主题使用自带主题(如果garland,设置为管理主题)。在Drupal 6中,大部分页面都没有问题,但是在区块管理页面(路径:admin/build/block)则不是我们想要的结果了,他使用的是默认主题即前台主题,这样就会导致页面显示异常。在网上找了许久没有找到一个不修改Drupal core代码的,几乎都是需要修改block.admin.inc文件的,但是我在Drupal 6.26测试没有通过,现在记录下正确的办法(虽然也是不推荐的,Drupal 7 已经不存在这样的问题了):
1. 打开 modules\block\block.admin.inc
2. 修改 $custom_theme = isset($theme) ? $theme : variable_get('theme_default', 'garland'); 为 $custom_theme = isset($theme) ? $theme : variable_get('theme_admin', 'garland'); 保存即可
3. 清空缓存,查看效果。