dedecms开发笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dedecms二次开发总结
1.后台所有目录在upload/dede
2.后台大标题修改在upload/dede/inc/inc_menu.php
3控制器有三个,例如ad_add.php ad_main.php ad_edit.php
4.模板放在templets下面,名字跟模块名字相同,格式为htm
5.在数据库中增加数据,直接写sql语句
$query = "
INSERT INTO #@__ad(ad_code,ap_code,ad_name,weight,ck_flg,lang_id,show_flg, position,dis_id,ad_info,ad_pic,bg_colour,font_colour,width,hei ght,ps_id,link_url)
VALUES('$ad_code','$ap_code','$ad_name','$weight','$ck_flg','$ lan
g_id','$show_flg','$position','$dis_id','$ad_info','$ad_pic',' $bg
_colour','$font_colour','$width','$height','$ps_id','$link_url ');
";
$dsql->ExecuteNoneQuery($query);
ShowMsg("成功增加一个广告!","ad_main.php");
exit();
6.也可以放入一个数组中,然后处理
$dsql->Execute('dd','SELECT * FROM `#@__myadtype` ORDER BY id DESC');
$option = '';
while($arr = $dsql->GetArray('dd'))
{
$option .= "<option value='{$arr['id']}'>{$arr['typename']}</option>\n\r";
}
7.模板分配
$dlist = new DataListCP();
$dlist->SetTemplet(DEDEADMIN."/templets/ad_main.htm");
$dlist->SetSource($sql);
$dlist->display();
8.模板输出
{dede:datalist}
<td>{dede:field.weight /}</td>
<td>{dede:ng_id function='lang(@me)'/}</td>
{/dede:datalist}
9.模板输出可以使用函数改变输出值,function='lang(@me)'.函数在模块中定义.
10.用旧数据插入随即排练插入多条数据
INSERT INTO t_device
(`DV_CODE`,`LANG_ID`,`PT_ID`)
SELECT
DV_CODE, LANG_ID, PT_ID
FROM t_adver_ap
11.添加全选按钮,进行删除等操作,删除只能是删除本页全选的数据
<a href="javascript:selAll()"class="coolbg">全选</a>
<a href="javascript:noSelAll()"class="coolbg">取消</a>
<a href="javascript:checkArc(0)"class="coolbg"> 审核 </a>
<a href="javascript:showArc(0)"class="coolbg"> 显示 </a>
<a href="javascript:delArc(0)"class="coolbg"> 删除 </a>
js代码
function selAll()
{
for(i=0;i<document.form2.arcID.length;i++)
{
if(!document.form2.arcID[i].checked)
{
document.form2.arcID[i].checked=true;
}
}
}
function noSelAll()
{
for(i=0;i<document.form2.arcID.length;i++)
{
if(document.form2.arcID[i].checked)
{
document.form2.arcID[i].checked=false;
}
}
}
//获得选中文件的文件名
function getCheckboxItem()
{
var allSel="";
if(document.form2.arcID.value) return document.form2.arcID.value;
for(i=0;i<document.form2.arcID.length;i++)
{
if(document.form2.arcID[i].checked)
{
if(allSel=="")
allSel=document.form2.arcID[i].value;
else
allSel=allSel+"`"+document.form2.arcID[i].value;
}
}
return allSel;
}
//获得选中其中一个的id
function getOneItem()
{
var allSel="";
if(document.form2.arcID.value) return document.form2.arcID.value;
for(i=0;i<document.form2.arcID.length;i++)
{
if(document.form2.arcID[i].checked)
{
allSel = document.form2.arcID[i].value;
break;
}
}
return allSel;
}
function checkArc(ad_id){
var qstr=getCheckboxItem();
//if(aid==0) aid = getOneItem();
location="ad_edit.php?qstr="+qstr+"&dopost=check";
}
function showArc(ad_id){
var qstr=getCheckboxItem();
//if(aid==0) aid = getOneItem();
location="ad_edit.php?qstr="+qstr+"&dopost=show";
}
function delArc(ad_id){
var qstr=getCheckboxItem();
//if(ad_id==0) ad_id = getOneItem();
location="ad_edit.php?qstr="+qstr+"&dopost=delete";
}
编辑模块代码
if($dopost=='delete')
{
$qstrs = explode("`",$qstr);
//print_r($qstrs);
if( !empty($ad_id) && empty($qstr) )
{
$dsql->ExecuteNoneQuery("DELETE FROM `#@__ad` WHERE ad_id='$ad_id' ");
ShowMsg("成功删除一则广告代码!",$ENV_GOBACK_URL);
exit();
}
if($qstr=='')
{
ShowMsg("请至少选择一个!",$ENV_GOBACK_URL);
exit();
}
foreach($qstrs as $ad_id)
{
$dsql->ExecuteNoneQuery("DELETE FROM `#@__ad` WHERE ad_id = '$ad_id' ");
};
ShowMsg("成功删除广告!",$ENV_GOBACK_URL);
exit;
}
总结:写一个函数,获取全选的id值,然后各种按钮对应的操作以及传过去的值,这也写在一个js中,例如本例中delarc();然后在模块中根据各种情况进行操作,例如判断是从单个点击过来的,还是通过全选过来的.
12.对于让select 选择后保持状态的问题
最恨的招数就是把参数定死,然后在页面的对应选择框中加入如下代码
<?php if ($_GET['ck_flg']==0) echo 'selected'; ?>
这种情况用于进行搜索时候,默认值在数据库中没有值,但是你在一开始需要把所有结果都显示出来,(如果不加参数,会出现默认值为未审核,未审核的值为0)
13.用以前模块改写时.容易出现问题,(我把广告管理改为应用管理),在插入数据库中时,始终改变不了类别,纠结了一晚上,原来是sql语句在修改时带上逗号或是丢了逗号,每回都那么巧,都有错,一定要细心.灵异事件发生,就要细心,细心,再细心!!!!
14.如何在预览图片然后返回,一个办法是写链接时候target="_blank";另外一种办法就是先写个div,加载时候隐藏,然后用js控制,当点击原图片的时候,显示div,把这个div层的图片换掉,当再次点击,div又隐藏.
控制层(定义一个函数)
function MediaType($nurl)
{
return "图片<a href=\"javascript:;\" onClick=\"ChangeImage('$nurl');\"><img
src='../include/dialog/img/picviewnone.gif' name='picview' border='0' alt='预览'></a>";
}
view层
<style>
.napisdiv
{right:100px;top:200px;width:150px;height:100px;position:absolute ;z-index:3}
</style>
<script>
function ChangeImage(surl){
document.getElementById("floater").style.display="block";
document.getElementById('picview').src = surl; }
function ChangeImages(surl){
document.getElementById("floater").style.display="none";
document.getElementById('picview').src = surl; }
window.onload=hidediv;
function hidediv(){
document.getElementById("floater").style.display="none";
}
</script>
<div id="floater"class="napisdiv">
<a href="javascript:;" onClick="ChangeImages('../include/dialog/img/picviewnone.gif');"> <img src='../include/dialog/img/picviewnone.gif'id='picview' name='picview'border='0'alt='单击关闭预览'style='z-index:10000'> </a>
</div>
<td>{dede:field.mediatype function="MediaType(@me)"/}</td>
15.当数据库插不入数据的时候,检查两个方面,一个是sql语句是否错误,另一个是字段是否为非空.。