DEDECMS:启用随机模板时,特定栏目独立设置模板

需积分: 3 0 下载量 129 浏览量 更新于2024-08-04 收藏 2KB TXT 举报
DEDECMS是一个流行的开源内容管理系统,它允许用户根据需要调整模板显示方式。当启用随机模板功能时,用户可能会遇到一种情况:希望某些特定的栏目(如文章类型ID为1,2,3,5,12,13,14,15的文章)不参与随机模板选择,而是使用各自独立的预设模板。 首先,理解DEDECMS中的随机模板机制是关键。随机模板功能通过`dede/article_template_rand.php`脚本实现,该脚本使用了PHP的`mt_rand()`函数来随机选择一个配置好的模板数组`$cfg_tamplate_arr`中的模板。原始代码遍历整个数组并更新所有文章的模板字段,但通过修改循环条件,可以限定只有特定类型的ID才会应用随机模板: ```php for($i=0;$i<10;$i++) { $temp=$cfg_tamplate_arr[mt_rand(0,$totalTmp)]; // 原始版本 // $dsql->ExecuteNoneQuery("Update`#@__addonarticle`settemplet='$temp'whereRIGHT(aid,1)='$i'"); // 修改后的版本,仅针对指定类型ID $dsql->ExecuteNoneQuery("Update`#@__addonarticle`settemplet='$temp'wheretypeidin(1,2,3,5,12,13,14,15)andRIGHT(aid,1)='$i'"); } ``` 在前端的模板选择部分,`/dede/templates/article_add.htm`中的`<select>`标签用于展示可选的模板列表。在原始代码中,`$rndsel`变量随机选择一个模板ID,并将其关联到相应的模板名称。当启用“指定栏目不参与随机”的功能时,需要在模板选择部分添加条件判断,例如: ```php <select name='templet' id='templet' style='width:200px' size='1'> <?php $rndsel=mt_rand(1,count($cfg_tamplate_arr))-1; // 原始版本,无条件选择 // foreach($cfg_tamplate_arr as $k => $v) // 更新后的版本,针对非指定类型ID(如ID 4, 16, 19) if($cid==4||$cid==16||$cid==19){ $tplt = $dsql->GetOne("Select * From `#@__arctype` where id='$cid'"); // 根据cid值动态获取模板,或者直接跳过随机选择 if ($tplt['templet'] !== '') { echo "<option value='{$tplt['templet']}' selected>{$tplt['templet']}</option>"; } else { // 如果是固定模板,则直接显示 $selectedTemplate = ...; // 获取该类型的具体模板名 echo "<option value='{$selectedTemplate}' selected>{$selectedTemplate}</option>"; } } else { // 对于其他参与随机的ID,执行原有随机选择逻辑 ... } ?> </select> ``` 这样,当用户选择“启用随机模板”且访问带有指定ID的文章时,这些文章将不会被随机分配模板,而是使用预先设置的独立模板。这个调整有助于保持网站布局的一致性和用户体验,同时仍保留了模板灵活性。