DEDECMS织梦首页调用问答栏目文章的方法

今天我们模板团来说说DEDECMS织梦首页调用问答栏目文章的方法,以及织梦问答系统高分悬赏问题,待解决问题,新解决问题,推荐问题等需要调用,比如调用到首页,下面做讲解,怎么调用织梦问答栏目的内容。

基本语法说明:

{dede:ask row=’8′ qtype=’new’ tid=’0′ titlelen=’28′}

<dd>

<span>[<a href='[field:typeurl/]‘>[field:tidname/]</a>]</span>

<span><a href=”[field:url/]“>[field:title/]</a></span>

</dd>

{/dede:ask}

参数说明:

row=’8′ 调用条数

qtype=’new’ 排序类型 commend 推荐、ok 表示已解决问题、high 高分问题 、new 最新问题

tid=’0′ 栏目id,默认是全部

titlelen=’28′ 标题长度

底层模板字段:

tid,tidname,title,url,typeurl

 
织梦问答页面内部的调用如下:

1、待解决问题调用

{dede:ask row=’6′ titlelen=’42′ sort=’notok’}

<dd> <span>[{dede:field.typedata /}]</span> <span><a href=”question.php?id={dede:field.id /}”>{dede:field.title /}</a></span> </dd>

{/dede:ask}

2、新解决问题调用

{dede:ask row=’6′ titlelen=’42′ sort=’ok’}

<dd> <span>[{dede:field.typedata /}]</span> <span><a href=”question.php?id={dede:field.id /}”>{dede:field.title /}</a></span> </dd>

{/dede:ask}

3、推荐问题调用

{dede:ask row=’6′ titlelen=’42′ sort=’expiredtime’}

<dd> <span>[{dede:field.typedata /}]</span> <span><a href=”question.php?id={dede:field.id /}”>{dede:field.title /}</a></span> </dd>

{/dede:ask}

4、高悬赏问题调用

{dede:ask row=’6′ titlelen=’42′ sort=’reward’}

<dd> <span>[{dede:field.typedata /}]</span> <span><a href=”question.php?id={dede:field.id /}”>{dede:field.title /}</a></span> </dd>

{/dede:ask}

OK了,基本都调用就只有这些足够了!

Continue reading

itemindex,autoindex 的区别

区别  

channelartlist 标签下使用 {dede:global name=’itemindex’ runphp=’yes’}@me;{/dede:global}

channel 标签下使用 [field:global name=autoindex/]  

在arclist中使用autoindex runphp 时用这种方式:

{dede:arclist titlelen=’22′ row=’4′ flag=’c’ orderby=’id’}<a href=”[field:arcurl /]” target=”_blank”>[field:title /]</a>[field:global name='autoindex' runphp='yes']if(@me==2){@me=”<br />”;}else{@me=’ ‘;}[/field:global] 
{/dede:arclist}
 
如何自由定义 开始的数字 
autoindex/itemindex 可以使用 @me+1;实现由指定数字开始

遇到类似的问题做下这个笔记,在用到的时候可以灵活发挥!

list 标签下试用autoindex

{dede:list pagesize=’40′ orderby=’id’}

[field:global name='autoindex' runphp='yes']if(@me==0){@me=”test”;}else{@me=”;}[/field:global] 

{/dede:list}

Continue reading

,

理解Web框架和如何构建一个CSS框架 转载

JavaScript 框架 YUI、 JQuery和Prototype 都引起广泛的关注, Web应用框架Rails and Dojo 更是引人瞩目,仿佛所有人都使用某种框架来开发自己的网站。

有那些可以忽略?

当投入到一个整体性很强的CSS框架,你想寻找的东西,是每个项目都做了一遍又一遍的重复通用的代码,目标是巩固这些代码核心地位,遵循“不重复自己(Don’t Repeat Yourself)”编码方法。这使得维护工作容易了许多,还可以帮访问者节省带宽开销。

几乎每个我参与的项目中,我必须声明的几个CSS问题:

“大量重置”浏览器默认风格,比如,设置所有元素的margin和padding为0,去掉框架(framesets)和图片(images)的border,等等。
以基线对齐。这包括诸如设定块级元素的margins相同的(或多个)基准行高,如段落(paragraph)、头(header)、以及列表(list)。
创建表单(Form)的基本样式。
创建几个常用的CSS 类,例如,.hide(把display置为none,即隐藏元素)、.mute(设定为一个较小的字体和较亮的颜色)。
还有更有趣的事情,许多网站设计师 发现自己不断重复使用着相同的基本结构,为什么不动它整理成自己的,在某种程度上可以非常灵活的用于多个网站?Yahoo这样做了,这就是YUI。当我们 为的劳伦斯日报网站(the Journal-World)建立CSS框架的时候,我先看看Yahoo是怎么做的。我们很肯定那不是我们想要的,但作为一个很好的例子,给我们提供了很 多思考和如何建构自己框架的想法。我们解决了16个单元格的问题,它具有足够的灵活性使我们的每一个网站都可以应用,即使每个网站看上去与下一个版本有些 差异。另外大多数网站共用widgets ,象下拉菜单、导航菜单、按钮等,这些也是主要的需要抽象提取的对象。除此之外,你可能有共同的内容名称,如图片列表的缩略图,你可以规范对CSS命名, 如“thumbnail-list”,让所有显示缩略图的都使用这个CSS类。

另外要做的可能是抽取hack(如兼容那些旧浏览器)加入自己的扩展的样式模块。我自己尝试过,但发现hack过于专有而不能抽取到通用框架里。

什么是真正的益处?

框架的真正好处是能够快速启动工作,你可以创建一个新的(X)HMTL文件,引入你框架,你不用再处理重置padding 和 margins的事情,漂亮的排版,干净的表单,整齐的布局,有效的widgets,等等。很明显,很明显,虽然,你一定要来定制外观和感觉为每个站点。 为实现这一目标,所有你需要做的是复写,并添加到默认的风格是必要的。

很显然,尽管你必须为每个网站定制外观,为了完成这一任务,你所需要做的就是在默认的样式上加几行代码。举个例子,如果在你的框架里,为所有的 class属性为“tabs”的UL标签设置了基本的水平导航样式,并且有一个灰色的边框,你只需要几行CSS代码,就可以定制成你的网站所符合的外观样 式。
Example Source Code
view plaincopy to clipboardprint?
ul.tabs li {
border: none;
background-image: url(’/images/tabs/ ?site-specific-tab-look.jpg’);
}
ul.tabs li {
border: none;
background-image: url(’/images/tabs/ ?site-specific-tab-look.jpg’);
}

列表左浮动,并且将链接以块的形式置于列表当中,链接也左浮动,字体居中,象烦人的广告一样的这些工作,框架以帮你完成,在你的网站设计工作中,只需集中精力处理特别的、有趣的网站细节,而不是写已经写过百万次的CSS代码。

如何构建一个CSS框架?

构建一个框架有几种可能的方式,但最常见,可以说是最有用的,抽象通用的CSS放到一个独立样式表文件,该样式表文件只包含整体的一个特有部 分。例如,你可以,一个样式处理排版,另一个处理大量重置。这种好的方法能使你选择性引入你需要的样式,在你框架里可能有六七个不同的样式文件,但不需要 其中的一两个,只要不引入即可。我们团队创建的框架包含5个样式文件:

reset.css —处理重置
type.css —处理排版
grid.css —处理布局
widgets.css —处理小零件(widgets),如tab菜单、下拉菜单、以及“更多”按钮
base.css —包含所有的其他样式表文件,以便我们只需要在(X)HTML引用base.css即可使用整个CSS框架
然后,我们把框架存放在一个单独的地方,使每一个站点都引入这个框架。当然,每一个网站也需要有特有样式表,特有样式对框架进行了必要的补充。

Continue reading

,

XHTML框架集的调整(显示/隐藏)改进兼容FF及IE 转载

frame.html 内容:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml“>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>XHTML框架集</title>
<script type=”text/javascript”>
<!–
function reSetFrames(){
if(top.document.all){
top.document.all.tags(‘frameset’)[1].cols = (top.document.all.tags(‘frameset’)[1].cols == ’0,*’)?’180,*’:’0,*’;//显示/隐藏右框架/IE
}else{
top.document.getElementsByTagName(‘frameset’)[1].cols = (top.document.getElementsByTagName(‘frameset’)[1].cols == ’0,*’)?’180,*’:’0,*’;//显示/隐藏右框架/FF
}
}
//–>
</script>
</head>

<frameset rows=”34,*” cols=”*” frameborder=”no” border=”0″ framespacing=”0″>
<frame src=”Top.asp” name=”topFrame” scrolling=”No” noresize=”noresize” id=”topFrame” title=”topFrame” />
<frameset rows=”*” cols=”224,*” framespacing=”0″ frameborder=”no” border=”0″>
<frame src=”Left.asp” name=”leftFrame” scrolling=”Yes” noresize=”noresize” id=”leftFrame” title=”leftFrame” />
<frame src=”Main.asp” name=”mainFrame” id=”mainFrame” title=”mainFrame” />
</frameset>
</frameset>
<noframes><body>
</body>
</noframes></html>

Top.asp 为顶部框架页。

Left.asp 为左边菜单框架页。

Main.asp 主内容页面。

在Main.asp的<head></head>加入块样式:

<style type=”text/css”>
<!–
body {
margin:0; /* 必须 */
height:100%; /* 必须 */
overflow-y:auto;/* 必须 */
}
#reSetMenu {
display:block;
position:fixed;/* IE并不支持fixed,而FF支持 */
left:0px;top:40%;
width:14px;height:100px;
z-index:99;
}
* html #reSetMenu {position:absolute;} /* 这个只有IE支持 */
–>
</style>
<!–[if IE 6]>
<style type=”text/css”>
/*<![CDATA[*/
html {overflow-x:hidden; overflow-y:auto;}
/*]]>*/
</style>
<![endif]–>
在<body>中加入块:

<div id=”reSetMenu”>
<input type=”image” name=”reFrame” id=”reFrame” src=”Images/frameset.gif” title=”显示/隐藏列表” onclick=”top.reSetFrames();” />
</div>

图片frameset.gif为按钮,浮在主框架Main.asp页面左边上,点击后能够隐藏和显示left.asp页面。

针对FF和IE不同的DOM做了改进,兼容IE和FF,并用CSS固定了按钮的显示位置,不再跟页面一起滚动!

实际上对于IE6使用getElementsByTagName(‘frameset’)[1]同样有效,但本人没有测试在更底版本的IE中是否有效!

希望有高手指正!

 

 

 

frame.html 内容:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml“>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>XHTML框架集</title>
<script type=”text/javascript”>
<!–
function reSetFrames(){
top.document.all.tags(‘frameset’)[1].cols = (top.document.all.tags(‘frameset’)[1].cols == ’0,*’)?’224,*’:’0,*’;//显示/隐藏右框架
}
//–>
</script>
</head>

<frameset rows=”34,*” cols=”*” frameborder=”no” border=”0″ framespacing=”0″>
<frame src=”Top.asp” name=”topFrame” scrolling=”No” noresize=”noresize” id=”topFrame” title=”topFrame” />
<frameset rows=”*” cols=”224,*” framespacing=”0″ frameborder=”no” border=”0″>
<frame src=”Left.asp” name=”leftFrame” scrolling=”Yes” noresize=”noresize” id=”leftFrame” title=”leftFrame” />
<frame src=”Main.asp” name=”mainFrame” id=”mainFrame” title=”mainFrame” />
</frameset>
</frameset>
<noframes><body>
</body>
</noframes></html>

Top.asp 为顶部框架页。

Left.asp 为左边菜单框架页。

Main.asp 主内容页面。

在Main.asp的<head></head>加入块样式:

<style type=”text/css”>
<!–
#reSetMenu {
position:absolute;
left:0px;
top:40%;
width:14px;
height:100px;
z-index:99;
}
–>
</style>
在<body>中加入块:

<div id=”reSetMenu”>
<input type=”image” name=”reFrame” id=”reFrame” src=”Images/frameset.gif” title=”显示/隐藏列表” onclick=”top.reSetFrames();” />
</div>

图片frameset.gif为按钮,浮在主框架Main.asp页面左边上,点击后能够隐藏和显示left.asp页面。

这里用到了top.document.all.tags(‘frameset’)[1].cols (框架集中第一个框架LeftFrame)方法来改变框架的宽,以达到显示与隐藏的效果。

而不是top.leftFrame.cols或者parent.leftFrame.cols方法,因为这两种方法在XHTML页往往不起作用。

Continue reading


dedecms 栏目文章URL 优化

修改 common.inc.php 中的

//文档的默认命名规则
$art_shortname = $cfg_df_ext = ‘.html’;
$cfg_df_namerule = ‘/{aid}’.$cfg_df_ext; //修改后

Continue reading

,

dedecms文章页面URL路径优化

这里对用DEDECMS网站程序做的网站进行文章页的URL优化,减少没必要的路径对SEO有很大帮助,例如本博客在没有修改路径的时候生成的文章页网址是“http://www.xkzzz.com/html/seo/2009/0916/209.html”也就是”http://网站域名/html/栏目名称/年月/日_ 文章ID.html”可以看到,文章页html文件存放于四层目录之下,这是完全没有必要的,可以把连接中http://网站域名/html/的html取消,

看图中圈的部分,在dedecms后台把“目录相对位置”这一项选中“站点根目录”,然后更新就不再显视html这个文件路径,例:w修改后就会变成http://www.xkzzz.com/seo/2009/0916/209.html这样。

       另外还通过“高级选项”还可以设置成http://www.xkzzz.com/seo/209.html这样更加简单,去除了年/月日的咱径。也就是http://网站域名/栏目名称/文章ID.html这样缩短了文章页的URL路径。
  按照图中红圈的地方,把“文章命名规则”中的调用代码改下就行了,{typedir},{Y},{M},{D} ,(aid),{tid},{page} ,这些其实是变量,它们分别代表什么意思呢?从下图可以看出,DEDE内容页html文件默认的保存路径其实就是:栏目文件夹/年月/。我们要修改的就 是:去掉{Y}{M}/ 或者把{typedir}/{Y}{M}/{D}-{aid}.html 改成{typedir}/{Y}{M}{D}-{aid}.html 。当然,你也可以根据它所支持的变量改成其他的形式。如{typedir}/{cc}.html 。

最后,{typedir}还可以改成html或者post或者article等,如:html/{cc}.html 。这样的话,文章页的保存目录只有一层了。如 http://www.xkzzz.com/html/5876.html 。建议去除html这个路径就可以了,另的就不要再修改如果内容多的话也方便维护。

Continue reading

,

关于栏目路径的{cmspath}|DedeCms

首先说一下{cmspath}的意思,,打开后台”系统配置参数”可以看到第二项,DedeCms安装目录:
这个就是{cmspath}所解析出来的路径,

假如beta2升级到lit,需要手工修改栏目属性,把{cmspath}去除.或者你运行setup升级完之后用lit的所有文件
替换掉之前的B2的所有文件,这样{cmspath}就可以正常解析成你的网站路径

假如你不用{cmspath}这个参数,.可以照下面的修改

执行SQL: update dede_arctype set typedir=replace(typeidr,’{cmspath}’,”);
以去掉数据库的里 {cmspath}
然后修改文件 catalog_add.php 找到 $true_typedir = str_replace(“{cmspath}”,$cfg_cmspath,$typedir);

改成
$true_typedir = str_replace(“”,$cfg_cmspath,$typedir);
就行

Continue reading

,

轻松修改DedeCms栏目路径为目录式

懂点SEO原理的都明白,目录式的URL较文件式的URL利于搜索引擎排名,而对于如何修改DEDECMS栏目路径为目录式,删除DEDECMS栏目链接后缀index.html,在网上搜索时发现了两个版本,特此说明   1、这个不彻底的,只能去掉模板里你所加了function=’str_replace(“index.html”,”",@me)’这段的链接,而DEDECMS自动生成的链接,如导航条,子栏目等,不会自动去掉的。   {dede:channel type=’top’}

{/dede:channel}   2、网上也有修改DEDECMS栏目路径为目录式的彻底方式。   找到文件:include/channelunit.func.php   在if($isdefault==-1)前加   if($ispart>2){   return $typedir;   }   if($defaultname == ‘index.html’){   $defaultname = ”;   }   OK,搞定了,呵呵,其实很多技术方面的小问题只要学会借助搜索引擎都是能够得到较好解决的。

Continue reading

,

phpcms2008模块开发目录文件分析

1、模块目录说明。
install 模块安装目录,安装模块时调用
uninstall 模块卸载目录,卸载模块时调用
admin 模块的后台管理目录
api 个人空间添加的应用API接口
include 引用文件目录
2、各相关文件说明
a、模块安装文件说明(install目录下)
模块安装时按顺序执行config.inc.php、mysql.sql、extention.inc.php
config.inc.php 模块说明文件,此文件必须
$module 模块名称,此名字不能和其它目录名称相同
$modulename 模块中文名称
$introduce 模块简介
$author 作者
$authorsite 作者站点
$authoremail 作者邮件
mysql.sql 模块数据表文件,添加新的模块的表的操作,必文件可选
需要把添加的模块插入一引模块记录到phpcms_module中。然后添加创建所需要的表的sql语句。
extention.inc.php 模块菜单扩展文件,此文件可选
用于把模块相应的功能菜单添加到menu中。
菜单parentid说明:
后台顶部菜单1
前台会员中心20
前台会员中心快捷菜单40
详细请调用系统设置——>相关设置——>菜单管理——>管理菜单查看

如果有template目录,则把template目录复制到cms根目录/templates/{模块方案}/模块目录中。
如果有languages目录,则把languages目录复制到cms根目录/languages/{安装的语言}/
b、模块卸载文件说明(uninstall目录下)
模块卸载时按顺序执行extention.inc.php、mysql.sql、delete.txt文件
extention.inc.php 删除安装时添加的菜单,如果存在则执行,可选
mysql.sql删除模块数据表,在phpcms_module中删除模块记录,如果存在则执行,可选
删除delete.txt中指定的文件或文件夹,指定的文件或文件夹必须是站点/目录下的,如果存在则执行,可选

删除cms根目录/languages/{安装的语言}/{模块}.lang.php文件
删除cms根目录/languages/{安装的语言}/{模块}._admin.lang.php文件
删除cms根目录/templates/{模块方案}/模块目录
* 详细请查看admin/module.inc.php文件.

c、模块权限配置文件(include/priv.inc.php)
如果模块需要权限管理功能,则通过修改此文件进行。
此文件由一个二维数据结构组成,结构如下。
return array(功能1=>array(功能1详细),
功能2=>array(功能2详细),
);
?>
一维数组是每个功能,二维数据是功能的详细,示例:
return array('all'=>array(‘name’=>’模块管理’, ‘file’=>”, ‘action’=>”),
‘add’=>array(‘name’=>’会员添加’, ‘file’=>’member’, ‘action’=>’add’)
‘add2′=>array(‘name’=>’会员添加2′, ‘file’=>’member’, ‘action’=>’add2′)
)
?>
二维数据中name为功能的中文名称,file为执行文件,action为操作的动作

Continue reading

实用tree无限分类

<?php

/**
* author: askie
* blog:

http://www.pkphp.com

* 版权: 随便用
* 无限分类
*/
class Tree
{

public $data=array();
public $cateArray=array();

function Tree()
{

}
function
setNode ($id, $parent, $value)
{
$parent = $parent?$parent:0;

$this->data[$id]             = $value;
$this->cateArray[$id]
= $parent;
}
function getChildsTree($id=0)
{

$childs=array();
foreach ($this->cateArray as $child=>$parent)

{
if ($parent==$id)

{

$childs[$child]=$this->getChildsTree($child);
}

}
return $childs;
}
function
getChilds($id=0)
{
$childArray=array();

$childs=$this->getChild($id);
foreach ($childs as $child)

{
$childArray[]=$child;

$childArray=array_merge($childArray,$this->getChilds($child));

}
return $childArray;
}
function getChild($id)
{

$childs=array();
foreach ($this->cateArray as
$child=>$parent)
{
if ($parent==$id)

{

$childs[$child]=$child;
}
}
return
$childs;
}
//单线获取父节点
function getNodeLever($id)
{

$parents=array();
if
(key_exists($this->cateArray[$id],$this->cateArray))
{

$parents[]=$this->cateArray[$id];

$parents=array_merge($parents,$this->getNodeLever($this->cateArray[$id]));

}
return $parents;
}
function
getLayer($id,$preStr=’|-’)
{
return
str_repeat($preStr,count($this->getNodeLever($id)));
}
function
getValue ($id)
{
return $this->data[$id];
} // end
func
}

/*$Tree = new
Tree(“请选择分类”);
//setNode(目录ID,上级ID,目录名字);
$Tree->setNode(1, 0,
‘目录1′);
$Tree->setNode(2, 1, ‘目录2′);
$Tree->setNode(5, 3,
‘目录5′);
$Tree->setNode(3, 0, ‘目录3′);
$Tree->setNode(4, 2,
‘目录4′);
$Tree->setNode(9, 4, ‘目录9′);
$Tree->setNode(6, 2,
‘目录6′);
$Tree->setNode(7, 2, ‘目录7′);
$Tree->setNode(8, 3,
‘目录8′);

//print_r($Tree->getChildsTree(0));
//print_r($Tree->getChild(0));
//print_r($Tree->getLayer(2));

$category
= $Tree->getChilds();

//遍历输出
foreach ($category as
$key=>$id)
{
echo $id.$Tree->getLayer($id,
‘|-’).$Tree->getValue($id).”\n”;
}*/

?>

Continue reading


prev posts