创建文件夹(分类)
这个其实就是分类,虽然支持手动分类(硬编码,写死的),现在基本放弃了,直接用活动的,在模板里直接添加一个参数即可 dynamic_folders='1' 。
<cms:template title='下载中心' clonable='1' dynamic_folders='1' order='40'></cms:template>
这样在模块右上角就会有文件夹管理的按钮了,进去之后,有标题,父文件夹(用于嵌套),描述,图片,权重等默认字段。
前台显示文件夹(分类)
默认情况下,这样即可调用出名字
<cms:folders> <cms:show k_folder_title /> </cms:folders>
如果需要调用指定模板下的文件夹
<cms:folders masterpage='news.php'> <a href="<cms:show k_folder_link />"><cms:show k_folder_title /></a> </cms:folders>
当然了,文件夹标签里含有很多参数,可以使用 <cms:dump_all />来查看所有参数列表。
默认文件夹按照文字的首字母排序,对于多层嵌套文件夹,要显示它的层级:hierarchical='1'
<cms:folders masterpage='news.php' hierarchical='1'> <cms:show k_folder_title /> (<cms:show k_level />) <br> </cms:folders>
不同层级的深度,由depth控制,下面只显示顶层文件夹
<cms:folders masterpage='news.php' hierarchical='1' depth='1'> <cms:show k_folder_title /> [<cms:show k_level />] <br> </cms:folders>
要只枚举层级树的某一部分,将根参数设置为父文件夹的名称
<cms:folders masterpage='news.php' root='world' hierarchical='1'> <cms:show k_folder_title /> [<cms:show k_level />] <br> </cms:folders>
要只列出文件夹的子文件夹,将 childof 参数设置为父文件夹的名称
<cms:folders masterpage='news.php' childof='world' hierarchical='1'> <cms:show k_folder_title /> [<cms:show k_level />] <br> </cms:folders>
要排除某个文件夹,请将排除参数设置为该文件夹名称。如果要排除多个文件夹,请用逗号分隔这些文件夹
<cms:folders masterpage='news.php' hierarchical='1' exclude='music, asia'> <cms:show k_folder_title /> [<cms:show k_level />] <br> </cms:folders>
无序列表的创建
如果我们想创建一个无序列表,且可能超过三层嵌套,ul>li>ul>li, 我们只需要增加 extended_info='1' 参数,使用下方代码。
<cms:folders masterpage='news.php' childof='world' hierarchical='1' extended_info='1'> <cms:if k_level_start ><UL></cms:if> <cms:if k_element_start ><LI> <cms:show k_folder_title /> </cms:if> <cms:if k_element_end ></LI></cms:if> <cms:if k_level_end ></UL></cms:if> </cms:folders>
如果我们只需要基础简单的无序列表,可以有快捷的代码,只是上述代码可以精确控制。
<cms:listfolders masterpage='news.php' childof='world' hierarchical='1'/>
Listfolders 有个额外的参数 - show_count。将此设置为1时,文件夹名称后会显示文件夹内的页数。
当前文件夹
当前如果是列表模板或者是页面模板,当前文件夹的判断方式不一样
<cms:if k_is_page || k_is_folder > <cms:if k_folder_name ><cms:set current_folder=k_folder_name /></cms:if> <cms:if k_page_foldername ><cms:set current_folder=k_page_foldername /></cms:if> </cms:if>
先获取好当前页的变量再做判断,一下是给当前页li加上 selected 类
<cms:folders hierarchical='1' extended_info='1'> <cms:if k_level_start ><UL></cms:if> <cms:if k_element_start > <cms:set my_class='' /> <cms:if "<cms:is_ancestor parent=k_folder_name child=current_folder />" > <cms:set my_class='class="selected"' /> </cms:if> <LI <cms:show my_class />> <span <cms:show my_class />><cms:show k_folder_title /></span> </cms:if> <cms:if k_element_end ></LI></cms:if> <cms:if k_level_end ></UL></cms:if> </cms:folders>
其中新奇的是:通过is_ancestor标签确定了k_folder_name变量中的文件夹是否是我们上面保存的“current_folder”的祖先之一, 如果是,我们只需将“select”类设置为输出的LI和SPAN元素。
若要仅列出层级结构中文件夹的祖先,可以使用 parentfolders 标签。它按顺序列出文件夹的所有父文件
<cms:parentfolders folder='china' > <a href="<cms:show k_folder_link/>"><cms:show k_folder_title/></a> > </cms:parentfolders>
上面的片段将输出:
World News > Asian News > China News
像一个面包屑了对吧,面包屑有专门的标签:
<cms:if k_is_page || k_is_folder > <cms:breadcrumbs separator=' > ' include_template='1'/> </cms:if>
上述摘录将输出“China News”文件夹中某页的以下内容——
include_template参数将当前模板(此处为“新闻”)作为第一个元素添加。
News > World News > Asian News > China News
如果需要更加灵活,使用上面提到的 farentfolder标签也可以实现相同效果
<cms:if k_is_page || k_is_folder > <a href="<cms:show k_template_link/>"><cms:show k_template_title/></a> > <cms:if k_folder_name ><cms:set my_folder=k_folder_name /></cms:if> <cms:if k_page_foldername ><cms:set my_folder=k_page_foldername /></cms:if> <cms:if my_folder > <cms:parentfolders folder=my_folder > <a href="<cms:show k_folder_link/>"><cms:show k_folder_title/></a> > </cms:parentfolders> </cms:if> </cms:if>
关于多级文件夹下的文章循环调用,请参阅:循环文件夹及文件夹下的文章