麻瓜程序员说:在Dedecms内容管理系统中新增了模块插件后,有时候会出现 模块->模块管理->模块列表内容为空的情况,网上也有很多方法,但是都不能很好的解决问题。

后来发现只需利用FTP工具或登录远程服务器找到网站目录中的/data/module/moduleurllist.txt文件删掉即可。

不知道为什么会出现这个问题,moduleurllist.txt这个文件会自动生成,估计是php读取这个文件的时候出错了。

本文出自:麻瓜程序员的博客

 

麻瓜程序员今天讲几个比较经典的组合标签:

{dede:arclist flag=’h,c,a’ typeid=’1,2,3′ row=’20′ titlelen=42 noflag=’f'}

<a href=’[field:arcurl/]‘>[field:title/]</a>

{/dede:arclist}

这个什么意思呢?

调用所有栏目id为1和2和3下面的20条具有头条属性+推荐属性+特别推荐属性但是排除具有幻灯属性的文章,并且标题长度为42。假如某文章具有h+c+a+f 属性也一样不显示,

至于标题长度一般理解是字节。中文字 是双字节,也就是说42其实只显示21个中文。

flag=’h,c,a’ typeid=’1,2,3′ row=’20′ titlelen=42 noflag=’f’ 这些属性都是可以自由组合。或者只调用一个或者只调用几个。当前,这个也可以跟下面讲到的自由组合。

带导读的标签调用

{dede:arclist infolen=250 row=’20′ titlelen=42 }

<a href=’[field:arcurl/]‘>[field:title/]</a>

<br>

[field:info/]

{/dede:arclist}

带导读,图片,日期,栏目的标签调用 (也可以自由组合的)

{dede:arclist infolen=250 row=’20′ imgwidth=100 imgheight=100 titlelen=42 }

栏目:[<a href=’[field:typelink/]‘>[field:typename/]</a>]

图片:<a href=’[field:arcurl/]‘><img src=’[field:litpic/]‘ border=0></a><br>

文章标题<a href=’[field:arcurl/]‘>[field:title/]</a>

<br>

文章简介:[field:info/]

{/dede:arclist}

注:

[field:arcurl/]和[field:filename/]一样

<img src=’[field:litpic/]‘ border=0>和[field:image/]一样。

[field:typelink/]和[field:typeurl/]一样

imgwidth=100 imgheight=100 图片宽度和图片高度,在实际当中一般很少用到。都是使用CSS的 img来限制。

[field:title/] 被截取过的标题 和[field:shorttitle/] 短标题 [field:fulltitle/] 完整标题

自定义模型的调用

{dede:arclist channelid=9 addfields=’taobaourl,wangwang’ row=’20′ titlelen=42 }

<a href=’[field:arcurl/]‘>[field:title/]</a>

[field:taobaourl/]

[field:wangwang/]

{/dede:arclist}

其实还有个autoindex 和 runphp的用法。本博客有几篇文章有讲到, 《autoindex 和 itemindex 的用法》和《dedecms channelartlist自增参数 用global.itemindex 做隔行css样式效果》都有提及到 autoindex 和runphp的一些用法。

本文出自: 麻瓜程序员

 

麻瓜程序员说  dedecms的搜索页是不提供栏目文章的调用的,因为从arclist标签的使用说明范围中可以看到适用范围:封面模板、列表模板、文档模板。所以搜索页是

不能使用arclist标签调用文章的,那怎么办呢?其实有一个办法可以做到。那就是使用自定义宏标记。看下图

dedecms自定义宏标记

dedecms自定义宏标记

这样就可以了,使用js调用,将js复制到相应位置,然后搜索页也可以出现栏目文章调用了。

本文来自:http://blog.aiwebcom.com/%E7%BD%91%E7%AB%99%E5%BB%BA%E8%AE%BE/%E7%BB%87%E6%A2%A6dedecms-%E6%8A%80%E5%B7%A7/414.html

转载请标明出处-  麻瓜程序员

 

有时候使用dedecms会发现不够标签调用, 这时候可以在后台里面添加新变量进行调用。

添加的话,比较简单了,直接进入后台->系统基本参数,然后在最后一个就可以看到 添加新变量的选项,点击后出现以下内容

添加新变量

填写的话自己来决定啦。

那填写完之后,如果发现有误,这时候想删除或者修改就麻烦了,因为dedecms的后台不提供系统基本参数的修改和删除(修改是针对变量的名称和参数说明的修改),如果可以进入数据库的话, 那就简单得多了,只需要进去phpmyadmin里面找到表 ‘dede_sysconfig‘(dede_是表前缀,可能你的会不同) ,然后对应着那个字段进行删除或修改就好了。

那没有权限进去数据库呢, 只能是使用后台的sql功能了,看下面

dedecms sql修改和删除

修改的话在执行框里面写下面sql语句

UPDATE `dede_sysconfig` SET  `info` =  ’xxx’  WHERE  `dede_sysconfig`.`varname` =  ’xxxx’

删除的话写

delete  form  `dede_sysconfig` where   `dede_sysconfig`.`varname` =  ’xxxx’

最后进去       根目录/data/config.cache.inc.php   找到要修改的字段修改(通常在最后边),两边修改后的内容要保持一致.

以上内容出  自麻瓜程序员-Ai-WEB的博客

转载请注明出处 http://blog.aiwebcom.com/%E7%BD%91%E7%AB%99%E5%BB%BA%E8%AE%BE/%E7%BB%87%E6%A2%A6dedecms-%E6%8A%80%E5%B7%A7/406.html

 

在seo方面,blog.aiwebcom.com的权重要高于blog.aiwebcom.com/index.html,   因此我们有时候需要将后面的index.html去掉

方法其实有很多种, 我觉得直接用php函数来去掉是最快的方法。

例如

{dede:channel type=’top’ row=’16′}
<li><a href=’[field:typeurl function="str_replace('/index.html','',@me)"/]‘ target=”_blank”>[field:typename/]</a></li>
{/dede:channel}

上面使用了str_replace()来进行替换 将index.html 替换为空, 这样就行了, 有需要的话可以试试。

 

dedecms登录后台的时候

账户密码都正确,登录成功却又返回登录界面的解决办法是

删除这个目录的那些文件

data/sessions/

删除后登录正常

还有一种情况就是 你的主机空间已经满了, 所以会一直登陆不进去.

 

一般来说,在channelartlist里面要获得序列号 ,用autoindex是行不通的,因为autoindex是获取arclist的列表序列号,所以应该用
itemindex来获取才会有用。 下面是一个例子

{dede:channelartlist row=10}
{dede:global.itemindex runphp=”yes”}@me%2==0?@me=”class1″:@me=”class2″;{/dede:global.itemindex}

{/dede:channelartlist}
这样子就在dedecms模板中channelartlist标签内实现dedecms 样式表css间隔隔行显示不同效果,只需要把代码插到class=’ 上面写的代码  ’ 这样就可以了。

 

1.先修改两个文件,找到
/后台目录/templets/diy_field_add.htm
/后台目录/templets/diy_field_edit.htm

分别将联动类型的注释去掉,这里主要是dedecms在自定义表单时,是将联动类型加上了注释的,然后在自定义表单里增加字段,填写联动名,,前台就可以用了。

下面是修改显示枚举值的方法:

1.在”后台目录”\templets\diy_list.htm找到(大约在41行):

$fields[$field] = “<a href=’{$fields[$field]}’ target=’_blank’><img src=’images/channeladd.gif’ border=’0′ /> 其它附件</a>”;
}
在下面加入:

//联动类型显示修正开始
else if($fielddata[1]==’stepselect’)
{
$db->Execute(‘me’,”SELECT * FROM `dede_stepselect` WHERE itemname=’{$fielddata[0]}’”);
while($arr = $db->GetArray(me))
{
$egroup = $arr['egroup'];
}
$fields[$field] = Getenums(“{$fields[$field]}”,$egroup);
}
//联动类型显示修正结束
2.找到:

{/dede:datalist}

在下面加入:

<?php
function Getenums($evalue=0,$egroup)
{
if( !isset($GLOBALS['em_'.$egroup.'s']) )
{
$cachefile = DEDEDATA.’/enums/’.$egroup.’.php’;
if(!file_exists($cachefile))
{
require_once(DEDEINC.’/enums.func.php’);
WriteEnumsCache();
}
if(!file_exists($cachefile))
{
return ”;
}
else
{
require_once($cachefile);
}
}
if($evalue>=500)
{
if($evalue % 500 == 0)
{
return (isset($GLOBALS['em_'.$egroup.'s'][$evalue]) ? $GLOBALS['em_'.$egroup.'s'][$evalue] : ”);
}
else if (preg_match(“#([0-9]{1,})\.([0-9]{1,})#”, $evalue, $matchs))
{
$esonvalue = $matchs[1];
$etopvalue = $esonvalue – ($esonvalue % 500);
$esecvalue = $evalue;
$GLOBALS['em_'.$egroup.'s'][$etopvalue] = empty($GLOBALS['em_'.$egroup.'s'][$etopvalue])? ”
: $GLOBALS['em_'.$egroup.'s'][$etopvalue];
$GLOBALS['em_'.$egroup.'s'][$esonvalue] = empty($GLOBALS['em_'.$egroup.'s'][$esonvalue])? ”
: $GLOBALS['em_'.$egroup.'s'][$esonvalue];
$GLOBALS['em_'.$egroup.'s'][$esecvalue] = empty($GLOBALS['em_'.$egroup.'s'][$esecvalue])? ”
: $GLOBALS['em_'.$egroup.'s'][$esecvalue];
return $GLOBALS['em_'.$egroup.'s'][$etopvalue].’ – ‘.$GLOBALS['em_'.$egroup.'s'][$esonvalue].’ – ‘.$GLOBALS['em_'.$egroup.'s'][$esecvalue];
}
else
{
$elimit = $evalue % 500;
$erevalue = $evalue – $elimit;
$GLOBALS['em_'.$egroup.'s'][$erevalue] = empty($GLOBALS['em_'.$egroup.'s'][$erevalue])? ”
: $GLOBALS['em_'.$egroup.'s'][$erevalue];
$GLOBALS['em_'.$egroup.'s'][$evalue] = empty($GLOBALS['em_'.$egroup.'s'][$evalue])? ”
: $GLOBALS['em_'.$egroup.'s'][$evalue];
return $GLOBALS['em_'.$egroup.'s'][$erevalue].’ – ‘.$GLOBALS['em_'.$egroup.'s'][$evalue];
}
}
}
?>
修改完毕。

需要注意的是:添加新字段时候,表单提示文字必须和联动的组类别名一致,比如我要添加一个表单提示文字是“地区”,那么新增类别组的时候 类别名也要填写“地区”

很多朋友都遇到了DEDECMS自定义表单中地区二级联动后,调用联动字段时只显示地区代码如:

13003其实是贵州省遵义市的系统联动类编号,
要让其显示成贵州省遵义市其实也比较容易。
需要动3个文件。
第一个是根目录plus/diy.php。
第二个是上一个php对应的模板文件更目录下templates/plus/view_diyform.htm和list_diyform.htm(两个模板文件改法一样)。
提醒一下注意备份要修改的这几个文件。
现在开始了对于diy.php打开后找到elseif($action == ‘list’)这一行,再在它的下边找到

include_once DEDEINC.’/datalistcp.class.php’;下面加入
include_once(DEDEDATA.’/enums/nativeplace.php’);
include_once(DEDEINC.”/enums.func.php”);
这样两个,
同样找到elseif($action == ‘view’)这一行,也在

include_once DEDEINC.’/datalistcp.class.php’;下加入上边的红色两句
详细代码如下

elseif($action == ‘list’)
{
if(empty($diy->public))
{
showMsg(‘后台关闭前台浏览’, ‘javascript:;’);
exit();
}
include_once DEDEINC.’/datalistcp.class.php’;
include_once(DEDEDATA.’/enums/nativeplace.php’);
include_once(DEDEINC.”/enums.func.php”);
if($diy->public == 2)
{
$query = “select * from `{$diy->table}` order by id desc”;
}
else
{
$query = “select * from `{$diy->table}` where ifcheck=1 order by id desc”;
}
$datalist = new DataListCP();
$datalist->pageSize = 10;
$datalist->SetParameter(‘action’, ‘list’);
$datalist->SetParameter(‘diyid’, $diyid);
$datalist->SetTemplate(DEDEINC.”/../templets/plus/{$diy->listTemplate}”);
$datalist->SetSource($query);
$fieldlist = $diy->getFieldList();
$datalist->Display();
}
//list部分完

elseif($action == ‘view’)
{
if(empty($diy->public))
{
showMsg(‘后台关闭前台浏览’ , ‘javascript:;’);
exit();
}

if(empty($id))
{
showMsg(‘非法操作!未指定id’, ‘javascript:;’);
exit();
}
include_once DEDEINC.’/datalistcp.class.php’;
include_once(DEDEDATA.’/enums/nativeplace.php’);
include_once(DEDEINC.”/enums.func.php”);
if($diy->public == 2)
{
$query = “select * from {$diy->table} where id=’$id’ “;
}
else
{
$query = “select * from {$diy->table} where id=’$id’ and ifcheck=1″;
}
$row = $dsql->getone($query);
if(!is_array($row))
{
showmsg(‘你访问的记录不存在或未经审核’, ‘-1′);
exit();
}

$fieldlist = $diy->getFieldList();

include DEDEROOT.”/templets/plus/{$diy->viewTemplate}”;
}
?>

//view部分完

然后打开view_diyform.htm
找到<table class=’listtable’ cellspacing=”1″>一行
把下一行还是的到</table>之间的

<?php
echo ‘<tbody>’;
echo ‘<tr><td bgcolor=”#eeeeee” width=”20%”>id</td><td bgcolor=”#eeeeee”>’.$row['id'].’</td></tr>’;
$allowhtml = array(‘htmltext’);
foreach($fieldlist as $field=>$fielddata)
{
if($row[$field]==”) continue;
if($fielddata[1]==’img’)
{
$row[$field] = “<a href=’{$row[$field]}’ target=’_blank’><img src=’{$row[$field]}’/></a>\r\n”;
}
else if($fielddata[1]==’addon’)
{
$row[$field] = “<a href=’{$row[$field]}’ target=’_blank’><img src=’img/addon.gif’ border=’0′ /> 相关附件</a>”;
}
else
{
if(!in_array($fielddata[1], $allowhtml))
{
$row[$field] = htmlspecialchars($row[$field]);
}
}
echo ‘<tr><td bgcolor=”#ffffff”>’.$fielddata[0].’</td><td bgcolor=”#ffffff”>’.$row[$field].’</td></tr>’;
}
echo ‘</tbody>’;
?>

(也就是将那部分php代码)都删除掉,然后将下面的代码加进去。
<tbody>
<tr><td bgcolor=”#eeeeee” width=”20%”>id</td><td bgcolor=”#eeeeee”><?php echo $row['id']; ?></td></tr>
<tr><td bgcolor=”#eeeeee” width=”20%”>生日</td><td bgcolor=”#eeeeee”><?php echo $row['shengri']; ?></td></tr>
<tr>
<td>目前所在地:</td>
<td> 省份:
<?php
$places = GetEnumsTypes($row['nativeplace']);
echo ( isset($em_nativeplaces[$places['top']]) ?  $em_nativeplaces[$places['top']] : ”);
?>
城市:
<?php
echo ( isset($em_nativeplaces[$places['son']]) ?  $em_nativeplaces[$places['son']] : ”);
?></td>
</tr>
</tbody>

效果请看

list_diyform.htm的改法类似。自己参照更改。
这里要说的是有人会问,替换完了就是地区一项了怎么办?
你自定义表单里的其他项参照这个一行复制就行了<tr><td bgcolor=”#eeeeee” width=”20%”>id</td><td bgcolor=”#eeeeee”><?php echo $row['id']; ?></td></tr>
其中红色的id可替换成你的其他字段的中文名,蓝色id替换成字段对应的数据库中的字段名(一定是英文或这拼音,这个不用我多说了吧!)。

 

两个系统整合后,发现从dede登陆退出都正常,但是从discuz的登陆退出却无法和dede同步。
解决了这个问题可以通过以下两点:
1、修改通信密匙,是dede、discuz和ucenter三者之间的都相同,即/include/common.inc.php,/bbs/config.inc.php,/bbs/uc_server/data/config.inc.php文件中的UC_KEY一致,/bbs/uc_server/data/config.inc.php这个文件需要特别注意。(其实就是密钥要保持一致)
2、因为我们是用的数据库方式,所以将通信ip都删除(这是我得到解决问题的方法)
完成了这2个,从discuz就可以和dede同步登陆及退出了

 

今天尝试着将discuz!x2.5和dedecmsV5.7用Ucenter进行整合:

首先安装Ucenter,然后在安装dis和dede。三个都安装好后,(一般情况下,在安装dis的时候就能成功和Ucenter通行成功的了。详细可以在安装dis时的第二步填写已经安装好的Ucenter的信息)。

dedecms安装好之后,进入模块管理,下载安装UCenter模块,下图(本系统已经安装好了)

 

dedecms模块管理

dedecms模块管理

安装好之后,点击 UCenter配置  ,进去里面填写ucenter信息, 主要是填写ucenter的地址。

完成上面之后,进入ucenter 点击应用管理,可以看到dis和dede都已经通行成功

ucerter应用管理

ucerter应用管理

不过这时候只是discuz和dedecms各自和ucenter通行成功, 那要做到discuz和dedecms这两个通行成功呢,要做一下步骤:

进去discuz的ucenter配置将UCenter 通信密钥复制一下,然后再进去dedecms的ucenter配置 将discuz复制的那段通行密钥粘贴到dedecms的通信密钥那里

,其实这样做,就是要做到 discuz的通信密钥和dedecms的通信密钥一致(这里也要在ucenter那里保持两个密钥的一致,要记住查看下是否通行成功了)。

这时候就可以达到discuz!2.5和dedecmsV5.7的整合了。

成功后,大家可以尝试下在两个系统之间进行用户注册,同时登录和同时登出了。

 

© 2012 Ai-WEB的博客 Suffusion theme by Sayontan Sinha