【Mysql】随机取几条数据

Continue Read..
SELECT  LOGO,MID,TITLE,PRICE,LINKNAME 
FROM t_secondinfo AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(ID) FROM t_secondinfo)) AS ID) AS t2 
WHERE t1.ID >= t2.ID 
ORDER BY t1.ID ASC LIMIT 5;

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

yii2不使用自带redis

Continue Read..

yii2自带redis不需要安装php扩展,参数偏向cli方式,不太方便,

不习惯的朋友可以自己写个组件,使用扩展形式的,代码如下

没有写权限设置,需要的自己填加,不要将redis端口暴露在公网

<?php
/**
 * 此文件放入components目录
 * 配置文件加入
 * 'redis'=>[
 *			'class'=>'app\components\redisClient',
 *			'hostname'=>'127.0.0.1',
 *			'port'=>6379,
 *			'database'=>1,
 *		],
 *	
 * 使用:	
 * $redis = yii::$app->redis->getInstance();
 * $redis is object 
 * @author admin
 *
 */
namespace app\components;

use Yii;
use yii\base\Component;
class redisClient  extends Component {
	public $hostname = '';
	public $port = '';
	public $database = '';
	public $_client = '';
	
	function init(){
		$this->_client = new \Redis;
		$this->_client->connect($this->hostname, (int)$this->port);
		if (isset($this->password)) {
			if ($this->_client->auth($this->password) === false) {
				throw new \Exception('Redis authentication failed!');
			}
		}
        $this->_client->select((int)$this->database);
        return $this->_client;
	}
	
	function getInstance(){
		if(!empty($this->_client)){
			return $this->_client;
		}
		return false;
	}
}

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【JS】懒数据加载图片

Continue Read..
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>图片</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />

</head>
<style>
#div1 {
overflow: hidden;
text-align: center; 
width: 100%;
}

li {
width:100%;  margin:0 auto; height:280px;max-height:480px;
}
.qximg-div { text-align: center; width: 100%;}
.qximg-div img {width:95%; max-width:640px; max-height:280px;  margin:0 auto; margin-top: 15px;}
.qximg-div p { width:95%; margin: 0 auto; font-size: 16px; background-color: #333; position: relative; top: -10px; z-index: 100; color: #fff; text-align: left;}


</style>
<center>
<body>
<!-- 
<div class="qximg-div">
        <div class="qximg">
{{foreach from=$newarr item=val key=key}}
<img src="{{$val.url}}">
<p>{{$val.title}}</p>
{{/foreach}}
           
        </div>
</div>
 -->
<div id="div1" class="qximg-div">
<ul>
{{foreach from=$newarr item=val key=key}}
{{if $key  lt 3}}
<img src="{{$val.url}}" >
<p>{{$val.title}}</p>
{{else}}
<li data-src="{{$val.url}}" ></li>
<p >{{$val.title}}</p>
{{/if}}
{{/foreach}}
</ul>
</div>

<script type="text/javascript">
function setImg(index) {
var oDiv = document.getElementById("div1")
var oUl = oDiv.children[0];
var aLi = oUl.children;
//alert(index);
if (aLi[index].dataset) {
var src = aLi[index].dataset.src;
} else {
var src = aLi[index].getAttribute('data-src');
}
var oImg = document.createElement('img');
oImg.src = src;
if (aLi[index].children.length == 0  && index%2==0) {
aLi[index].appendChild(oImg);
}
}

function getH(obj) {
var h = 0;
while (obj) {
h += obj.offsetTop;
obj = obj.offsetParent;
}
return h;
}
window.onscroll = function() {
var oDiv = document.getElementById('div1');
var oUl = oDiv.children[0];
var aLi = oUl.children;
for (var i = 3, l = aLi.length; i < l; i++) {
var oLi = aLi[i];
//检查oLi是否在可视区域 
var t = document.documentElement.clientHeight
+ (document.documentElement.scrollTop || document.body.scrollTop);
var h = getH(oLi);
if (h < t || h<480) {
setTimeout("setImg(" + i + ")", 500);
}
}
};
</script>

</body>
</center>
</html>

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【YII2】配置多数据库和主从数据库

Continue Read..

在web.php里面配置主从数据库

 

        'db_c2b' => [

            'class' => 'yii\db\Connection',

            'dsn' => 'mysql:host=xxxxx;dbname=xxxxx',

            'username' => 'xxxx',

            'password' => 'xxxx',

            'charset' => 'utf8',

            // 从服务器的通用配置

            'slaveConfig' => [

                'username' => 'xxxxx',

                'password' => 'xxxxx',

                'charset' => 'utf8',

            ],

            // 从服务器配置列表

            'slaves' => [

                ['dsn' => 'mysql:host= ;dbname=c2b']

            ],

        ],

 

 

配置多个数据库 调用的时候需要在model层重写

public static function getDb() {

return \Yii::$app->db_c2b;  

}

 

 

比如你这里配置2个数据库 一个普通 一个主从 

如果你在主从里面不重写的话  会调用 普通的库 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

yii2-admin权限管理使用说明

Continue Read..

yii2-admin是基于yii2的rbac写的管理模块,安装请见https://github.com/mdmsoft/yii2-admin

安装好后访问http://url/admin

Grand Access      对用户授权,用户自己在user表添加

Roles                 角色管理,设置角色的权限

Permissions        权限管理,设置某一权限可访问的router

Routes               可访问的router管理

Rules                 规则类设置

Menus                目录设置

 

在授权时,可以为用户赋予角色,当某一用户需要在某一角色上加一些权限时,可配合赋予Permissions。

 

rules

即自定义规则,在设置Roles和Permissions时可设置自定义的规则

你需要先在components目录实现一个自定义rule,代码类似下面

<?php
namespace app\components;

use yii\rbac\Rule;

/**
 * Checks if authorID matches user passed via params
 */
class TestRule extends Rule
{
	public $name = 'isAuthor';

	/**
	 * @param string|integer $user the user ID.
	 * @param Item $item the role or permission that this rule is associated with
	 * @param array $params parameters passed to ManagerInterface::checkAccess().
	 * @return boolean a value indicating whether the rule permits the role or permission it is associated with.
	 */
	public function execute($user, $item, $params)
	{	var_dump($user, $item, $params);exit;
		return isset($params['post']) ? $params['post']->createdBy == $user : false;
	}
}

设置rulename和class name,

name:testrule

class name:app\components\TestRule

提交即可设置一个自定义规则,后面在设置roles和permissions的时候就可以填写规则名来使用了,

在设置roles和permissions时可以看到data框,这里可以填json数据,供rule类初始化。


Menus

目录,用于根据用户权限显示目录,所见即可操作

name          router显示名称,如“测试方法A”

parent name 父router,输入控制器前几个字母会自动提示

route           router,如“/test/a”

order           排序,数字,小的靠前

data             附加的json数据,getAssignedMenu的callback中使用

MenuHelper::getAssignedMenu((int)Yii::$app->user->id,null,null,true)返回层级array,

第四个参数是否刷新,true为强制刷新,不使用缓存

 

如何判断权限

在控制器中加入如下代码

public function beforeAction($action){
		$session = Yii::$app->session;
		if (!$session->isActive){
			$session->open();
		}
		if(empty($session['userName'])){
			$this->redirect('/login');
			return true;
		}
		$CA = '/'.yii::$app->controller->id.'/'.$action->id;
		if(!\Yii::$app->user->can($CA)){
			die($session['userName']." 没有权限访问 ".$CA);
		}
		return true;
	}
die可以改为错误提示页面

rbac权限原理比较简单,不懂的可以子看下源代码,或看下yii2的rbac文档http://www.yiiframework.com/doc-2.0/guide-security-authorization.html

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权