Java有Maven, Node.js有npm, ROR有gem, 这些语言的程序员在开心地使用包管理工具加速开发效率时,PHPer们还在复制粘贴的黑暗中。PHP在Composer之前,包管理的历史不堪回首。
在相当长的一段时间内,如果应用依赖于第三方库,PHPer需要拷贝这些库的源代码, 或者通过PEAR、PECL安装。如果第三方库又依赖于更多的第三方库,那么很快就会进入依赖的黑洞。直到Composer出现,PHPer们看到了属于PHP的包管理的曙光。 Continue reading
Java有Maven, Node.js有npm, ROR有gem, 这些语言的程序员在开心地使用包管理工具加速开发效率时,PHPer们还在复制粘贴的黑暗中。PHP在Composer之前,包管理的历史不堪回首。
在相当长的一段时间内,如果应用依赖于第三方库,PHPer需要拷贝这些库的源代码, 或者通过PEAR、PECL安装。如果第三方库又依赖于更多的第三方库,那么很快就会进入依赖的黑洞。直到Composer出现,PHPer们看到了属于PHP的包管理的曙光。 Continue reading
在文件 include/taglib/channelartlist.lib.php第67行左右,
查找:
0 |
$tpsql = " reid=0 AND ispart<>2 AND ishidden<>1 AND channeltype>0 "; |
修改为:
0 |
$tpsql = " reid=0 AND ishidden<>1 AND channeltype>0 "; |
即删除 AND ispart<>2
完成。
栏目为外部链接时默认使用新窗口打开,其它栏目使用当前窗口打开的修改方法。
查找:
0 |
$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]); |
在代码的下一行增加:
0 1 2 |
if($typeids[$i]['ispart'] == 2){ $pv->Fields['typeurl'] = $pv->Fields['typeurl'].'" target="_blank'; } |
这样,在输出的链接后就自动增加了新窗口打开的代码了。 blank
文件位置:/include/taglib/channelartlist.lib.php
查找:
0 |
$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]); |
上面代码大约在100行左右,在其下方增加代码:
0 1 2 3 4 |
if($typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['id'] || $typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['topid'] ){ $pv->Fields['currentstyle'] = $currentstyle ? $currentstyle : 'active'; }else{ $pv->Fields['currentstyle'] = ''; } |
保存。
使用示例: Continue reading
PHP日志Class,抄来的一个php日志类,略有修改
使用实例
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php require_once 'log.php'; //初始化日志 $logHandler= new CLogFileHandler("../logs/".date('Y-m-d')."/".date('Y-m-d-H-i-s').'.log'); // 日志保存位置 $log = Log::Init($logHandler, 15); // 测试数据 $arr = array('s1'=>2, 's3'=>8); // 测试一 Log::DEBUG("query:" . json_encode($arr)); Log::DEBUG("SUCCESS"); // 测试二 Log::INFO("query:" . json_encode($arr)); Log::INFO("支付成功"); // 测试三 Log::WARN("query:" . json_encode($arr)); Log::WARN("支付出错"); // 测试四 Log::ERROR("query:" . json_encode($arr)); Log::ERROR('程序出错'); |
PHP日志类 Continue reading
5.6之后DEDE加入了文章按权重排序的功能,但很多童鞋调整权重数值,并在arclist标签里加上orderby=’weight’,却发现无任何效果,原因是系统默认是不开启该功能的。
正确的使用方法如下:
{dede:arclist titlelen='38' flag='h' noflag='a' isweight='y' orderby='weight'}
{/dede:arclist}
红色部分就是开启 weight排序,再加上orderby=’weight’,就OK了
——————————————————————————–
另外使用arclist标签时,想按照权重越大越靠前来排序,则需要小动一下arclist.lib.php文件,方法如下:
打开\include\taglib\arclist.lib.php
大概在572行
$orderWeight = list_sort_by($orderWeight, ‘weight’, ‘asc’);
修改为(红色部分)
$orderWeight = list_sort_by($orderWeight, ‘weight’, ‘desc‘);
打开include/arc.searchview.class.php
查找:
0 1 |
require_once(DEDEINC."/taglib/hotwords.lib.php"); require_once(DEDEINC."/taglib/channel.lib.php"); |
在下面加入:
0 1 |
require_once(DEDEINC."/taglib/arclist.lib.php"); require_once(DEDEINC."/taglib/channelartlist.lib.php"); |
找到:
0 1 2 3 |
else if($tagname=="hotwords") { $this->dtp->Assign($tagid,lib_hotwords($ctag,$this)); } |
在下面插入:
0 1 2 3 4 5 6 7 |
else if($tagname=="arclist") { $this->dtp->Assign($tagid,lib_arclist($ctag,$this)); } else if($tagname=="channelartlist") { $this->dtp->Assign($tagid,lib_channelartlist($ctag,$this)); } |
这样就可在dedecms织梦搜索页面使用arclist和channelartlist标签调用数据了。
说它是自动识别,其实只是用了字符串切割的方法,如果勾选提取第一个图片萎缩路人图的话,文章的缩略图和第一张图片只多了一个“-lp”的字符串,
用php的“str_replace”函数切割一下就行了。方法如下:
打开 /include/common.func.php在最后面加入如下代码:
0 1 2 3 4 |
function firstpic($str_pic) { $str_sub=str_replace("-lp","","$str_pic"); //删除缩略图中的"-lp"。 return $str_sub; } |
标签中调用:
0 |
[field:litpic function=firstpic('@me')/] |
直接调用:
0 |
{dede:field name='litpic' function="firstpic(@me)"/} |
通过比较明显第二种方法比较好。但是如果自己上传缩略图的话,第二种就用不了了,这时候就要再用另一种方法:
打开 /include/helpers/archive.helper.php 在最后面加入如下代码
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * 调用缩略图的原始图片 * * @param string aid * @return string */ if(!function_exists('getImgs')) { function getImgs($aid) { global $dsql; $query = "SELECT channel FROM `#@__archives` WHERE id='$aid'"; $row = $dsql->GetOne($query); $row = GetChannelTable($row['channel']); $query = "select body FROM `{$row['addtable']}` where aid='$aid'"; $row = $dsql->GetOne($query); preg_match('/<img[^>]*src[=\"\'\s]+([^\.]*\.[^\"\'>]*)[\"\']?[^>]*>/',$row['body'],$arr); return $arr[1]; } } |
或者,可以简化一些:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/** * 调用缩略图的原始图片 * * @param string aid * @return string */ if(!function_exists('getImgs')) { function getImgs($aid) { $query = "select body FROM `#@__addonarticle` where aid='$aid'"; $row = $dsql->GetOne($query); preg_match('/<img[^>]*src[=\"\'\s]+([^\.]*\.[^\"\'>]*)[\"\']?[^>]*>/',$row['body'],$arr); return $arr[1]; } } |
标签中调用:
0 |
[field:id function=getImgs(@me)/] |
具体怎么实现功能,还要看自己网站的实际情况了。
一、把所有二级域名301重定向到一级域名上,如:把1.mrdede.com,abc.mrdede.com等重定向到mrdede.com
0 1 2 3 4 5 |
RewriteEngine on ErrorDocument 404 /404.html RewriteCond %{HTTP_HOST} ^(.*).mrdede.com [NC] RewriteRule ^(.*)$ http://mrdede.com [L,R=301] RewriteBase / |
二、所一级域名301重定向到www二级域名上,即把mrdede.com 301重定向到www.mrdede.com
0 1 2 3 4 5 |
RewriteEngine on ErrorDocument 404 /404.html RewriteCond %{HTTP_HOST} ^mrdede\.com [NC] RewriteRule ^(.*)$ http://www.mrdede.com [L,R=301] RewriteBase / |
一、在文件 /include/common.inc.php 中的“define('DEBUG_LEVEL', FALSE);
”后增加如下代码:
0 1 2 3 4 5 6 7 8 9 |
/* ============织梦先生>>=============== */ /* 定义当前请求的系统常量 */ define('NOW_TIME', $_SERVER['REQUEST_TIME']); define('REQUEST_METHOD',$_SERVER['REQUEST_METHOD']); define('IS_GET', REQUEST_METHOD =='GET' ? true : false); define('IS_POST', REQUEST_METHOD =='POST' ? true : false); define('IS_PUT', REQUEST_METHOD =='PUT' ? true : false); define('IS_DELETE', REQUEST_METHOD =='DELETE' ? true : false); define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST['ajax']) || !empty($_GET['ajax'])) ? true : false); /* ============<<织梦先生=============== */ |
二、在文件 /include/help/helpers\extend.helper.php 最后增加如下代码: Continue reading