如何在织梦自定义搜索结果页advancedsearch.htm中有效调用channel标签?
在织梦(DedeCMS)系统中,自定义搜索结果页advancedsearch.htm
调用频道标签是一个常见需求,通过自定义搜索,用户可以更灵活地筛选和展示内容,而调用频道标签则有助于在搜索结果中显示更多相关信息,以下是详细的步骤和示例代码:
一、修改高级搜索模板文件
1、拷贝默认模板:将默认的高级搜索模板advancedsearch.htm
拷贝到您的模板目录下,通常路径为/templets/default/advancedsearch.htm
。
2、修改头部和尾部标签:在模板文件中,您可以使用自定义函数来调用头部和尾部模板。
<?php pasterTempletDiy("default/head.htm"); ?> <! 这里是搜索结果内容 > <?php pasterTempletDiy("default/footer.htm"); ?>
3、调用自定义字段:在{dede:datalist}
标签内,您可以直接调用自定义字段,假设您的自定义字段名为custom_field
,可以这样写:
{dede:datalist} <li> <h2><a href="[field:arcurl/]">[field:title/]</a></h2> <p>[field:description function='cn_substr(@me,80)'/]...</p> <p>自定义字段: [field:custom_field/]</p> </li> {/dede:datalist}
二、修改高级搜索处理文件
1、修改查询语句:打开plus/advancedsearch.php
文件,找到查询语句部分,确保查询包含附加表的内容。
if($mid < 1) { $where = str_replace('main.', 'addon.', $where); $orderby = str_replace('main.', 'addon.', $orderby); $query = "SELECT addon.*, arctype.* FROM $addontable addon LEFT JOIN #@__arctype arctype ON arctype.id = addon.typeid $where $orderby"; } else { $query = "SELECT main.id AS aid,main.*,main.description AS description1, type.*, addon.* FROM $maintable main LEFT JOIN #@__arctype type ON type.id = main.typeid LEFT JOIN $addontable addon ON addon.aid = main.id $where $orderby"; }
2、添加自定义字段过滤条件:如果需要根据自定义字段进行过滤,可以在$where
变量中添加相应的条件。
if (!empty($var)) { $where .= " AND addon.$var LIKE '%${$var}%'"; }
三、调用频道标签
1、定义频道标签:在include/extend.func.php
文件中定义一个函数,用于获取自定义字段的值。
function GetAddField($aid, $addField) {
global $dsql;
$row = $dsql>GetOne("SELECT c.addtable FROM #@_archives AS a LEFT JOIN #@_channeltype AS c ON a.channel=c.id where a.id='$aid'");
$addtable = trim($row['addtable']);
$row = $dsql>GetOne("SELECT $addField FROM$addtable
WHERE aid=$aid");
return $row["$addField"];
}
2、在模板中使用自定义函数:在advancedsearch.htm
模板中,可以使用{dede:field.custom_field function='GetAddField(@me,"custom_field")'/}
来调用自定义字段的值。
{dede:datalist} <li> <h2><a href="[field:arcurl/]">[field:title/]</a></h2> <p>[field:description function='cn_substr(@me,80)'/]...</p> <p>自定义字段: {dede:field.custom_field function='GetAddField(@me,"custom_field")'/}</p> </li> {/dede:datalist}
四、相关问答FAQs
1、如何在高级搜索页面显示自定义字段?
确保在plus/advancedsearch.php
文件中的查询语句包含附加表的内容,并在模板文件advancedsearch.htm
中直接调用自定义字段。{dede:field.custom_field/}
。
2、如何根据自定义字段进行过滤?
在plus/advancedsearch.php
文件中,根据用户输入的自定义字段值构建过滤条件,并将其添加到$where
变量中。$where .= " AND addon.$var LIKE '%${$var}%'";
。
织梦自定义搜索结果页advancedsearch.htm
调用频道标签的过程涉及多个步骤,包括修改模板文件、调整查询语句以及定义和使用自定义函数,通过这些步骤,可以实现更灵活和丰富的搜索结果展示。