xiao9469 发表于 2023-6-17 08:36:13

分类信息模版,如果字段值为空则不显示的代码怎么写

我通过分类信息设置了4个标签字段(选填),需要如果标签字段值为空(不填),则不显示这个字段的标签。
在【帖子页模版】我是这么写的htm代码:
<div class="infosItem_tags">然后加了一段JS代码:
<script>    window.onload = function() {      var test1="{bqian1_value}";      if (test1.indexOf('无') >=0) {document.getElementById("bqian1").style.display = "none"; };      var test2="{bqian2_value}";      if (test2.indexOf('无') >=0) {document.getElementById("bqian2").style.display = "none"; };      var test3="{bqian3_value}";      if (test3.indexOf('无') >=0) {document.getElementById("bqian3").style.display = "none"; };      var test4="{bqian4_value}";      if (test4.indexOf('无') >=0) {document.getElementById("bqian4").style.display = "none"; };            }</script>
通过以上代码,在【帖子页】实现了如果标签字段值为空(不填),则不显示这个字段的标签的效果。



但问题在于,将这htm和js代码放到【列表页模版】,列表页却没有这个效果。



通过反复测试,发现列表页如果只有一个帖子才有效果,我想应该是列表页模版不能照搬帖子页的代码,但不知道要如何修改,求大神指点应该如何解决?


我知道答案 回答被采纳将会获得1 贡献 已有1人回答

拾光 发表于 2023-6-17 08:36:38

<div class="infosItem_tags">                                        <i id="bqian1">{bqian1_value}</i>                                        <i id="bqian2">{bqian2_value}</i>                                        <i id="bqian3">{bqian3_value}</i>                                        <i id="bqian4">{bqian4_value}</i>                              </div>编辑帖子没注意,htm代码不完整就发出来了,给补上

Discuz智能体 发表于 2025-3-17 02:40:13

在Discuz的分类信息模板中,如果你希望在列表页也实现字段值为空时不显示的效果,需要注意列表页和帖子页的模板渲染方式有所不同。列表页通常会一次性渲染多个帖子,因此你的JS代码需要针对每个帖子进行处理。

你可以通过以下方式修改你的代码,使其在列表页也能正常工作:

### 1. 修改HTML模板
在列表页模板中,确保每个帖子的标签字段都有一个唯一的ID或类名。你可以通过帖子的ID来区分不同的帖子。例如:

<!-- 列表页模板 -->
<!-- 假设每个帖子的ID为 {pid} -->
<div id="post_{pid}">
    <div id="bqian1_{pid}" class="bqian">{bqian1_value}</div>
    <div id="bqian2_{pid}" class="bqian">{bqian2_value}</div>
    <div id="bqian3_{pid}" class="bqian">{bqian3_value}</div>
    <div id="bqian4_{pid}" class="bqian">{bqian4_value}</div>
</div>

### 2. 修改JS代码
在列表页模板中,JS代码需要遍历每个帖子,并根据字段值来决定是否显示对应的标签。你可以使用`querySelectorAll`来获取所有的帖子,然后对每个帖子进行处理。

window.onload = function() {
    // 获取所有的帖子
    var posts = document.querySelectorAll('');
   
    posts.forEach(function(post) {
      var pid = post.id.split('_'); // 获取帖子ID
      
      // 检查每个标签字段是否为空
      var bqian1 = document.getElementById("bqian1_" + pid);
      var bqian2 = document.getElementById("bqian2_" + pid);
      var bqian3 = document.getElementById("bqian3_" + pid);
      var bqian4 = document.getElementById("bqian4_" + pid);
      
      if (bqian1 && bqian1.textContent.trim() === "") {
            bqian1.style.display = "none";
      }
      if (bqian2 && bqian2.textContent.trim() === "") {
            bqian2.style.display = "none";
      }
      if (bqian3 && bqian3.textContent.trim() === "") {
            bqian3.style.display = "none";
      }
      if (bqian4 && bqian4.textContent.trim() === "") {
            bqian4.style.display = "none";
      }
    });
};

### 3. 解释
- **HTML部分**:每个帖子的标签字段都有一个唯一的ID,例如`bqian1_{pid}`,其中`{pid}`是帖子的ID。
- **JS部分**:通过`querySelectorAll`获取所有的帖子,然后遍历每个帖子,检查每个标签字段的值是否为空。如果为空,则隐藏该字段。

### 4. 注意事项
- 确保`{pid}`在列表页模板中是唯一的,并且能够正确获取到。
- 如果列表页的帖子是通过AJAX动态加载的,你可能需要在AJAX加载完成后再次执行这个JS代码。

通过这种方式,你可以在列表页中实现字段值为空时不显示的效果。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 分类信息模版,如果字段值为空则不显示的代码怎么写