`

给织梦的dede:channel增加可选择范围的属性

 
阅读更多

需要调用一些指定ID几到几的一些栏目。刚开始打算直接将链接写死在模版里。后来觉得这样对程序的扩展性不是很好。客户是不懂程序的,你不能指望他也会修改模版。于是就有了做这样一个小功能的想法。 在原来的dede:channel基础上增加了一个limit属性。 limit是起点,row是条数

使用方法:

{dede:channel type='son' limit='3' typeid='1' reid='1' row='5' "<a href='~typelink~' class='thisclass'>~typename~</a> |"} <a href="[field:typelink/]"><span class="aaa">[field:typename/]</span></a> {/dede:channel}

将一下的代码复制到include/taglib/channel.lib.php中进行覆盖:

function lib_channel(&$ctag,&$refObj)
{
	global $dsql;
 
	$attlist = "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|,cacheid|,limit|0";
	FillAttsDefault($ctag->CAttribute->Items,$attlist);
	extract($ctag->CAttribute->Items, EXTR_SKIP);
	$innertext = $ctag->GetInnerText();
	$line = empty($row) ? 100 : $row;
 
	$likeType = '';
	//读取固定的缓存块
	$cacheid = trim($cacheid);
	if($cacheid !='') {
		$likeType = GetCacheBlock($cacheid);
		if($likeType != '') return $likeType;
	}
 
	$reid = 0;
	$topid = 0;
	//如果属性里没指定栏目id,从引用类里获取栏目信息
	if(empty($typeid))
	{
		if( isset($refObj->TypeLink->TypeInfos['id']) )
		{
			$typeid = $refObj->TypeLink->TypeInfos['id'];
			$reid = $refObj->TypeLink->TypeInfos['reid'];
			$topid = $refObj->TypeLink->TypeInfos['topid'];
		}
		else {
	  	$typeid = 0;
	  }
	}
	//如果指定了栏目id,从数据库获取栏目信息
	else
	{
		$row2 = $dsql->GetOne("Select * From `#@__arctype` where id='$typeid' ");
		$typeid = $row2['id'];
		$reid = $row2['reid'];
		$topid = $row2['topid'];
		$issetInfos = true;
	}
 
	if($type=='' || $type=='sun') $type='son';
	if($innertext=='') $innertext = GetSysTemplets("channel_list.htm");
 
	if($type=='top')
	{
		$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
		  From `#@__arctype` where reid=0 And ishidden<>1 order by sortrank asc limit $limit, $line ";
	}
	else if($type=='son')
	{
		if($typeid==0) return '';
		$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
		  From `#@__arctype` where reid='$typeid' And ishidden<>1 order by sortrank asc limit $limit, $line ";
	}
	else if($type=='self')
	{
		if($reid==0) return '';
		$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
			From `#@__arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit $limit, $line ";
	}
	//And id<>'$typeid'
	$needRel = false;
	$dtp2 = new DedeTagParse();
	$dtp2->SetNameSpace('field','[',']');
	$dtp2->LoadSource($innertext);
	//检查是否有子栏目,并返回rel提示(用于二级菜单)
	if(ereg(':rel', $innertext)) $needRel = true;
 
	if(empty($sql)) return '';
	$dsql->SetQuery($sql);
	$dsql->Execute();
 
	$totalRow = $dsql->GetTotalRow();
	//如果用子栏目模式,当没有子栏目时显示同级栏目
	if($type=='son' && $reid!=0 && $totalRow==0)
	{
		$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
			From `#@__arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit $limit, $line ";
		$dsql->SetQuery($sql);
	  $dsql->Execute();
	}
	$GLOBALS['autoindex'] = 0;
	for($i=0;$i < $line;$i++)
	{
		if($col>1) $likeType .= "<dl>\r\n";
		for($j=0; $j<$col; $j++)
		{
			if($col>1) $likeType .= "<dd>\r\n";
			if($row=$dsql->GetArray())
			{
				$row['sonids'] = $row['rel'] = '';
				if($needRel)
				{
					$row['sonids'] = GetSonIds($row['id'], 0, false);
					if($row['sonids']=='') $row['rel'] = '';
					else $row['rel'] = " rel='dropmenu{$row['id']}'";
				}
				//处理同级栏目中,当前栏目的样式
				if( ($row['id']==$typeid || ($topid==$row['id'] && $type=='top') ) && $currentstyle!='' )
				{
					$linkOkstr = $currentstyle;
					$row['typelink'] = GetOneTypeUrlA($row);
					$linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
					$linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
					$linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
					$linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
					$likeType .= $linkOkstr;
				}
				else
				{
					$row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
					if(is_array($dtp2->CTags))
					{
						foreach($dtp2->CTags as $tagid=>$ctag)
						{
							if(isset($row[$ctag->GetName()])) $dtp2->Assign($tagid,$row[$ctag->GetName()]);
						}
					}
					$likeType .= $dtp2->GetResult();
				}
			}
			if($col>1) $likeType .= "</dd>\r\n";
			$GLOBALS['autoindex']++;
		}
		//Loop Col
		if($col>1)
		{
			$i += $col - 1;
			$likeType .= "	</dl>\r\n";
		}
	}
	//Loop for $i
	$dsql->FreeResult();
	if($cacheid !='') {
		WriteCacheBlock($cacheid, $likeType);
	}
	return $likeType;
}



分享到:
评论

相关推荐

    织梦dede中通过dede:pagelist实现中英文分页效果

    注意是修改方法的参数,为其添加$pagelang个参数;... {dede:pagelist listsize='5'/} {dede:pagelist pagelang='en' listsize='5'/} pagelang:en为英文,cn为中文,默认语言中文 其他功能可以自行扩展

    织梦 dede 列表Pagelist 内容prenext 中英

    织梦 dede 列表Pagelist 内容prenext 中英 首先需要找到安装目录下的include/arc.archives.class.php 注意是修改方法的参数,为其添加$pagelang个参数; 在页面中可以调用 {dede:prenext get='next' pagelang='...

    织梦DEDE_XML地图

    织梦DEDE_XML地图是针对织梦CMS(DedeCMS)系统的一种特殊文件,用于帮助搜索引擎更好地理解和抓取网站内容。织梦CMS是中国广泛应用的开源内容管理系统,它提供了丰富的功能和自定义选项,使得网站建设和管理更为...

    织梦dede5.8抢先体验版

    "织梦dede5.8抢先体验版"代表着这个系统的一个新迭代,它提供了对现有功能的改进和安全性的增强。 在描述中提到,织梦dede5.8的新版本主要在安全性能上有了显著提升,这可能是修复了已知的安全漏洞,增强了对SQL...

    dede织梦开发笔记

    - `{dede:channel type='son' row='7'}`:调用子栏目的导航,显示7个子栏目。 3. **调用单个栏目及其描述**: - `{dede:type}`标签用于调用栏目信息,如`[field:typelink /]"&gt;[field:typename /]&lt;/a&gt;`展示栏目...

    织梦dede 加强获取arcurl各种情况 自定义函数

    {dede:loop table='dede_archives' sort='' row='4' if=''} &lt;li&gt;&lt;a href='[field:id function=IDReturnURL(@me)/]'&gt;[field:title function=cn_substrR(@me,44)/]&lt;/a&gt;&lt;/li&gt; {/dede:loop} 自定义函数列表########...

    织梦Dede手册

    - 常用标签如`{dede:field name='title'/}`用于显示文章标题,`{dede:arclist}`用于循环显示文章列表。 - 模板文件通常为`.html`或`.tpl`格式,可以通过后台的模板编辑器直接修改。 5. **功能扩展**: - 插件...

    织梦dede后台使用教程通用版.doc

    这篇教程主要介绍了织梦dede后台的使用方法, 涉及到栏目设置、封面属性、列表属性、隐藏栏目等多个方面。 首先,教程讲解了栏目设置的两种类型:最终列表和封面。最终列表是可以发布多篇文章的栏目,例如新闻栏目...

    织梦5.7标签大全

    **{dede:channel type='son' typeid='8'}...{/dede:channel}**:此标签用于调用指定栏目的所有子栏目信息。 - **示例**: ```html {dede:channel type='son' typeid='8'} &lt;li&gt;&lt;a href="[field:typelink/]"&gt;...

    织梦dede5.7标签大全

    织梦dede5.7标签大全,非常实用。非常适合织梦开发人员的参考使用。

    织梦的一个列表嵌套循环读取

    这里的`field:id/`是将上一层`{dede:channel}`标签的ID传递给`{dede:arclist}`,使其能够根据分类ID读取相应的产品。 此外,织梦还提供了其他高级功能,如自定义字段、分页、排序等,可以根据实际需求进行组合使用...

    织梦dede 5.7 utf8 首页分页模块

    功能:可以实现在首页使用{dede:list}以及{dede:pagelist}标签,并且生成的时候可以将首页分页 index.html index_1.html index_2.html…… 进后台模块管理新增模块,导入xml文件。 除了xml文件,其他的上传到...

    dede后台织梦笔记总结

    - `dede:channel` 用于获取栏目的信息。 - `type='top'` 表示只获取顶级栏目。 - `currentstyle` 定义了当前选中栏目的样式。 - **子栏目调用** ```php {dede:channeltype='son'typeid='6'noself='yes'} ...

    学校实训毕业商用项目-(自适应手机)html5响应式教育培训行业机构织梦dede源码.zip

    源码基于织梦(DedeCMS)系统,这是一款在中国广泛使用的开源内容管理系统。以下将详细解释相关知识点: 1. **响应式设计**:响应式网页设计是一种使网站在不同设备上呈现良好效果的方法。它通过CSS3媒体查询等技术...

    适合企业站的织梦常用标签大全 自己整理

    {dede:channel row='9' type='top' } [field:typename function='substr(@me,0,8)'/] {/dede:channel} 文章自由列表标签 织梦的文章自由列表标签可以用来调用文章列表,格式如下: {dede:arclist titlelen='25' ...

    织梦常用采集规则

    {dede:trim}([^&gt;]*)&gt;{/dede:trim} {dede:trim}&lt;/a&gt;{/dede:trim} ``` 此规则能够精确匹配`&lt;a&gt;`标签,并保留其中的文字。通过这种方式,可以在采集过程中保留文本信息,同时去除掉不必要的HTML标签。 **1.2 去掉链接...

    最全的织梦标签

    - **栏目导航**:`{dede:channel type='top' row='8' currentstyle='&lt;li class="thisclass"&gt;...'}...{/dede:channel}`,用于调用网站顶部导航栏,`type='top'`表示只调用顶级栏目,`row='8'`限制调用数量,`...

    织梦dede北京分类信息网

    在这个“织梦DEDE北京分类信息网”项目中,我们可以看到它被用来构建了一个专门服务于北京地区的分类信息平台。 分类信息网站是互联网上的一种信息聚合平台,用户可以在这里发布和查找各种类型的信息,如房屋租赁、...

    织梦dede管理员密码修改工具

    织梦(DedeCMS)是一款广泛应用的开源中国内容管理系统,以其强大的内容管理和自定义功能深受广大网站管理员喜爱。然而,如同任何系统一样,有时用户可能会遇到忘记管理员密码的问题,这会严重影响到对网站的正常...

    织梦dede采集站定时自动审核文章V2.4+推送接口utf+gbk.zip

    2021年新开发的dede织梦定时自动审核文章V2.4版本+推送接口。织梦程序utf+gbk都可以用。这是在2.3版本的基础上做的升级,并且增加了gbk编码支持。 采集站有了这个插件,就可以解放双手了,不用自己在盯着后台去点...

Global site tag (gtag.js) - Google Analytics