Drupal 通讯录页面添加二维码

在通讯录的 View 上添加二维码,使用手机扫描二维码自动新建联系人。

本来想在 View 上新建一个 CustomText 列,使用别的网站的 api 直接生成二维码的。

但是中文有乱码问题,CustomText 列中又不能写 js 代码,只好新建一个 view 的模板文件,在模板文件中添加相应的代码。

同时使用 jquery-qrcode 插件,使用 canvas 生成二维码图片。

views-view-table--contacts.tpl.php 的代码如下:

点击查看代码
<?php
/**
 * @file
 * Views-view-table.tpl.php.
 */

/**
 * Template to display a view as a table.
 *
 * Fields Available.
 * - $title : The title of this group of rows.  May be empty.
 * - $header: An array of header labels keyed by field id.
 * - $caption: The caption for this table. May be empty.
 * - $header_classes: An array of header classes keyed by field id.
 * - $fields: An array of CSS IDs to use for each field id.
 * - $classes: A class or classes to apply to the table, based on settings.
 * - $row_classes: An array of classes to apply to each row, indexed by row
 *   number. This matches the index in $rows.
 * - $rows: An array of row items. Each row is an array of content.
 *   $rows are keyed by row number, fields within rows are keyed by field ID.
 * - $field_classes: An array of classes to apply to each field, indexed by
 *   field id, then row number. This matches the index in $rows.
 *
 * @ingroup views_templates
 */
?>
<script type="text/javascript" src="/sites/all/themes/color_glass/js/qrcode/qrcode.js"></script>
<script type="text/javascript" src="/sites/all/themes/color_glass/js/qrcode/jquery.qrcode.js"></script>
<script type="text/javascript">
var _countBits = function(_c) {
    var cnt = 0;
    while(_c > 0) {
        cnt++;
        _c = _c >>> 1;
    }
    return cnt;
};
function UnicodeToUtf8Bytes2(code) {
        if ((code == null) || (code < 0) ||
        (code > (Math.pow(2, 31) -1))) {
        return ["?".charCodeAt(0)];
    }
    if (code < 0x80) {
        return 
;
    }
    var arr = ;
    while ((code >>> 6) > 0) {
        arr.push(0x80 | (code & 0x3F));
        code = code >>> 6;
    }
    if ((arr.length + 2 + (_countBits(code))) > 8) {
        arr.push(0x80 | code);
        code = 0;
    }
    var pre = 0x80;
    for (var i = 0; i < arr.length; i++) {
      pre |= (0x80 >>> (i + 1));
    }
    arr.push(pre | code);
    return arr.reverse();
}

QR8bitByte.prototype.getLength = function(buffer) {
  var len = 0;
  for (var i = 0; i < this.data.length; i++) {
    var bytes = UnicodeToUtf8Bytes2(this.data.charCodeAt(i));
    len += bytes.length;
  }
  return len;
};

QR8bitByte.prototype.write = function(buffer) {
  for (var i = 0; i < this.data.length; i++) {
    var bytes = UnicodeToUtf8Bytes2(this.data.charCodeAt(i));
    for (var x = 0; x < bytes.length; x++) {
      buffer.put(bytes[x], 8);
    }
  }
};
</script>

<?php if ($responsive): ?>
<div class="table-responsive">
<?php endif; ?>
<table <?php if ($classes) : print 'class="' . $classes . '" '; endif; ?><?php print $attributes; ?>>
   <?php if (!empty($title) || !empty($caption)) : ?>
     <caption><?php print $caption . $title; ?></caption>
  <?php endif; ?>
  <?php if (!empty($header)) : ?>
    <thead>
      <tr>
        <?php foreach ($header as $field => $label): ?>
          <th <?php if ($header_classes[$field]) : print 'class="' . $header_classes[$field] . '" '; endif; ?>>
            <?php print $label; ?>
          </th>
        <?php endforeach; ?>
        <th>联系人二维码</th>
      </tr>
    </thead>
  <?php endif; ?>
  <tbody>
    <?php foreach ($rows as $row_count => $row): ?>
      <tr <?php if ($row_classes[$row_count]) : print 'class="' . implode(' ', $row_classes[$row_count]) . '"';  endif; ?>>
        <?php foreach ($row as $field => $content): ?>
          <td <?php if ($field_classes[$field][$row_count]) : print 'class="' . $field_classes[$field][$row_count] . '" '; endif; ?><?php print drupal_attributes($field_attributes[$field][$row_count]); ?>>
            <?php print $content; ?>
          </td>
        <?php endforeach; ?>
        <td>
          <div <?php print 'id="qr_' . $row["name"] .'"'; ?>></div>
          <script>
          jQuery(function(){
            jQuery(<?php print '"#qr_' . $row["name"] .'"'; ?>).qrcode(
              {
                correctLevel:QRErrorCorrectLevel.M,
                text:"BEGIN:VCARD\r\nVERSION:3.0\r\nN:<?php print $row["name"]; ?>;\r\nTEL;TYPE=WORD,VOICE,PREF,MSG:<?php print $row["field_mobile_phone"]; ?>\r\nEMAIL;TYPE=PREF,INTERNET:<?php print $row["field_email"]; ?>\r\nEND:VCARD"
              }
            );
          });
          </script>
        </td>
      </tr>
    <?php endforeach; ?>
  </tbody>
</table>
<?php if ($responsive): ?>
  </div>
<?php endif; ?>
Drupal 如何导入中文汉化包?

  1. 在英文版安装好了以后,点击顶部的菜单 “Modules”,进入模块管理页面 (admin/modules),找到 “Locale” 模块,将其开启。

  2. 接着点击 “Configuration” > “Languages”,进入语言管理界面 (admin/settings/language)。

  3. 点击 Add Language 连接,选择 Chinese, Simplified(简体中文),接着点击 “Configuration” > “Translate interface”,再点击 “Import”,在 “Language file” 下选择本地已下载的 drupal7 中文包,接着点击 “Import” 按钮,即可开始导入中文包。

  4. 到 admin/settings/language 目录下,将简体中文设为 “Default” 即可。

Drupal 班级同学录网站使用模块总结

除了默认的 blog 等模块外,还使用了如下的模块:

  • Chaos tools:很多模块的基础模块

  • Custom breadcrumbs:自定义面包屑模块

  • Calendar:日历模块(用于实现活动日历功能)

  • Date:提供日期型字段类型

  • Email:提供邮件字段类型

  • Falg:标记模块 (用于实现参加活动功能)

  • Private messages:私信模块 (用于实现站内私信功能)

  • Profile2:个人信息模块 (用于实现额外的个人信息)

  • ode Gallery:相册模块

  • Wechat:微信模块(绑定微信,自定义微信菜单等)

  • Plupload integration module:联合 Node Gallery 实现批量上传图片功能

  • jQuery Update:用于更新 jQuery 的版本

  • Lightbox2:用于实现图片的显示

  • Wysiwyg:富文本编辑器

  • IMCE Wysiwyg API bridge:用于连接 IMCE 模块和 Wysiwyg 模块

  • IMCE:用于实现图片文件的上传(联合 Wysiwyg 实现在编辑器中上传图片到服务器)

Drupal 使用 wechat + Node Gallery + Profile2 实现微信发送图片自动上传到指定相册

1. 安装【wechat + Node Gallery + Profile2】三个模块并启用

  • wechat:微信相关的基础模块

  • Node Gallery:相册模块,可以实现相册功能

  • Profile2:可以在账户里追加自定义的设定项

2. 利用 Profile2 在账户设置画面追加上传图片时的默认相册

在【 admin/structure/profiles/manage/main/fields 】页面追加字段【微信上传默认相册(机读名称:field_wechat_default_gallery)】;

Drupal Calendar View 的显示设置画面无法打开

装了 Calendar 模块之后创建了日历的 View. 发现 View 的显示设置画面无法打开.

Console 里提示:

.live() is not a function

之前换主题主要 jQuery1.9 以上的版本,所以装了 jQuery Update 模块,把 jQuery 的版本升到了 1.10,导致了该问题.

把 calendar\js\calendar_colorpicker.js 的内容修改为如下内容,就可以代开显示设置画面了.

/**
 * Implementation of hook_elements.
 *
 * Much of the colorpicker code was adapted from the Colorpicker module.
 * That module has no stable release yet nor any D6 branch.
 */
/*
 *  Bind the colorpicker event to the form element
 */
(function ($) {
  Drupal.behaviors.field_example_colorpicker = {
    attach: function(context) {
      // $(".edit-calendar-colorpicker").live("focus", function(event) {
      $("body").on("focus", ".edit-calendar-colorpicker", function(event) {
        var edit_field = this;
        var picker = $(this).closest('div').parent().find(".calendar-colorpicker");

        // Hide all color pickers except this one.
        $(".calendar-colorpicker").hide();
        $(picker).show();
        $.farbtastic(picker, function(color) {
          edit_field.value = color;
        }).setColor(edit_field.value);
      });
    }
  }
})(jQuery);
Drupal Node Gallery 无法设置相册

使用【Node Gallery】模块实现了相册功能,不知道改了哪里之后编辑时相册下拉框中看不到任何相册,但是管理员用户是可以看到的。
开始以为是权限问题,但是没有看到对应的权限选项。

后来在官方的 Issues 里找到了同样的问题(Users editing images in their own gallery cannot select any gallery besides -none-)。

Drupal wysiwyg 模块 + CKEditor 编辑器


原文:http://blog.csdn.net/rydiy/article/details/8130238


  1. 安装 Wysiwyg 模块
    https://www.drupal.org/project/wysiwyg

  2. 启用 Wysiwyg 模块

  3. 按照 Wysiwyg 配置里的提示下载对应的编辑器插件,这里下载 CKEditor 插件 (根据提示不要下载 for Drupal 的版本)
    不同版本的 Wysiwyg 支持的插件版本也不一样,可以在这里查看具体的版本.

  4. 按照 Wysiwyg 配置里的提示把插件放到对应的目录下

  5. 在 Wysiwyg 配置页面设置每种文本格式的默认编辑器为 CKEditor.

  6. 点击右边的编辑链接,设置每种文本格式下编辑器显示的按钮.

  7. 保存设置.

阿里云虚拟主机 + Drupal7.43

  1. 申请虚拟主机后把下载的 Drupal 代码上传到 htdocs 目录;

  2. 点击阿里云=>管理控制台=>云虚拟主机=>管理,进入主机管理平台;

  3. 进入站点信息=>基础环境设置=>默认首页设置,将 zhuye.html 删除,将 index.php 放在最上面;

  4. 打开站点,第一次默认进入安装界面,按照提示安装即可.


本想升级到 最新版 8.6.3

但是根据 Drupal 8 PHP requirements 至少需要 PHP 5.5.9+