标签:
思路:把文档的移动功能,复制一份代码,改成文档复制功能
如果想要把一个栏目的所有文档复制到另一个栏目中如果没有好的办法就只能一个一个的重新建立,为了避免这种浪费时间的事,我们就在后台写一个批量复制的功能。下面是实现功能的具体步骤
修改文件dede/templets/content_batch_up.htm
修改头部脚本函数ShowHideMove()
添加复制栏目按钮
查找
继续阅读
标签:
思路:把文档的移动功能,复制一份代码,改成文档复制功能
如果想要把一个栏目的所有文档复制到另一个栏目中如果没有好的办法就只能一个一个的重新建立,为了避免这种浪费时间的事,我们就在后台写一个批量复制的功能。下面是实现功能的具体步骤
修改文件dede/templets/content_batch_up.htm
修改头部脚本函数ShowHideMove()
添加复制栏目按钮
查找
继续阅读
织梦系统默认的文章标题的最大长度为60字节,即30个汉字,如果文章标题超过60字节将会自动截断,导致标题显示不全,
而现在文章标题30个汉字是远远不能满足需要的,所以我们要做的就是突破系统默认的字数限制。
首先,修改织梦后台“系统->系统基本参数->其它选项->文章标题长度”为想要的长度,例如100或255(最大值),确定保存
然后,使用phpMyAdmin修改dede_archives(如前缀修改过请自动替换)中title长度为100或255。
也可以直接在织梦后台“系统->SQL命令行工具”执行SQL语句:
alter table #@__archives change title title varchar(100)
或
alter table #@__archives change title title varchar(255)
在做DedeCMS自定义表单发送邮箱的教程,发现大部分都是在php文件里写死固定字段内容,这样虽然也能实现自定义表单提交后发送指定邮箱,但是很不智能,华英雄 MaxWo想要一个我们自定义表单中有什么字段就发送什么字段的内容,这里就需要phpmailer来实现。
MAXWO就拿QQ邮箱来说明,其他邮箱(163,雅虎等邮箱方法一样):
一、登陆QQ邮箱——设置——账户,找到POP3/IMAP/SMTP,开启,现在的邮箱开启POP3/SMTP都要授权码,记下你的授权码,等一下是作为密码使用的。
二、
登陆网站后台——系统——基本参数设置——核心设置,
对比MAXWO标记的内容根据自己的邮箱填写完整:
邮箱和后台都OK后,我们开始用上phpmailer。
PHPMailer项目地址:https://github.com/PHPMailer/PHPMailer 使用git命令克隆到本地,或直接在该项目页面的右下方点击“ Download ZIP ”即可获取到完整的PHPMailer代码包,再到本地解压即可。
PHPMailer需PHP的socket扩展支持,而PHPMailer链接qq域名邮箱时需要ssl加密方式,固php还得openssl的支持,可以查看phpinfo,如下两项均存在则可以使用,其中openssl版本号之类不用管;许多虚拟主机中的php是不支持openssl扩展的,那你可能就悲剧了。
由于我们下载下来的PHPMailer文件夹里边的文件有很多我们是用不上的,所以我们也没必要浪费这些内存。我们可以对这个文件夹瘦身,在这里我只保存 了以下的几个文件:class.phpmailer.php、class.phpmaileroauth.php、class.pop3.php、 class.smtp.php、PHPMailerAutoload.php把这5个php文件放到你dedecms程序plus文件夹下(上面有下载文件地址:PHPMailer文件下载)三、最后一步,打开/plus/diy.php,找到代码(大概在第93行):
在它的前面一行加入代码:
//邮件发送开始
$fieldlist = $diy->getFieldList();$addvalue_ary1 = explode(‘,’, $addvalue);$addvalue_ary = array_filter($addvalue_ary1);$i = 1;foreach($fieldlist as $field=>$fielddata){ $emailbody .= $fielddata[0].’:’.$addvalue_ary[$i].'<br />’; $i ++;}global $cfg_smtp_server, $cfg_adminemail, $cfg_smtp_port, $cfg_smtp_usermail, $cfg_smtp_password, $cfg_webname, $cfg_basehost, $cfg_smtp_user;
//引入PHPMailer的核心文件 使用require_once包含避免出现PHPMailer类重复定义的警告
require_once(“class.phpmailer.php”);require_once(“class.smtp.php”);
//实例化PHPMailer核心类
$mail = new PHPMailer();
//是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
$mail->SMTPDebug = 1;
//使用smtp鉴权方式发送邮件
$mail->isSMTP();
//smtp需要鉴权 这个必须是true
$mail->SMTPAuth=true;
//链接qq域名邮箱的服务器地址
$mail->Host = $cfg_smtp_server;
//设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = ‘ssl’;
//设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587
$mail->Port = $cfg_smtp_port;
//设置smtp的helo消息头 这个可有可无 内容任意//
$mail->Helo = ‘免费开户申请’;
//设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名
$mail->Hostname = $cfg_basehost;
//设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
$mail->CharSet = ‘UTF-8’;
//设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->FromName = $cfg_smtp_user;
//smtp登录的账号 这里填入字符串格式的qq号即可
$mail->Username = $cfg_smtp_usermail;
//smtp登录的密码 使用生成的授权码(就刚才叫你保存的最新的授权码)
$mail->Password = $cfg_smtp_password;
//设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”
$mail->From = $cfg_smtp_usermail;
//邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
$mail->isHTML(true);
//设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大
$mail->addAddress($cfg_email,$cfg_smtp_user);
//添加多个收件人 则多次调用方法即可//
$mail->addAddress(‘77742526@QQ.COM’,’免费开户申请-在线通知’);
//添加该邮件的主题
$mail->Subject = $diy->name;
//添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件
$mail->Body = $emailbody;
if(!$mail->send()){ echo “Fail to send. <p>”; echo “Cause of the error: ” . $mail->ErrorInfo; exit;}//邮件发送结束
最后测试自定义表单提交发送QQ邮箱效果
本站站长本地,在线空间测试均成功收到提交的信息!!!100%有效!!
织梦DedeCMS的自定义表单可以方便使用者进行一些诸如在线订单、在线报名、等互动应用的表单供前台用户提交操作,以便于收集、统计、分析及处理更多的数据。这里就不讲解织梦自定义表单如何制作的问题,相信这样的教程,互联网上是比较多的。 今天Maxwo 华英雄讲的Dede的自定义表单如何进行数据校验等,来提高织梦系统的安全性,并且过滤一些无聊或者别有用心的用户提交的垃圾信息。
1.前台提交数据过滤 前台数据过滤主要针对普通用户,在HTML层面,通过Js方式,对提交的数据进行校验。如判断表单是否为空、邮箱是否正确等。比如使用下面的Js代码来验证提交的内容是否为空:
<script type=”text/javascript”>function check(){var fankui=document.getElementById(‘fankui’);var names=document.getElementById(‘names’);if(fankui.value.length==0){alert(“反馈内容不能为空”);fankui.value=””;fankui.focus();return false;}if(names.value.length==0){alert(“姓名不能为空”);names.value=””;names.focus();return false;}}</script>
这是很简单的验证办法,一般情况下使用这个验证就足够了,但修改后依然会被垃圾信息骚扰,而上面的JS也仅仅是判断是否为空,表单也非常简单,随便填写几个数值就能够通过。 所以建议采用一些别的成熟的表单验证插件,如一款jquery表单验证插件Validform,可以实现更加强大的验证功能等,如是否提交的邮箱、手机等信息。 当然,这个只是前台界面的数据验证,只能防范一些不懂网站制作的用户,稍微懂些网站知识的用户,就可以绕开前台直接向系统提交数据,这就需要在提交的PHP文件中进行相应的数据校验了。
织梦DedeCMS的自定义表单提交PHP文件是plus下的diy.php文件,所以对提交数据的校验也在这个文件中进行。比如校验用户提交的某个字段是否是手机号、邮箱等。这种校验的方法是利用正则表达式的方式,检测手机号码和邮箱,修改plus下的diy.php,再提交入库的代码前插入下面代码:
//判断手机号码是否正确if(!eregi(“^((13[0-9])|147|(15[0-35-9])|180|182|(18[5-9]))[0-9]{8}$”,$telphone)){ showMsg(‘手机号码不对,请正确填写’, ‘-1’); exit();}//验证邮箱if (!eregi(“^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$”,$email)) {showMsg(‘请您填写正确的E-Mail 地址!’, ‘-1’);exit();}
其中的 $telphone和$email就是提交的手机号码和邮箱值名,如果不是我设定的可以自行修改。所以这里使用的正则表达式是否正确就非常重要了,不正确的正则表达式,会造成垃圾信息提交或者正常的信息无法提交等后果
解决以上两个问题之后,还有一个问题,就是某些用户有意或者无意的提交了多次表单,这也会给信息收集工作带来巨大的压力,所以我们也要努力地降低这个方面的工作量。我们可以采用验证Cookies方法,达到织梦DedeCMS自定义表单限制IP24小时只能发布一次功能。 实现方法是,打开plus下diy.php文件找到以下代码:
if(!is_array($diyform)) { showmsg(‘自定义表单不存在’, ‘-1’); exit(); }
再其下添加下面的代码:
if(isset($_COOKIE[‘VOTE_MEMBER_IP’])) { if($_COOKIE[‘VOTE_MEMBER_IP’] == $_SERVER[‘REMOTE_ADDR’]) { ShowMsg(‘您已经填写过表单啦’,’-1′); exit(); } else { setcookie(‘VOTE_MEMBER_IP’,$_SERVER[‘REMOTE_ADDR’],time()*$row[‘spec’]*3600,’/’); } } else { setcookie(‘VOTE_MEMBER_IP’,$_SERVER[‘REMOTE_ADDR’],time()*$row[‘spec’]*3600,’/’); }
当然,经过以上的操作,织梦DedeCMS的自定义表单并不是就完全的安全了,别人还可以清空Cookies的方式继续重复提交,不过这些就不需要考虑那么多了,毕竟道高一尺魔高一丈,不可能百分百完美的
打开 /plus/diy.php 文件
在提交到数据库前插入下面php代码:
//验证手机号
if(!eregi(“^13[0-9]{9}|15[0-9]{9}$”,$tel))
{
showMsg(‘手机号不对,请正确填写’, ‘-1’);
exit();
}
//验证email
if (!eregi(“^[_/.0-9a-z-]+@([0-9a-z][0-9a-z-]+/.)+[a-z]{2,3}$”,$email)) {
showMsg(‘请您填写正确的E-Mail 地址!’, ‘-1’);
exit();
}
其中的 $tel 和 $email 就是提交的手机号和email字段名,实际使用的时候修改验证字段为你的字段即可
备注:本站站长MAXWO-华英雄-测试将代码添加到
$query = “INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar) VALUES (NULL, 0 $addvalue); “;
上边时可以正常使用
{dede:field.description runphp=’yes’}
if(@me<>” )@me = ‘
<div class=”intro”>’.@me.'</div>
‘;
{/dede:field.description}
我在某模型里面增加了一个电话号码的字段tel,希望前台只让具有高级会员权限并且登录的用户才会显示,未登录时显示“请注册后才能显示”。这里用传递参数加SQL实现,具体方法如下:
1、在内容页head之间加上JS:
<script src="{dede:global.cfg_cmsurl/}/include/dedeajax2.js" type="text/javascript" ></script> <script language="javascript"> function CheckLogin_c(){ var taget_obj = document.getElementById('_userlogin_c'); var req = document.getElementById('hid').value; myajax = new DedeAjax(taget_obj,false,false,'','',''); myajax.SendGet2("{dede:global.cfg_cmspath/}/member/ajax_loginsta_c.php?val="+req); DedeXHTTP = null; } </script>
上一篇文章“整合UEDITOR”所遇到到的问题之一
这里我们就整合uEditor编辑器。 也许大家正在为自己的劳动沾沾自喜的时候,我即将告诉大家一个很不幸的事情,问题出现了,不相信,可以打开你的频道封面页试试你编辑的内容可不可以保存,多次测试是不能正常保存的!下面我们来解决这个问题:织梦整合uEditor编辑器频道封面页内容不能保存? 我在网站上查了很多资料有人说这样做:
当我看到网上有解决这个问题的时候,我高兴坏了,结果多次测试此方法并不适用,给了我希望,又让我失望,整个心就感觉在温暖的阳光下沐浴突然掉进了冰窟,如果非要让我用一个形容词来形容此时的心情,在此时我真想说一句:瞎鸡巴扯淡啊!
此时我们的心情都一样,试过这种方法的请一起说瞎鸡巴扯淡吧!上面方法不适用,牢记!下面我们看问题出现在什么地方!
再无身心疲惫的时候,无心却发现了问题:在catalog_add.htm 和catalog_edit.htm这2个文件中form表单位置不对
catalog_add.htm修改前:
这里我们需要把form开头部分放在 td内,修改后为:
catalog_edit.htm修改前:
catalog_edit.htm修改后:
通过上面的讲述问题才得以解决,才算完美得整合百度(uditor)编辑器!
希望大家积极测试!
由于织梦后台默认编辑器功能上的缺憾,使得在添加文章的时候,需要借用第三方编辑软件,对文章进行格式,然后再粘贴进织梦编辑器中。我们可以用百度的Ueditor编辑器来替换之,实现我们想要的结果。
下面是如何利用百度的(ueditor)编辑器替换dede自带的编辑器步骤:(不足之处请予以指正补充,谢谢!)
第一步:下载和织梦程序编码相对应编辑器的版本(UTF8或者GB2312);
百度搜索“百度ueditor编辑器”,然后点击进入官网,找到下载页面。找到我们想要的编辑器的版本,这点相信不要我多说了。下载下来,然后修改名称为“ueditor”,并进行打包上传到include目录下。
第二步:修改inc_func_funcAdmin.php文件;
打开include下的inc文件夹内的inc_func_funcAdmin.php找到184行,贴入以下代码。
else if($GLOBALS[‘cfg_html_editor’]==’ueditor’)
{
$fvalue = $fvalue==” ? ‘<p></p>’ : $fvalue;
$code = ‘<script type=”text/javascript” charset=”utf-8″
src=”/include/ueditor/ueditor.config.js”></script>
<script type=”text/javascript” charset=”utf-8″
src=”/include/ueditor/ueditor.all.js”></script>
<link rel=”stylesheet” type=”text/css”
href=”/include/ueditor/themes/default/css/ueditor.css”/>
<textarea name=”‘.$fname.'” id=”‘.$fname.'”
style=”width:100%;”>’.$fvalue.'</textarea>
<script type=”text/javascript”>var ue = new
baidu.editor.ui.Editor();ue.render(“‘.$fname.'”);</script>’;
if($gtype==”print”)
{
echo $code;
}
else
{
return $code;
}
}
如下图所示: