Drupal 导入三级地址到Taxonomy

创建Taxonomy Address
选区_003

然后再使用taxonomy_vocabulary_get_names(); 查看此分类的详细信息. 因为需要用到分类ID
以下代码写得稍微复杂。因为很多的地区名存在相同。

$vid = 8;  // 设置导入的分类ID.
$vocabulary_load = taxonomy_vocabulary_load($vid);
 // 手动输入测试数据.
$datas = array(
  array('provinces' => '上海', 'citys' => '上海', 'districts' => '闸北'),
  array('provinces' => '浙江', 'citys' => '丽水', 'districts' => '莲都区'),
  array('provinces' => '上海', 'citys' => '上海', 'districts' => '浦东新区'),
);
foreach ($datas as $data) {
  // 开始设置分类
  $provinces = $data['provinces']; // 省
  $city = $data['citys'];   // 市
  $districts = $data['districts']; // 区
  
  
  $vocabulary = $vocabulary_load->machine_name;
  // taxonomy_get_tree($vid, $parent, $max_depth);
  $term_tree = taxonomy_get_tree($vid);
  $ctree = $ptree = $dtree = array();
  foreach ($term_tree as $tree) {
    if ($tree->depth == 0) {
      $ptree[$tree->tid] = $tree;
    }
    elseif ($tree->depth == 1) {
      $ctree[$tree->tid] = $tree;
    }
    elseif ($tree->depth == 2) {
      $dtree[$tree->tid] = $tree;
    }
  }
  // 先交省市区的id设置成0, 如果没有添加.
  $pid = $cid = $did = 0;

  // 获取省的term.
  $pterms = taxonomy_get_term_by_name($provinces, $vocabulary);
  // 分别检测省和下面的市和区是否存在.
  if (!empty($pterms)) {
    foreach ($pterms as $pterm) {
      if (isset($ptree[$pterm->tid])) {
        $pid = $pterm->tid;
        break;
      }
    }
  }
  if ($pid !== 0 && $cterms = taxonomy_get_term_by_name($city, $vocabulary)) {
    if (!empty($cterms)) {
      foreach ($cterms as $cterm) {
        if (isset($ctree[$cterm->tid]) && in_array($pid, $ctree[$cterm->tid]->parents)) {
          $cid = $cterm->tid;
          break;
        }
      }
    }
  }
  if ($cid !== 0 && $dterms = taxonomy_get_term_by_name($districts, $vocabulary)) {
    if (!empty($dterms)) {
      foreach ($dterms as $dterm) {
        if (isset($dtree[$dterm->tid]) && in_array($cid, $dtree[$dterm->tid]->parents)) {
          $did = $dterm->tid;
          break;
        }
      }
    }
  }
  // 如果省不存在则添加.
  if ($pid == 0) {
    $term = new stdClass();
    $term->name = $provinces;
    $term->vid = $vid;
    taxonomy_term_save($term);
    $pid = $term->tid;
  }
  // 如果市不存在则添加.
  if ($cid == 0) {
    $term = new stdClass();
    $term->name = $city;
    $term->vid = $vid;
    $term->parent = $pid;
    taxonomy_term_save($term);
    $cid = $term->tid;
  }

  // 如果区不存在则添加.
  if ($did == 0) {
    $term = new stdClass();
    $term->name = $districts;
    $term->vid = $vid;
    $term->parent = $cid;
    taxonomy_term_save($term);
    $did = $term->tid;
  }
}

执行的结果
选区_005

为什么写这个?
因为我要将一个Excel东西同时导入到Node和导入到Taxonomy.而node中有一个字段地址分类。但是必须选择的区而不是其它,还要保证不能重复,中国地址区名重复的很多. 此段程序执行结束后我只需要获取$did既可

选区_006

Drupal 读出Excel文件到数组中

首先安装:
1. PHPExcelibraries API模块模块
2. 下载PHPExcel库到libraries, 确保库文件目录为
sites/*/libraries/PHPExcel/Classes/PHPExcel.php

  $module_path = drupal_get_path('module','mymodule');
  module_load_include('inc', 'phpexcel', 'phpexcel');
  // 读取.xls文件
  $data = phpexcel_import($module_path . '/location.xls');
  // 输出数组
  echo "
";
  print_r($data);

Linux 权限笔记

权限常用
使用ls -lah 列出文件目录

第一栏
第一组.
当为[ d ]则是目录
为[ – ]则是档案
若是[ l ]则表示为连结档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备;
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。

接下来的属性中,三个为一组,且均为『rwx』的三个参数的组合。
第一组为『拥有人的权限』,以第五行为例,该档案的拥有人可以读写,但不可执行;
第二组为『同群组的权限』;
第三组为『其他非本群组的权限』。

第三栏表示这个档案(或目录)的『拥有人』;
第四栏表示拥有人的群组;

chgrp :改变档案所属群组
chown :改变档案所属人
chmod :改变档案的属性、 SUID 、等等的特性

权限设置:
[ r ]代表可读、[ w ]代表可写、[ x ]代表可执行
r:4
w:2
x:1

每一组最高的是7, 所以777 就相当于rwx rwx rwx
755 相当于 rwx + rx + rx

Mysql Case when 查询排序

这种算法也叫做分值查询,将查询的匹配度赋值一个数字.最后这个值进行排序
我的数据表里面有两个字段title, short_name
这里有一个查询排序需求:
1. 当查询字符串完全等于short_name, 那么此条记录排最前面.
2 其次等于title
3 其次 %short_name.
4 其次 %title
5 其次 %short_name%
6 其次 %title%

以上面的6条需求对查询结果进行排序

$string = "我的查询字符串";

// 将查询的值给一个叫orderme的值.然后使用这个值来进行排序.  Then 后的结果为此字段的值
$result = db_query("
       SELECT
       *, CASE
        WHEN short_name='{$string}' THEN 1
        WHEN title='{$string}' THEN 2
        WHEN short_name  LIKE '{$string}%' THEN 3
        WHEN title  LIKE '{$string}%' THEN 4
        WHEN short_name  LIKE '%{$string}%' THEN 5
        WHEN title  LIKE '%{$string}%' THEN 6
       END AS orderme
       FROM mytable 
         WHERE short_name LIKE '%{$string}%' 
         OR
         title LIKE '%{$string}%'
       ORDER BY orderme ASC LIMIT 20");

服务器性能调试技巧

1. apache日志调试, 查看实时访问用户, tailf工具

tailf /var/log/nginx/access.log

tailf /var/log/httpd/access_log | grep "your ip"

2. 查看mysql 读写记录
添加记录到my.cnf

log-bin=mysql-bin.log
expire_logs_days=7
max-binlog-size=500M

进入mysql目录,默认是/var/lib/mysql

mysqlbinlog mysql-bin.000001 | less

jQuery DIV 随着浏览器滚动

默认页面DIV所在位置是静态的, 当我们滚动到DIV的位置的时候.此DIV的属性变成了 position:fixed;
CSS:

.directoryfixed{
    position:fixed;
    top:40px;
}

JS:

jQuery(function($) {
    var fixed = false;
    var div = $("#block-dm-global-module-directory");
    var tops = div.offset().top;
    if (div.length > 0) {
        $(window).scroll(function() {
            if ($(this).scrollTop() > tops) {
                if( !fixed ) {
                    fixed = true;
                    div.addClass('directoryfixed');
                }
            } else {
                if( fixed ) {
                    fixed = false;
                    div.removeClass('directoryfixed');
                }
            }
        });
    }
});

Drupal Ajax

1. 重写某个Ajax成功后的绑定函数

// Ajax ID需要从Drupal DOM中查看. Drupal.ajax
var ajaxid = "myajax_id";
Drupal.ajax[ajaxid].options.success = function() {
   
   // 其它操作。。。。。。。。

  // 请求成功以后还要将请求的元素的禁用模式给去掉.
  $("#ajaxid").attr('disabled', false).next().addClass('element-invisible');
}

以下Ajax对象列表中第一个属性都是一个ajax ID, 而且Ajax对象列表中包含当前页面所有的Ajax

选区_182

2. 重新绑定Ajax.
如果你的一个元素已经绑定了Ajax. 但是如果此元素你使用Ajax 加载出来放在页面的话。此AJax会的功能会消失。以下操作是重新绑定Ajax事件

jQuery(function($){
  // 我通过一个ajax请求将数据Load到我页面上的Mydiv
  $("#Mydiv").load("myurl", function(){
      // 重新绑定事件, 现在我假设我load过来的mynewdiv里面有一个A链接是ajax
      $("#mynewdiv a:not(.ajax-processed)").addClass('ajax-processed').each( function() {
        var element_settings = {};
        element_settings.event = 'click';  // 事件名
        element_settings.url = $(this).attr('href');  // URL不能错
        var base = "mybase";
        var ajax = new Drupal.ajax( base, this, element_settings);
        Drupal.ajax[base] = ajax;
      });
   });
});