Drupal 修改Entity(ECK)默认的CRUD URL

  1. function mymodule_entity_info_alter(&$entity_info) {
  2.  
  3.   if (isset($entity_info[myentity_type])) {
  4.     // Rebuild entity crud url.
  5.     $entity_info[myentity_type]['bundles'][mybundle]['crud'] = [
  6.       'add' => ['path' => 'admin/content/mybundle/add'],
  7.       'edit' => [
  8.         'path' => 'admin/content/mybundle/%eckentity/edit',
  9.         'entity_id' => 3, // Entity ID在URL上面的位置, 类似arg(3)
  10.       ],
  11.       'delete' => [
  12.         'path' => 'admin/content/mybundle/%eckentity/delete',
  13.         'entity_id' => 3,
  14.       ],
  15.       'view' => [
  16.         'path' => 'admin/content/district/%eckentity/view',
  17.         'entity_id' => 3,
  18.       ]
  19.     ];
  20.  
  21.     // admin url.
  22.     $entity_info[myentity_type]['bundles']['mybundle']['admin']['path'] = 'admin/content/mybundle';
  23.   }
  24. }
发表在 Drupal | 留下评论

Drupal 覆盖Region theme

创建theme_preprocess_region

  1. function mytheme_preprocess_region(&$variables) {
  2.   $region = $variables['region'];
  3.   $classes = &$variables['classes_array'];
  4.  
  5.   // Content region.
  6.   if ($region === 'header' && current_path() == 'node/1') {
  7.     // @todo is this actually used properly?
  8.     $variables['theme_hook_suggestions'][] = 'region__myheader__wrapper';
  9.   }
  10. }

创建模板region–myheader–wrapper.tpl.php

print $content;
发表在 Drupal | 留下评论

Drupal 加载文件

1. 使用 include

  1. include drupal_get_path('module', 'mymodule') . '/myfile.inc';

2. 使用module_load_include

  1. module_load_include('inc', 'mymodule', 'myfile');

3. ctools_include

  1. ctools_include('myfile', 'mymodule', 'dir');  // Dir不存在的时候默认使用includes, 后缀是.inc
发表在 Drupal | 留下评论

Drupal Views 增加默认过滤条件

  1. /**
  2. * Implements hook_form_views_exposed_form_alter().
  3. * Set the default exposed filter value.
  4. * @param $form
  5. * @param $form_state
  6. */
  7. function mymodule_form_views_exposed_form_alter(&$form, &$form_state) {
  8.   if (!isset($form_state['input']['myfield']['value'])) {
  9.     $form_state['input']['myfield']['value'] = 'test';
  10.   }
  11. }
发表在 Drupal | 留下评论

Drupal 生成机器名

在Drupal很多地方都有一个生成机器名的地方,比如创建内容类型名. Views名. 于是挖出这段代码觉得非常简单(非JS)

https://api.drupal.org/api/drupal/includes%21form.inc/function/form_process_machine_name/7.x

  1. $element['#machine_name'] += array(
  2.     'source' => array('name'),
  3.     'target' => '#' . $element['#id'],
  4.     'label' => t('Machine name'),
  5.     'replace_pattern' => '[^a-z0-9_]+',
  6.     'replace' => '_',
  7.     'standalone' => FALSE,
  8.     'field_prefix' => $element['#field_prefix'],
  9.     'field_suffix' => $element['#field_suffix'],
  10.   );

基本就是这样

  1. preg_replace('#[^a-z0-9_]+#', '_', $str);  // 把非小写字母和数字的替换成下划线
发表在 Drupal | 留下评论

Mysql

Profile

profile 用于查看在服务器上执行所有语句的耗时和其他一些查询执行状态变更的数据.

  1. mysql> SET profiling = 1;  #设置变量
  2. mysql> SELECT * FROM mytable;
  3. mysql> SHOW profiles;   # 查看结果
  4. mysql> SHOW profile FOR query 1;  #查看指定ID的sql执行详细信息
  5. mysql> SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=26; #查看指定ID的sql执行详细信息

每秒刷新当前连接数和sql数

  1. $ mysqladmin ext -i1 -uroot -proot | awk '
  2. /Queries/{q=$4-qp;qp=$4}
  3. /Threads_connected/{tc=$4}
  4. /Threads_running/{printf "%5d %5d %5d\n", q, tc, $4}'

Mysql 操作技巧

  1. $ mysql -e "sql"  命令行执行sql
  2. mysql> SHOW processlist; 查看当前的连接客户端

Mac开始漫查询

  1. $sudo vim /private/etc/my.cnf
  2.  
  3. [mysqld]
  4. long_query_time = 0  #查询时间大于设置的,0表示所有
  5. slow_query_log = 1
  6. slow_query_log_file = /var/log/mysql/slow-query.log
  7.  
  8. $mysql sudo mkdir /var/log/mysql                                                                                                                                                                                                                                                                                                                    $mysql sudo touch /var/log/mysql/slow-query.log
  9. $mysql sudo chown -R _mysql /var/log/mysql/
  10. $awk '/^# Time:/{print $3, $4, c;c=0}/^# User/{c++}' /var/log/mysql/slow-query.log #查看每秒查询数
  11. $tail -f /var/log/mysql/slow-query.log #时时打印sql

Mysql 工具包 percona-toolkit
http://macappstore.org/percona-toolkit/
pt-mysql-summary 和 pt-summary 打印状态和配置信息. 以及操作系统硬件信息
pt-sift 导航样本数据

发表在 mysql | 留下评论

服务器性能测试

sysbench
1. 测试CPU: $ sysbench –test=cpu –cpu-max-prime=20000 run
2. 测试文件IO
一. 创建测试文件: $ sysbench –test=fileio –file-total-size=150G prepare
二. 测试创建的测试文件: $sysbench –test=fileio –file-total-size=120G –file-test-mode=rndrw –init-rng=on –max-time=300 –max-requests=0 run
mode分为, seqwr(顺序写入), seqrewr(顺序重写), seqrd(顺序读取), rndrd(随机读取), rndwr(随机写入), rdnrw(混合随机读书/写)
三. 清除测试文件: $ sysbench –test=fileio –file-total-size=150G cleanup

http_load

-parallel 简写-p :含义是并发的用户进程数。
-fetches 简写-f :含义是总计的访问次数
-rate 简写-r :含义是每秒的访问频率
-seconds简写-s :含义是总计的访问时间

http_load 类似于ab命令,但是比AB灵活得多,可以根据一个url列表随机抽取来进行测试.
http_load -parallel 1 -seconds 10 urls.txt

Workbench
https://dev.mysql.com/doc/workbench/en/wb-installing-mac.html

发表在 服务器 | 留下评论

Mysql 开启漫查询,记录sql

在mysql配置文件my.cnf中增加

log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
long_query_time=2 (记录超过的时间,默认为10s)
log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)
log-long-format (如果设置了,所有没有使用索引的查询也将被记录)

发表在 mysql | 留下评论

Mac os 安装Web devel环境

https://mallinson.ca/osx-web-development/

发表在 ubuntu | 留下评论

Drupal Entity_metadata_wrapper 各种数据类型

修改Profile2

  1. $account = user_load(46);
  2. $profile = profile2_load_by_user($account, 'user_main');
  3. $wrapper = entity_metadata_wrapper('profile2', $profile);
  4. // 修改姓名字段
  5. $wrapper->field_user_realname->set('周周秀坤');
  6. $wrapper->save();

创建用户并绑定Profile2

  1.  
  2. $newuser = user_load(2);
  3. $profile = profile2_create(array(
  4.     'user' => $newuser,
  5.     'type' => 'user_main'));
  6.  
  7. $wrapper = entity_metadata_wrapper('profile2', $profile);
  8. $wrapper->field_user_realname->set('hello world');
  9. $wrapper->save();

Poi Polygon

  1. $polygon = 'POLYGON (1 2, 2 3,3 4)';
  2. $geometry = geoPHP::load($polygon);
  3. $wrapper->field_poi->set(geometry);
发表在 Drupal | 留下评论