欢迎光临
我们一直在努力

DedeCMS中首页、列表页如何调用文章正文内容的实现方法

悠然见南山阅读(47)评论(0)

首页调用代码:

  1. {dede:arclist row=‘1’ typeid=‘1’ addfields=‘body’ channelid=‘1’}
  2. <h3>[field:fulltitle/]</h3>
  3. <h5>[field:shorttitle/]</h5>
  4. <p>[field:body function=’cn_substr(html2text(@me),100)‘/]</p>
  5. {/dede:arclist}

解析:

1、addrields=”字段1,字段2…”

2、idlist=”文章ID”(可不写!!!)idlist=’1′

3、typeid 栏目id

4、channelid=”模型ID”,普通文章默认为1(查看方法:核心–频道模型–内容模型管理–id号)

5、function=’cn_substr(html2text(@me),100)’ 过滤文章样式,并限制100字符

 

列表页调用代码:

进入后台:核心–频道模型–内容模型管理-普通文章,点击修改

在 基本设置 中,找到 列表附加字段 添加 body

  1. {dede:list pagesize=’18’ addfields=’body’}
  2.     <li>
  3.     <p><a href=“[field:arcurl/]” title=“[field:title/]”>[field:title/]</a></p>
  4.     <p>[field:body/]</p>
  5.     </li>
  6. {/dede:list}

 

appcan 微信支付

悠然见南山阅读(136)评论(0)

客户端

<!DOCTYPE html>
<html class="um landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px">
    <head>
        <title></title>
        <meta charset="utf-8">
        <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
        <link rel="stylesheet" href="css/fonts/font-awesome.min.css">
        <link rel="stylesheet" href="css/ui-box.css">
        <link rel="stylesheet" href="css/ui-base.css">
        <link rel="stylesheet" href="css/ui-color.css">
        <link rel="stylesheet" href="css/appcan.icon.css">
        <link rel="stylesheet" href="css/appcan.control.css">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <script type="text/javascript">

    var prepayId;
    function getPrepayId(){
      //  alert('getPrepayId');
      $.ajax({
        url : 'http://www.网址.com/index.php?g=api&m=Api&a=getPrepayId',
        type : "post",
        data : {
            order_no:订单号,
            uid: uid,
        },
        datatype : "json",
        timeout : 30000,
        success : function(data, status, requestCode, response, xhr) {
            data = JSON.parse(data);
            if (data.code == 1) {
                alert(1);
                var params = data.data;
                var data = JSON.stringify(params);
                alert(data);
                uexWeiXin.getPrepayId(data);
            } else {
                alert(0);
                alert(data.tips);
            }
        },
        error : function(xhr, erroType, error, msg) {
            alert('网络问题');
        }
    });
     
    }
    function startPay(){
        alert(prepayId);
      $.ajax({
        url : 'http://网址.com/index.php?g=api&m=Api&a=startPay',
        type : "POST",
        data : {
            prepayid:prepayId,
            noncestr:'weradfdgdvccfexs1',
        },
        datatype : "json",
        timeout : 30000,
        success : function(data, status, requestCode, response, xhr) {
            data = JSON.parse(data);
            if (data.code == 1) {
                var params = data.data;
                 var data = JSON.stringify(params);
                 uexWeiXin.startPay(data);
            } else {
                alert(data.tips);
            }

        },
        error : function(xhr, erroType, error, msg) {
            appcan.window.openToast("获取数据失败", 2000, 5, 0);
        }
    });
    
       
    }
          //注册回调函数
        window.uexOnload = function(){
                uexWeiXin.cbGetPrepayId = cbGetPrepayId;
                uexWeiXin.cbStartPay = cbStartPay;
        
        }
    function cbGetPrepayId(info){
        console.log(info);
        alert(info);
        prepayId = JSON.parse(info).prepay_id;
        alert('prepayId:'+prepayId);
    }
    function cbStartPay(info){
        console.log(info);
        alert('支付成功:'+info);
    }
    </script>
    </head>
    <body class="um-vp bc-bg" ontouchstart>
        <div class="tit">支付</div>
                <div class="conbor">
                    <div class="consj">
                            <input class='btn' type='button' value='getPrepayId' οnclick='getPrepayId()'>
                
                            <input class='btn' type='button' value='startPay' οnclick='startPay()'>
                
                
                    </div>
                </div>
    </body>
    <script src="js/appcan.js"></script>
    <script src="js/appcan.control.js"></script>
    </body>
    <script>
        appcan.ready(function() {
            uexWeiXin.registerApp('wx4705bd987b714abb');
        });

    </script>
</html>

php 服务器端

 

 

  

MySQL Insert数据量过大导致报错 MySQL server has gone away

悠然见南山阅读(172)评论(0)

接手了同事的项目,其中有一个功能是保存邮件模板(包含图片),同事之前的做法是把图片进行base64编码然后存在mysql数据库中(字段类型为mediumtext)
然后保存三张图片(大概400k)的时候报错
MySQL server has gone away

然后查看官方文档https://dev.mysql.com/doc/ref…


得知可能是以下几个原因 
服务器超时
服务器断开
向服务器发送不正确或太大的查询
INSERT或者 REPLACE是插入大量行

开始以为是服务器超时导致的,在网上搜的解决办法(好吧,先试一下 ,发现还是不行):


&lt;?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
                                        PDO::ATTR_PERSISTENT =&gt; true
));
?&gt;
Note:
如果想使用持久连接,必须在传递给 PDO 构造函数的驱动选项数组中设置 PDO::ATTR_PERSISTENT 。如果是在对象初始化之后用 PDO::setAttribute() 设置此属性,则驱动程序将不会使用持久连接。

直接在Navicat上执行sql语句,报错 [Err] 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes
搜索得知:当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的信息包时,将发出“信息包过大”错误,并关闭连接。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与MySQL服务器的连接”错误。
客户端和服务器均有自己的max_allowed_packet变量,因此,如你打算处理大的信息包,必须增加客户端和服务器上的该变量。一般情况下,服务器默认max-allowed-packet为1MB
这下问题精确定位了,就是max_allowed_packet配置的问题,

查一下配置 show VARIABLES like ‘%max_allowed_packet%’; 发现是1048576(1024*1024),也就是1MB,
但是我的图片才400K,不应该啊,然后网上一查:Base64-encoded 数据要比原始数据多占用 33% 左右的空间。
还是不确定,直接strlen()返回base64字符串长度1451334,utf8编码下英文字符1字符占1字节,所以base64编码后是1451334B(这个是我自己的理解),大于1MB

修改max_allowed_packet配置 set global max_allowed_packet = 410241024;

发现问题完美解决

人人商城开启秒杀功能 错误信息: 未配置 redis, 请检查 data/config.php 中参数设置

悠然见南山阅读(493)评论(0)

亲测解决好的,网上找的答案。说问题半遮半掩的。

首先,

1、安装redis组件,这里注意总共只能安装一个redis组件。如果安装错了PHP版本,那只能在软件管理里卸载了重装,在你需要的php版本下安装redis组件。

2、上面操作正确的话,修改人人商城两个地方

修改微擎配置文件

(1)修改 /data/config.php 35行左右 查找如下代码

$config[‘setting’][‘cache’] = ‘mysql’;

改成:

$config[‘setting’][‘cache’] = ‘redis’;

(2)在最下面添加代码

// ————————–  CONFIG REDIS  ————————— //

$config[‘setting’][‘redis’][‘server’] = ‘127.0.0.1’;//如果redis服务器在别的机器,请填写机器的IP地址。

$config[‘setting’][‘redis’][‘port’] = 6379;

$config[‘setting’][‘redis’][‘pconnect’] = 0;

$config[‘setting’][‘redis’][‘timeout’] = 1;

$config[‘setting’][‘redis’][‘requirepass’] = ”;

完整添加以上代码。

刷新人人商城,你会看到整点秒杀功能正常了。

亲测成功。

作者:糟老子
链接:https://www.jianshu.com/p/ba2baa3468e5
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Windows下为PHP安装redis扩展

悠然见南山阅读(212)评论(0)

PHP使用redis扩展

 

一.php安装redis扩展
1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本
 
 

2.根据PHP版本号,编译器版本号和CPU架构,

选择php_redis-2.2.5-5.6-ts-vc11-x64.zip和php_igbinary-1.2.1-5.5-ts-vc11-x64.zip

下载地址:

http://windows.php.net/downloads/pecl/releases/redis/2.2.7/

http://windows.php.net/downloads/pecl/releases/igbinary/2.0.1/

 
3.解压缩后,将php_redis.dll和php_igbinary.dll拷贝至php的ext目录下
 

4.修改php.ini,在该文件中加入:

; php_redis

extension=php_igbinary.dll

extension=php_redis.dll

注意:extension=php_igbinary.dll一定要放在extension=php_redis.dll的前面,否则此扩展不会生效
 
5.重启Apache后,使用phpinfo查看扩展是否成功安装
 

新建一个test.php页面

<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1’,6379);
$redis->set(‘test’,’hello redis’);
echo $redis->get(‘test’);
?>
hello redis
6. 要在Windows中使用redis需要下载Windows版的redis软件

在wordpress中开启错误日志error log报告

悠然见南山阅读(435)评论(0)

许多WordPress爱好者在开发WordPress主题和模板的过程中,经常会遇到这样那样的程序错误,这时候我们需要排查错误,可以通过开启错误日志error log报告。

下面就来告诉大家,如何在WordPress站点文件中开启错误日志。

1.进入网站根目录找到wp-config.php文件

我们通过ftp登陆到网站后台,在wordpress网站文件的根目录中找到wp-config.php,然后进入在线编辑

2.wp-config.php文件中包含链接数据库的相关信息

确保以下截图中的数据库名称及数据库用户账号密码为对应正确的数据。

*数据库名称建议使用较为复杂的密码形式,否则容易被爬虫病毒入侵!

3.我们找到define(‘WP_DEBUG’, false);这一行

4.修改代码

将上述截图代码改为:

ini_set('log_errors','On');
ini_set('display_errors','On');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);

就可以查看wordpress网站的错误日志了。

 

WordPress中文tag404解决,打不开页面

悠然见南山阅读(491)评论(0)

这个是编码问题造成的.默认不支持中文编码.可以修改WordPress根目录中的wp-includes\class-wp.php 或wp-includes\class.php 文件

大约154行

$pathinfo = isset( $_SERVER[‘PATH_INFO’] ) ? $_SERVER[‘PATH_INFO’] : ”;

修改为类似这种

 

$pathinfo = mb_convert_encoding($_SERVER[‘PATH_INFO’], ‘UTF-8’, ‘GBK’);

 

向下找

list( $req_uri ) = explode( ‘?’, $_SERVER[‘REQUEST_URI’] );

$req_uri = $_SERVER[‘REQUEST_URI’;

修改为类似这种

$req_uri = mb_convert_encoding($_SERVER[‘REQUEST_URI’], ‘UTF-8’, ‘GBK’);

其实就是增加了一个编码转换函数mb_convert_encoding()

在 Windows 中 搭建laravel开发环境

悠然见南山阅读(604)评论(0)

1、准备工作

1.1PHP集成环境

这里我们使用的是XAMPP,XAMPP是一个功能强大的建站集成软件包,采用一键安装的方式,包含PHP7.0、Mysql、Tomcat等。最新版下载地址:PHP 5.6.28版(32位)|PHP 7.0.13版(32位)这两个版本的XAMPP都不再支持WindowsXP操作系统,这意味着你需要更高版本的Windows操作系统。

注意:由于Laravel5.1要求PHP 5.5.9+(含)版本,所以要针对该PHP版本要求选择合适的XAMPP。

1.2安装Composer

Windows下最新版本Composer下载:Composer-Setup.exe

安装完成后,如果Composer安装包安装/更新缓慢,可以配置使用国内镜像进行包依赖的安装和升级,具体可参考这篇文章《Composer中国全量镜像》。

PS:想当年Composer安装慢如牛,一个更新需要几个小时,不过现在明显感觉速度快了好多,不需要设置国内镜像,也可以顺利进行操作(我还担心会被墙呢)。

1.3配置系统路径

要在控制台中使用composer命令,需要将Composer及PHP的可执行文件(.exe/.bat)所在目录配置到系统环境变量Path中。PHP对应的php.exe在XAMPP安装目录中找,Composer对应的composer.bat文件所在目录默认为C:\ProgramData\ComposerSetup\bin。这里不再赘述

安装Composer时需要添加PHP的路径,在给我宋哥配置的时候他先装的composer,因为php版本太低,又重新装了xampp导致php路径错误,xampp默认的php路径是E:\xampp\php\php.exe.PS:因为我的xampp是装在e盘下的所以盘符是E:\

1.4其他要求

PHP必备扩展:OpenSSL、PDO、Mbstring、Tokenizer。检查下这几个PHP扩展是否已安装,如果没有安装需要进行安装。

安装完成后重新启动XAMPP (stop+start)。

PS:一般情况下不需要配置,如果无法工作大概是两个原因(1)没有php的扩展程序–在xampp\php\ext\下面查看对应的.dll文件。(2)配置文件被注释是掉–在xampp\php\下面的php配置文件中取消对扩展的注释

2、使用Composer安装Laravel

以上准备工作做好后,接下来正式开始安装新的Laravel应用。首先我们直接通过Composer安装Laravel。

进入XAMPP安装目录的htdocs文件夹:

cd /path/to/xampp/htdocs

在该目录下,执行如下Composer命令:

composer create-project laravel/laravel

–prefer-dist

即可在该目录中安装一个目录名的laravel的新的Laravel应用,如果你想指定自定义的安装目录名,如laravelapp,则使用如下命令即可:

composer create-project laravel/laravellaravelphp –prefer-dist

如果安装过程中报错:

[RuntimeException]

Could not load packageclasspreloader/classpreloader in http://packagist.org:[UnexpectedValueException] Could not parse version constraint ^1.2.2: Invalidversion string “^1.2.2”

则表示需要更新Composer:

composer self-update

执行完更新后再次执行安装命令即可。

完成安装需要一定时间,等待安装完成后,即可在浏览器中通过http://localhost/laravelapp/public来访问新安装的Laravel应用:

3、使用Laravel安装器安装Laravel

首先通过如下命令安装Laravel安装器:

composer global require “laravel/installer=~1.1”

确保laravel.bat所在目录(默认是C:\Users\用户名\AppData\Roaming\Composer\vendor\bin,将”用户名”换成你的当前用户名)位于系统路径中,否则将不能调用laravel命令。

接下来,就可以通过如下命令安装新的Laravel应用了,比如我们还是创建一个名为laravelapp的应用:

laravel new laravelapp

使用这种方法创建Laravel应用要比直接使用Composer安装要快得多:

同样可以使用上面配置的http://localhost/laravelp/public访问刚刚安装的Laravel应用:

4、使用Laravel官方安装包

上述安装方法有些复杂,可以在Laravel官方的Github上下载对应的包,可点击下面的下载链接下载最新版本的Laravel官方包,但是这个包里面没有一个叫vendor的文件需要执行composer install命令来获取

首先切换到安装包目录下面

Cd /xampp/htdocs/laravel-5.3.16

然后执行composer install

Composer install

5、使用Laravel一键安装包

如果你想要略过上面使用Composer或Laravel安装器安装的繁琐过程,而直接使用一个现成的、已安装好依赖的Laravel包,可点击下面的下载链接下载最新版本的Laravel包:

Laravel最新一键安装包

其实就是将我们通过上面两种方式生成的Laravel应用打个包而已。经测试有效:

注意:为安全起见,下载一键安装包后,最好进入应用目录执行php artisan

key:generate命令重新生成应用APP_KEY。

PS:从编辑器co过来格式全变了,凑合吧

作者:DivenYang
链接:https://www.jianshu.com/p/8e1c6d52cc91
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

https配置与安卓访问https失败,错误:fail ssl hand shake error

悠然见南山阅读(907)评论(0)

最近又遇到一个安卓访问有问题,苹果和电脑访问正常的现象;安卓访问https失败,错误:fail ssl hand shake error。

对于这个奇葩的错误,就之前的经验,只能反思是否是证书配置错误。网上有遇到过的,但是都么有给出修改方式。

后来找到了两个检测工具:

https://www.myssl.cn/tools/check-server-cert.html

https://www.ssllabs.com/ssltest/analyze.html

通过这两种检测工具检测后,基本就知道是什么原因了,要么是协议配置不支持,要么是证书缺失。

我们遇到的情况就是中间证书缺失,当时申请的时候按照旧的方式去申请,会生成两个.cer文件。

需要将:ovroot.cer中间证书copy出来贴到server.cer证书的后面,问题就解决了。

附带Nginx的ssl配置手册:

一、证书整理

ovroot.cer文件为服务商中间证书,server.cer为服务证书,需要将两个证书并使用,否则会出现安卓无法访问,会出现fail ssl hand shake error这个错误。

将ovroot.cer的证书复制出来贴到server.cer内容后面,不要有空行;

二、Nginx的配置如下:

server {

listen 443;

server_name spdwechat.ctyun.cn;      #对应的主机域名

ssl on;

ssl_certificate yun_cert/server.cer;//证书目录

ssl_certificate_key yun_cert/server.key;  #私钥

ssl_session_timeout 5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

ssl_prefer_server_ciphers on;

location / {

proxy_pass http://cpsapi;    #实际的程序监听地址

proxy_set_header Host $host;

proxy_set_header X-Real-Ip $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto  $scheme;

}

access_log /server/logs/nginx/cps_rest_access.log main;

}

要支持TLSv1.2协议;

 

微信h5支付提示“网络环境未能通过安全验证 请稍后再试”

悠然见南山阅读(2000)评论(0)

function getIp(){    
    $ip '';    
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){        
        $ip $_SERVER['HTTP_X_FORWARDED_FOR'];    
    }elseif(isset($_SERVER['HTTP_CLIENT_IP'])){        
        $ip $_SERVER['HTTP_CLIENT_IP'];    
    }else{        
        $ip $_SERVER['REMOTE_ADDR'];    
    }
    $ip_arr explode(','$ip);
    return $ip_arr[0];
 }

更专业 更方便

联系我们联系我们