文件夹分类(Folders)


创建文件夹(分类)

这个其实就是分类,虽然支持手动分类(硬编码,写死的),现在基本放弃了,直接用活动的,在模板里直接添加一个参数即可 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>&nbsp;>
</cms:parentfolders>

上面的片段将输出:

World News > Asian News > China News

像一个面包屑了对吧,面包屑有专门的标签:

<cms:if k_is_page || k_is_folder >
    <cms:breadcrumbs separator='&nbsp;>&nbsp;' 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>&nbsp;>
    <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>&nbsp;>
        </cms:parentfolders>
    </cms:if>
</cms:if>

关于多级文件夹下的文章循环调用,请参阅:循环文件夹及文件夹下的文章