做網站,我們是認真的!

網站適配電腦+手機端,僅1280元,送2000M阿里云服務器,送com域名+免費備案
網站前端采用靜態系統顯示,后端動態管理,我們承諾網站包收錄,完成網站之后把源碼給客戶!

觀點

互聯網+時代,說建站,談運營與網絡營銷

dede新增欄目如何無限分類

時間:2020-12-21

用織夢做過比較大型的網站,或者建過多級欄目,并且對用戶進行欄目授權的人可能遇到過,織夢默認的是最高只能授權到二級欄目,再往下分就不可以了。這樣就將整個指定的二級欄目及其下級的所有欄目都授權給了這個用戶,但是有的時候,我們想要單獨的給其授權某一個三級欄目或者四級欄目。那么目前織夢的這個欄目設置就不合適了。所以今天因為工作的需要我做了一下改動。

不以解決問題的學習都是耍流氓,今天既然遇到了這個問題,就應該想辦法解決。首先我看了一下這樣改動之后會產生的影響。第一,既然是這樣的欄目可能是給外部的人用,所以要讓之前所擁有的用戶欄目授權不受影響,這樣是最好了,因為我看了一下這個授權欄目的規則,其實就是通過一個admin表的typeid字段,只要指定一個或多個二級欄目的id,就可以在欄目管理,和發布文章,編輯文章的模塊檢索出這個id對應的一級欄目id和其下所有的多級欄目id,進行授權,這樣他就可以管理這個整個的二級欄目了,那么我們要保證之前的所有用戶的這個規則不變,而又對新加的這用外部用戶定義一個新的規則。之前寫的url過濾,也是為了防止這些外部用戶的。第二,要同時修改文章發布和文章編輯的文章欄目選項。所以,我們就要對這些用戶加以區分了,區分內部用戶和外部用戶,所以我們可以在admin加一個字段。具體做法如下:我只是簡單將一下,這里提供下載,將對應的文件覆蓋一下就可以了。 

1、給admin表增加一個字段區分授權用戶。我加的是一個‘yesno’字段,1為授權用戶,默認為0。如果你不能直接操作數據庫可用sql語句
PHPALTER TABLE  `dede_admin` ADD  `yesno` SMALLINT( 1 ) NOT NULL DEFAULT  '0' AFTER  `loginip`1 ALTER TABLE  `dede_admin` ADD  `yesno` SMALLINT( 1 ) NOT NULL DEFAULT  '0' AFTER  `loginip`

2、修改系統用戶管理的添加賬戶操作,
這個是我修改之后將所有的欄目讀出,默認的是只讀到第二級欄目。做法是借鑒了文章發布時的欄目選擇。
a.找到sys_admin_user_add.php這個文件,在頭部加上這一句,require_once(DEDEADMIN.’/inc/inc_catalog_options.php’);進而加載必要的函數,
b.z找到$dsql->Execute(‘op’);將從他到include DedeInclude(‘templets/sys_admin_user_add.htm’);之間的部分不包括這兩個東東,換成$typeOptions .= GetOptionList(0,$cuserLogin->getUserChannel(),0)。這個你可以看一下,模板中通過$typeOptions得到的這些欄目列表,這個GetOptionList函數就能獲得所喲的欄目。這你訪問sys_admin_user_add.php這個文件時就出來所有的欄目了。 

3、第一步我們增加了一個yesno字段,那么我們這里就應該在添加賬戶時用到了,找到sys_admin_user_add.htm模板,在安全驗證串的后面加這樣一個單選框
<tr>
<td height=”30″>是否為外部編輯人員:</td>
<td style=”text-align:left;”>
<input type=”radio” name=”yesno” checked value=”0″ />否&nbsp;&nbsp;
<input type=”radio” name=”yesno” value=”1″ />是
</td>
</tr>,然后在sys_admin_user_add.php文件的if($dopost==’add’)條件里面的$inquery改為這樣
PHP$inquery = "INSERT INTO `dedecp_admin`(id,usertype,userid,pwd,uname,typeid,tname,email,yesno)VALUES('$mid','$usertype','$userid','$pwd','$uname','$typeid','$tname','$email','$yesno'); ";1 $inquery = "INSERT INTO `dedecp_admin`(id,usertype,userid,pwd,uname,typeid,tname,email,yesno)VALUES('$mid','$usertype','$userid','$pwd','$uname','$typeid','$tname','$email','$yesno'); "; 

因為織夢已經自動將提交的name獲取,所以這里$yesno可以直接用。這訪問,我們要添加授權用戶選是就可以了。這里要注意的是,如果你選一個三級欄目,必須要將其所有的上級欄目選中,這樣我們在下面的顯示的時候才能正常使用。

3、這樣就可以將欄目的id寫入admin表的typeid了。下面要改的就是后臺核心-網站欄目管理的顯示了。我們要讓其只顯示他授權的欄目。為了不影響以前的賬戶,那么我們可以做一下分流,通過這個yesno字段。欄目管理首先訪問的是catalog_main.php這個文件,我們就在這里做分流,讓以前的不變,新加的訪問新的模板和函數,我是將這個文件整體改為這樣
PHPrequire_once(dirname(__FILE__)."/config.php");
//讀取用戶的新定義類型
global $dsql;
$id = $_SESSION['dede_admin_id'];
$dsql-&gt;SetQuery("select `yesno` from `dedecp_admin` where `id` = $id limit 0,1");
$dsql-&gt;Execute();
$row = $dsql-&gt;GetObject();
if(1==$row-&gt;yesno){
 require_once(DEDEINC."/typeunit.class.admin1.php");
 $userChannel = $cuserLogin-&gt;getUserChannel(); 
 include DedeInclude('templets/catalog_main1.htm');
}else{
 require_once(DEDEINC."/typeunit.class.admin.php");
 $userChannel = $cuserLogin-&gt;getUserChannel();
 include DedeInclude('templets/catalog_main.htm');
}12345678910111213141516 require_once(dirname(__FILE__)."/config.php");//讀取用戶的新定義類型global $dsql;$id = $_SESSION['dede_admin_id'];$dsql-&gt;SetQuery("select `yesno` from `dedecp_admin` where `id` = $id limit 0,1");$dsql-&gt;Execute();$row = $dsql-&gt;GetObject();if(1==$row-&gt;yesno){    require_once(DEDEINC."/typeunit.class.admin1.php");    $userChannel = $cuserLogin-&gt;getUserChannel();    include DedeInclude('templets/catalog_main1.htm');}else{    require_once(DEDEINC."/typeunit.class.admin.php");    $userChannel = $cuserLogin-&gt;getUserChannel();    include DedeInclude('templets/catalog_main.htm');} 

這樣通過yesno字段,讓授權用戶訪問新的catalog_main1.html模板,下面我們就看一下這個模板和這個typeunit.class.admin1.php怎么寫的需要用的文章我都打包好可以有需要和我聯系。只有照著里面說明上傳一下就可以。其實我的改動就是將一些敏感的東西去掉了一下等等。有興趣的可以看一下,改動比較多的是typeunit.class.admin1.php這個文件,從新定義了一下他的讀取規則。

5、然后就是文章添加和編輯的修改,在這里,我都是進行了一下用戶類型的判斷,進而調取不同的操作。以文章添加為例,找到article_add.php。在($dopost!=’save’)的操作中,最后的加上

PHPglobal $dsql;
 $id = $_SESSION['dede_admin_id'];
 $dsql-&gt;SetQuery("select `yesno` from `dedecp_admin` where `id` = $id limit 0,1");
 $dsql-&gt;Execute();
 $row = $dsql-&gt;GetObject();
 if(1==$row-&gt;yesno){
     include DedeInclude("templets/article_add1.htm");
 }else{
  include DedeInclude("templets/article_add.htm"); copyright dedecms 
 }12345678910 global $dsql;    $id = $_SESSION['dede_admin_id'];    $dsql-&gt;SetQuery("select `yesno` from `dedecp_admin` where `id` = $id limit 0,1");    $dsql-&gt;Execute();    $row = $dsql-&gt;GetObject();    if(1==$row-&gt;yesno){        include DedeInclude("templets/article_add1.htm");    }else{        include DedeInclude("templets/article_add.htm");    }

然后在article_add1.htm中只是將$typeOptions = GetOptionList($cid,$cuserLogin->getUserChannel(),$channelid);改為$typeOptions = GetOptionList2($cid,$cuserLogin->getUserChannel(),$channelid);,然后在inc_catalog_options.php新定義了兩個方法,這個大家可以下載看一下。同理編輯也是這樣。到這里基本就完了,我的是織夢5.7的,不知道有沒有版本問題,寫來就是交流一下,其實寫的真的很一般,大家多多交流。
0
首頁
案例
關于
聯系
凯时平台