Drupal 7制作可滚动的Banner

需要的模块:config_pages(用于配置Banner图片,需要一个多图字段), flexslider, linkimage

function mymodule_block_info() {
  // This example comes from node.module.
  $blocks['banner'] = array(
    'info' => t('Banner'),
    'cache' => DRUPAL_NO_CACHE
  );

  return $blocks;
}

function mymodule_block_view($delta = '') {
  if($delta == 'banner') {

    $config = config_pages_config('banner');
    if ($config) {
      // load flexslider.
      $optionset = flexslider_optionset_load('default');
      flexslider_add('block-invest-banner', $optionset);
    }

    // render item.
    $items = array();
    foreach($config->raw()->field_banner_slider['und'] as $image_item) {
      $items[] = theme('linkimage_formatter', array('item' => $image_item, 'image_style' => 'newbanner'));
    }
    $item_list = theme('item_list', array('items' => $items, 'attributes' => array('class' => array('slides'))));
    return array(
      'content' => '
' . $item_list . '
', ); } }

mysql 分区

分区的作用是将一个表或者索引物分解为更小,更可管理的部分, 如果表中存在主键或者是唯一索引时,分区列必须是唯一索引的一部分
比如:
查询数据系统只会获取指定的分区.
数据量会变小
易于管理

查看是否启用分区:

mysql> show plugins;
Name: partition

分区的类型:
range分区: 行数据基于属于一个给定连续区间的列值放入分区, 必须明确的指定一个给定的列值和列值集
list分区:和range分区类似, 只是list分区面向的是离散的值, 必须明确的指定一个给定的列值和列值集
hash分区: 根据用户自定义的表达式返回的值进行分区, 返回的值不能为负数, 目的是将数据均匀的分布在预先定义的分区中
key分区:根据mysql数据库提供的哈希函数来进行分区

查看分区信息: select * from information_schema.PARTITIONS where table_name='sales'
查看sql查询的分区信息:explain partitions select * from mysqltest.sales where date>='2016-01-01' and date<'2017-01-01';
删除分区: alter table sales drop partiion p2018;

Drupal 8 Entity常用

获取一个Entity:

$entity = \Drupal::entityTypeManager()->getStorage('MyEntityType')->load(9);
dpm($entity);

修改Entity 数据

$entity = \Drupal::entityTypeManager()->getStorage('MyEntityType')->load(9);
$entity->myfield = 1;
$entity->save();

Mysql innodb 文件

Innodb数据存储

Innodb存储引擎将存储的数据按表空间进行存放,默认会一个10MB, 名字为ibdata1的文件

innodb_data_file_path = ibdata1:2000MB; ibdata2:2000MB:autoextend;

设置了innodb_data_file_path 参数以后所有innodb引擎的数据都会保存在设置的文件里面
当参数innodb_file_per_table设置了以后, 每个innodb表的将生成一个单独.idb的文件来存储数据, 这个单独的.idb表空间文件只存储该表的数据,索引和插入缓冲等信息. 其它的信息还是放在默认的表空间里面, 表空间又由段(segment),区(extent),页(page)组成.

Innodb 日志文件

在mysql文件下面有两个文件ib_logfile0和ib_logfile1, 这两个是innodb的日志文件,记录了innodb引擎的事务日志,也叫做innodb重做日志
重做日志文件的主要目的是,万一事务失败或者事务执行时断电,这时可以通过重做日志文件来恢复
设置参数:

  • innodb_log_file_size
  • innodb_log_file_in_group
  • innodb_mirrored_log_groups
  • Mysql 二进制文件

    二进制文件记录了对数据库执行的所有操作,不包括select和show. 开启二进制文件会使mysql性能下降百分之1
    作用:
    1. 恢复(recovery): 用户恢复数据
    2. 复制(replication): 可以使备用mysql服务器(slave)进行实时同步

    我的 datadir是/usr/local/var/mysql/.
    先确定log-bin是否则开启了

    mysql> show variables LIKE "log_bin"
    

    如果没有开启, 修改my.cnf

    log_bin=bin-log  #bin-log是名字
    

    此时再显示datadir目录会看到两个文件

    -rw-rw----     1 _mysql  _mysql   326B  6 14 17:52 bin-log.000001
    -rw-rw----     1 _mysql  _mysql    17B  6 14 17:52 bin-log.index
    

    bin-log.000001 二进制日志文件
    bin-log.index 二进制日志索引文件

    配置

    max_binlog_size=1024M
    

    查看日志, mysql自带了一个mysqlbinlog的工具

    sudo mysqlbinlog --start-position=1 bin-log.000001 | more
    

    Drupal 修改Node显示模式

    经常可能有这么一种需求,当判断node一个文件字段,传的是图片的时候用default显示,如果是传了视频那换种显示方式比如用摘要的显示模式去显示

    /**
     * Implements hook_entity_view_mode_alter().
     *
     * @param $view_mode
     * @param $context
     */
    function mymodule_entity_view_mode_alter(&$view_mode, $context) {
      if (!empty($context['entity']->type) && $context['entity']->type == 'material_other' && !empty($context['entity']->sco_manifest)) {
        $view_mode = 'teaser';
      }
    }