技术宅

当前位置:首页 > 网站教程 > 帝国教程

帝国教程

帝国cms用搜索做一些标签分类

时间:05-28 作者:
为啥用帝国cms用搜索做一些搜索分类呢,就是因为现在小伙伴们搞站总有奇怪想法,我们尽量在不二开的情况下去实现一些功能,这样不影响后续帝国cms版本升级。

前面我发过一次 帝
为啥用帝国cms用搜索做一些搜索分类呢,就是因为现在小伙伴们搞站总有奇怪想法,我们尽量在不二开的情况下去实现一些功能,这样不影响后续帝国cms版本升级。

前面我发过一次 帝国cms使用搜索做指定内容页面 https://www.ps288.com/wangzhan/ecmscourse/4563.html
这个方式相对简单一些,但是有人无法使用,我研究了下发现那个是GET方式搜索,但是不少人安装的帝国cms只能POST方式搜索
这2个是有点点区别的导致上个教程部分站不能使用,先给大家看下这2个的区别吧

GET方式搜索
URL可见性:搜索参数会显示在URL中(如?key=关键词)

数据长度限制:受URL长度限制(通常约2048字符)

安全性:较低,搜索内容暴露在地址栏

缓存/书签:可被浏览器缓存,可收藏为书签

后退/刷新:后退按钮可直接重新提交搜索

POST方式搜索
URL不可见:搜索参数不会显示在URL中

数据长度:理论上无限制(实际受服务器配置限制)

安全性:相对较高,参数不暴露

缓存/书签:无法直接收藏搜索结果页面

后退/刷新:后退或刷新时浏览器会提示重新提交表单

重点开始: 今天我们就用POST方式搜索 再搞一份教程,顺便再一起弄下 一值多词 自动实现多连接搜索词显示
就像这个页面 我们后台 朝代标签值 里 直接写   马楚,后梁,辽国,闽国,南汉,南平,前蜀,杨吴,五代十国,吴越
那么前台页面自动实现 多个词 搜索连接形式 显示


直接看代码

 <?php
// 获取年份字段值(用英文逗号分隔)
$nianhao_keywords = explode(',', $navinfor['nianhao']);

foreach ($nianhao_keywords as $keyword) {
    $keyword = trim($keyword);
    if (!empty($keyword)) {
        // 生成唯一表单ID(避免重复)
        $form_id = 'search_form_' . md5($keyword . time()); // 增加time()确保唯一性
?>
        <!-- 每个年份关键词对应一个隐藏表单 -->
        <form id="<?= $form_id ?>" action="/e/search/index.php" method="post" target="_blank" style="display: none;">
            <input type="hidden" name="keyboard" value="<?= htmlspecialchars($keyword) ?>">
            <input type="hidden" name="show" value="nianhao">  <!-- 修改1:字段名改为nianhao -->
            <input type="hidden" name="tbname" value="article">
            <input type="hidden" name="tempid" value="2">
            <input type="hidden" name="t" value="<?= time() ?>">
        </form>
        
        <!-- 显示为可点击的链接 -->
        <a href="javascript:void(0);" 
           onclick="document.getElementById('<?= $form_id ?>').submit();">
            <?= $keyword ?>
        </a>
<?php
    }
}
?>


使用的时候将里面的nianhao 字段名字 换成你自己的。

可以在onclick="document.getElementById('<?= $form_id ?>').submit();">的();"后面 加style="text-align: 等等 修改下简单的样式,不会玩的勿动。


如果上面的在列表模板使用无效的话 请看下面

首先
如果网站支持 可以直接   这也是只能一个值 里面单一个词的
<a href="/e/search/index.php?searchget=1&tbname=article&keyboard=[!--nianhao--]&show=nianhao,keywords&tempid=2" target="_blank">[!--nianhao--]</a>


一个值里面多个词 还是搞下面的吧

<span id="nianhao-data" data-value="[!--nianhao--]"></span>
<script>
(function () {
    var raw = document.getElementById("nianhao-data").getAttribute("data-value") || '';
    
    // 统一替换常见分隔符为英文逗号
    raw = raw
        .replace(/&#44;/g, ',')  // HTML实体逗号
        .replace(/,/g, ',')     // 中文逗号
        .replace(/、/g, ',');    // 顿号

    var nianhao = raw.split(',');
    for (var i = 0; i < nianhao.length; i++) {
        var kw = nianhao[i].trim();
        if (kw) {
            document.write(
                '<a href="/e/search/index.php?searchget=1&tbname=article&keyboard=' +
                encodeURIComponent(kw) +
                '&show=nianhao,keywords&tempid=2" target="_blank">' +
                kw + '</a> '
            );
        }
    }
})();
</script>
或者

<script>
function submitChaodaiSearch(keyword) {
    const form = document.createElement("form");
    form.method = "POST";
    form.action = "/e/search/index.php";
    form.target = "_blank";

    const inputs = {
        keyboard: keyword,
        show: "chaodai",
        tbname: "article",
        tempid: "2"
    };

    for (const name in inputs) {
        const input = document.createElement("input");
        input.type = "hidden";
        input.name = name;
        input.value = inputs[name];
        form.appendChild(input);
    }

    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
}
</script>


<script>
var chaodai = "[!--chaodai--]".split(',');
for (var i = 0; i < chaodai.length; i++) {
    var kw = chaodai[i].trim();
    if (kw) {
        document.write('<a href="javascript:submitChaodaiSearch(\'' + kw + '\')">' + kw + '</a> ');
    }
}
</script>
注意替换代码里的标签为你用的标签。