admin 发表于 2020-7-10 14:38:29

Discuz!调用分类信息自定义字段




Discuz的分类信息功能可以说很强大了,是在社区版块的基本上进行扩展,可以添加很多自定义字段,而且可以设计帖子页,列表页,发贴页的模板风格。数据调用方式也和社区版块一样。但是,DZ目前只支持调用以下内容:
语法      语句
数据ID      {id}
帖子URL      {url}
帖子标题      {title}
附件图片      {pic}
帖子内容      {summary}
楼主      {author}
楼主UID      {authorid}
楼主头像      {avatar}
楼主头像(中)      {avatar_middle}
楼主头像(大)      {avatar_big}
帖子图标      {icon}
版块URL      {forumurl}
版块名称      {forumname}
主题分类名称      {typename}
主题分类图标      {typeicon}
主题分类URL      {typeurl}
分类信息名称      {sortname}
分类信息URL      {sorturl}
总发帖数      {posts}
今日发帖数      {todayposts}
最后回复时间      {lastpost}
发帖时间      {dateline}
回复数      {replies}
总浏览数      {views}
热度值      {heats}
推荐数      {recommends}
更多链接      {moreurl}
当前数据顺序      {currentorder}
当前数据是否在奇数行      {parity}
默认循环显示内容      ...
替代对应loop中指定数据内容,为奇数行,为偶数行      ...
特殊指定数据显示内容      ...
可设置打开方式的链接      <a href="{url}"{target}>{title}</a>
可设置缩略图大小的图片      <img src="{pic}" width="{picwidth}" height="{picheight}" /> 一般最常用的调用帖子主题,URL,图片,详细等。

那自己设计好的分类字段怎么调用呢?如,房屋信息:


默认情况下,上图的居室,面积,价格与区域是调用不出来的。

以调用二手房信息为例,实现调用的方法如下:
1、在后台-门户-模块管理-数据调用添加一个调用,名为“房产网首页_出租房房源_列表”,注意这个参数“只接受推送数据”,如果勾选了,那么数据只来源于手工推送,推送目标注意一定要在指定的社区版块。



上图里的是模块模板,调用帖子里的编号,标题,URL,然后用|@@|区分每个帖子,用@@区分每个帖子里的编号,标题,URL

2、数据调用设计好后,就要写php代码,读取帖子信息,然后进行加工处理。代码如下:
//调用DZ二手房
$fl_1 = file_get_contents('http://www.cnit618.com/api.php?mod=js&bid=102');
$fl_1 = str_replace("document.write('","",$fl_1);
$fl_1 = str_replace("');","",$fl_1);
$tmplist=explode("|@@|",$fl_1);
$tmpstr1="";
for($i=1;$i<count($tmplist);$i++)
{
$tmplist1=explode("@@",$tmplist[$i]);
$tmpstr1 = $tmpstr1.getlist1($tmplist1,$tmplist1,$tmplist1,$i);
}
function getlist1($id,$title,$url,$n)
{
mysql_select_db("dz");
$exec="select fang_shi,fang_ding,fang_wei,fang_mianji,gq_money,fang_quyu from dz_forum_optionvalue60 where tid =" . $id;
$result=mysql_query($exec);

if($rs=mysql_fetch_object($result))
{
if($rs->fang_quyu=="1")$quyu="老城区";
if($rs->fang_quyu=="2")$quyu="城东";
if($rs->fang_quyu=="3")$quyu="城南";
if($rs->fang_quyu=="4")$quyu="城西";
if($rs->fang_quyu=="5")$quyu="花湖";
if($rs->fang_quyu=="6")$quyu="华容区";
if($rs->fang_quyu=="7")$quyu="梁子湖区";

if($n%2==1)$style=""; else $style="mkt-libg";
return "<LI class=".$style."><SPAN class=wida><A title=".$title." href=".$url." target=_blank>".$title."</A></SPAN><SPAN class=\"mktc widb\">".$rs->fang_shi."室".$rs->fang_ting."厅".$rs->fang_wei."卫</SPAN><SPAN>".$rs->fang_mianji."平方</SPAN> <SPAN>".$rs->gq_money."万</SPAN> <SPAN>".$quyu."</SPAN> </LI>";
}
}

3、在模板里调用变量
<DIV class=area-zhsl>
<DIV class=hs-main-title>
<H4>二手房房源</H4><A href="#"
target=_blank>更多>></A></DIV>
<DIV class=zhsl-ul>
<UL>
<!--{block/99}-->
</UL></DIV>
<DIV class=mkt-col>
<UL>
<LI class=wida>名称 </LI>
<LI class=widb>居室 </LI>
<LI>面积 </LI>
<LI>价格 </LI>
<LI>区域 </LI></UL></DIV>
<DIV class=mkt-col-list>
<UL>
{$tmpstr1}</UL></DIV></DIV>

Discuz智能体 发表于 2025-3-18 17:51:51

在Discuz!中,分类信息自定义字段的调用确实是一个常见的需求,尤其是在需要展示特定分类信息(如房屋信息、商品信息等)时。你提到的步骤已经涵盖了大部分内容,但为了更清晰地解释如何调用分类信息自定义字段,我将进一步详细说明。

### 1. 后台设置分类信息字段
首先,你需要在Discuz!后台设置分类信息字段。以房屋信息为例,你可以在后台的“分类信息”管理中,为房屋信息添加自定义字段,如“居室”、“面积”、“价格”、“区域”等。

### 2. 创建数据调用模块
在后台的“门户” -> “模块管理”中,创建一个新的数据调用模块。你可以选择“帖子模块”或“分类信息模块”,具体取决于你的需求。

- **模块名称**:例如“房产网首页_出租房房源_列表”。
- **数据来源**:选择“分类信息”或“帖子”,并指定对应的版块。
- **只接受推送数据**:如果你希望手动推送数据,可以勾选此选项。

### 3. 编写模块模板
在模块模板中,你可以使用Discuz!提供的模板语法来调用分类信息字段。以下是一个简单的模板示例:

<ul>
<!--{loop $data $key $value}-->
    <li>
      <a href="{$value}">{$value}</a>
      <p>居室: {$value}</p>
      <p>面积: {$value}</p>
      <p>价格: {$value}</p>
      <p>区域: {$value}</p>
    </li>
<!--{/loop}-->
</ul>

在这个模板中,`field_1`、`field_2`、`field_3`、`field_4` 分别对应你在后台设置的自定义字段。

### 4. PHP代码处理数据
如果你需要对数据进行进一步处理,可以在PHP代码中获取数据并进行加工。以下是一个简单的PHP代码示例:

// 获取数据调用模块的内容
$fl_1 = file_get_contents('http://www.yourdomain.com/api.php?mod=js&bid=102');
$fl_1 = str_replace("document.write('","",$fl_1);
$fl_1 = str_replace("');","",$fl_1);
$tmplist = explode("|@@|", $fl_1);

$tmpstr1 = "";
foreach ($tmplist as $item) {
    $tmp = explode("@@", $item);
    $title = $tmp;
    $url = $tmp;
    $field_1 = $tmp; // 居室
    $field_2 = $tmp; // 面积
    $field_3 = $tmp; // 价格
    $field_4 = $tmp; // 区域

    // 根据区域ID转换为区域名称
    $quyu = "";
    switch ($field_4) {
      case "1": $quyu = "老城区"; break;
      case "2": $quyu = "城东"; break;
      case "3": $quyu = "城南"; break;
      case "4": $quyu = "城西"; break;
      case "5": $quyu = "花湖"; break;
      case "6": $quyu = "华容区"; break;
      case "7": $quyu = "梁子湖区"; break;
    }

    // 拼接HTML
    $tmpstr1 .= "<div class='house-item'>
                  <a href='{$url}'>{$title}</a>
                  <p>居室: {$field_1}</p>
                  <p>面积: {$field_2}</p>
                  <p>价格: {$field_3}</p>
                  <p>区域: {$quyu}</p>
                </div>";
}

### 5. 在模板中调用变量
最后,在模板中调用你生成的HTML内容:

<div class="house-list">
    {$tmpstr1}
</div>

### 6. 样式调整
你可以根据需要调整CSS样式,确保页面展示效果符合预期。

### 总结
通过以上步骤,你可以在Discuz!中成功调用分类信息自定义字段,并在页面上展示这些字段的内容。关键在于正确设置后台的分类信息字段,编写合适的模块模板,并在PHP代码中对数据进行处理。

如果你有更多关于Discuz!开发的问题,欢迎随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-19 13:34:39

在Discuz!中调用分类信息自定义字段是一个常见的需求,尤其是在你希望展示特定分类信息(如房屋信息)时。你提到的步骤已经非常详细,但为了更清晰地帮助你实现这一功能,我将进一步解释和优化这些步骤。

### 1. 后台设置数据调用
首先,你需要在Discuz!后台创建一个数据调用模块。具体步骤如下:

1. **进入后台**:登录Discuz!后台,找到“门户” -> “模块管理”。
2. **添加模块**:点击“添加模块”,选择“数据调用”。
3. **设置模块参数**:
   - **模块名称**:例如“房产网首页_出租房房源_列表”。
   - **数据来源**:选择“分类信息”。
   - **分类信息**:选择你创建的房屋信息分类。
   - **只接受推送数据**:如果你希望手动推送数据,可以勾选此选项。
   - **推送目标**:选择你希望展示这些数据的版块。

4. **模块模板**:在模块模板中,你可以使用默认的模板变量(如`{title}`、`{url}`等)来调用帖子标题、URL等信息。你提到的`|@@|`和`@@`是用来分隔不同帖子和帖子内部字段的自定义分隔符。

### 2. PHP代码处理数据
接下来,你需要通过PHP代码来处理这些数据,并提取出你需要的自定义字段(如居室、面积、价格等)。

// 调用DZ二手房数据
$fl_1 = file_get_contents('http://www.cnit618.com/api.php?mod=js&bid=102');
$fl_1 = str_replace("document.write('","",$fl_1);
$fl_1 = str_replace("');","",$fl_1);
$tmplist = explode("|@@|", $fl_1);

$tmpstr1 = "";

foreach ($tmplist as $item) {
    $fields = explode("@@", $item);
    if (count($fields) >= 3) {
      $title = $fields; // 帖子标题
      $url = $fields;// 帖子URL

      // 假设你已经从数据库中获取了自定义字段的值
      $fang_shi = $fields; // 居室
      $fang_ting = $fields; // 厅
      $fang_wei = $fields; // 卫
      $fang_mianji = $fields; // 面积
      $gq_money = $fields; // 价格
      $fang_quyu = $fields; // 区域

      // 区域转换
      $quyu = "";
      switch ($fang_quyu) {
            case "1": $quyu = "老城区"; break;
            case "2": $quyu = "城东"; break;
            case "3": $quyu = "城南"; break;
            case "4": $quyu = "城西"; break;
            case "5": $quyu = "花湖"; break;
            case "6": $quyu = "华容区"; break;
            case "7": $quyu = "梁子湖区"; break;
      }

      // 生成HTML
      $tmpstr1 .= "<div class='house-item'>
                        <a href='{$url}'>{$title}</a>
                        <span>{$fang_shi}室{$fang_ting}厅{$fang_wei}卫</span>
                        <span>{$fang_mianji}平方</span>
                        <span>{$gq_money}万</span>
                        <span>{$quyu}</span>
                     </div>";
    }
}

### 3. 在模板中调用变量
最后,你需要在模板中调用生成的`$tmpstr1`变量来展示数据。

<div class="house-list">
    <div class="house-header">
      <span>名称</span>
      <span>居室</span>
      <span>面积</span>
      <span>价格</span>
      <span>区域</span>
    </div>
    {$tmpstr1}
</div>

### 4. 样式调整
你可以通过CSS来调整展示的样式,确保页面美观。

.house-list {
    width: 100%;
    border: 1px solid #ccc;
    padding: 10px;
}

.house-header {
    font-weight: bold;
    border-bottom: 1px solid #ccc;
    padding-bottom: 5px;
    margin-bottom: 10px;
}

.house-item {
    padding: 5px 0;
    border-bottom: 1px dashed #ccc;
}

.house-item:last-child {
    border-bottom: none;
}

### 总结
通过以上步骤,你可以在Discuz!中成功调用并展示分类信息中的自定义字段。关键在于正确设置数据调用模块,并通过PHP代码处理数据,最后在模板中展示处理后的数据。如果你有更多自定义字段或复杂需求,可以根据这个基础进行扩展。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: Discuz!调用分类信息自定义字段