当前位置:首页 > 行业动态 > 正文

如何在Dedecms问答系统中调用首页所有问题的列表?

在DedeCMS中,要调用问答首页的所有问题列表,你可以使用自定义标签和SQL语句。以下是一个示例方法:,,1. 打开你的模板文件(通常是 index.htm或类似的文件)。,2. 在需要显示 问题列表的位置插入以下代码:,,“ html,{dede:sql name=getQuestions},SELECT * FROM #@__qa_question ORDER BY id DESC,{/dede:sql},{dede:list row='10' titlelen='50' orderby='pubdate'},[field:title function="cn_substr(@me,1,50)"/],{/dede:list},` ,,这个代码做了以下几件事:,,1. 使用{dede:sql} 标签执行一个SQL查询,从#@__qa_question 表中选择所有记录,并按id 降序排列。,2. 使用{dede:list} 标签循环遍历查询结果,并显示每个问题的标题。,3. row=’10’ 表示每页显示10条记录。,4. titlelen=’50’ 表示标题长度限制为50个字符。,5. orderby=’pubdate’ 表示按发布日期排序。,,请根据你的具体需求调整这些参数。如果你想要显示更多或更少的问题,可以修改row`的值。如果表名或字段名不同,请相应地修改SQL查询中的表名和字段名。,,希望这能帮助到你!

在DedeCMS中,要实现问答首页调用所有问题列表,可以通过修改模板文件和编写自定义标签来实现,以下是一个详细的步骤指南:

1. 创建自定义标签

我们需要创建一个自定义标签来获取所有的问答数据,打开include/arc.tagdefault.class.php 文件,添加如下代码:

/**
 * 获取问答列表
 */
function getQAList($recommend = 'n', $typeid = '1', $num = 20, $orderway = 'desc', $cache = 0) {
    global $dsql;
    $row = $dsql>GetOne("SELECT count(*) as total FROM dede_ask where status=1");
    if ($row['total'] == 0) return '';
    
    $pagesize = $num;
    $pagenum = $this>PageSet($row['total'], $pagesize);
    $limitSql = " limit " . ($pagenum['start']  1) * $pagesize . ", $pagesize";
    
    $orderSql = ($orderway == 'desc' ? ' order by id desc' : ' order by id asc');
    $list = $dsql>GetList("SELECT * from dede_ask where status=1 $orderSql $limitSql");
    return $list;
}

2. 修改模板文件

我们需要在模板文件中调用这个自定义标签,假设你的问答首页模板文件是templets/default/article_qa_list.htm,编辑该文件并添加如下代码:

{dede:getQAList}
    <ul>
        {loop $list $item}
            <li>
                <h3><a href="{dede:field name='url'/}">{dede:field name='title'/}</a></h3>
                <p>{dede:field name='content' function='cn_substr(@me,80)'/}</p>
                <span >{dede:field name='pubdate' function='MyDate("Ymd",@me)'/}</span>
            </li>
        {/loop}
    </ul>
{/dede:getQAList}

3. 刷新缓存

完成上述步骤后,刷新DedeCMS的缓存,以确保新标签生效,进入后台 > 系统管理 > SQL命令行工具,执行以下SQL语句:

DELETE FROM dede_cache WHERE mark='index';

重新生成首页即可看到效果。

FAQs

1. 如何更改每页显示的问题数量?

在模板文件中,你可以看到这样的一行代码:

{dede:getQAList num='10'}

这里的num='10' 表示每页显示10个问题,你可以将数字改为你需要的数量,例如num='20' 表示每页显示20个问题。

2. 如果我想按时间倒序排列问题,该如何操作?

同样在模板文件中,有这样一行代码:

{dede:getQAList orderway='desc'}

这里的orderway='desc' 表示按时间倒序排列,如果你想按时间正序排列,可以将desc 改为asc。

序号 方法名称 参数说明 返回结果 说明
1 {dede:arclist} row='10' page='1' titlelen='30' typeid='0' nnews='10' orderby='id' rOrderBy='desc' nopic='1' flag='0' channelid='0' classid='0' listtemp='content/index_article_list' getlastpost='1' } 问题列表及其相关信息 使用此标签调用指定类别的所有问题,参数可以根据需要进行调整。row表示每页显示的条数,page表示当前页码,titlelen长度,typeid表示分类ID,nnews表示新闻数量,orderby表示排序方式,rOrderBy表示降序或升序,nopic表示是否显示图片,flag表示是否显示推荐,channelid表示频道ID,classid表示栏目ID,listtemp表示列表模板,getlastpost表示获取最后一条帖子
2 {dede:arctype} id='0' typeid='0' row='10' col='1' titlelen='30' classid='0' listtemp='content/index_article_list' channeltype='0' reid='0' } 分类列表 使用此标签调用指定分类的问题列表,参数可以根据需要进行调整。id表示分类ID,typeid表示分类类型,row表示每页显示的条数,col表示每行显示的条数,titlelen长度,classid表示栏目ID,listtemp表示列表模板,channeltype表示频道类型,reid表示推荐ID
3 {dede:arctype} id='0' typeid='0' row='10' col='1' titlelen='30' classid='0' listtemp='content/index_article_list' channeltype='0' reid='0' } 栏目列表 使用此标签调用指定栏目的所有问题列表,参数可以根据需要进行调整。id表示栏目ID,typeid表示分类类型,row表示每页显示的条数,col表示每行显示的条数,titlelen长度,classid表示栏目ID,listtemp表示列表模板,channeltype表示频道类型,reid表示推荐ID
0