花魁直播高品质美女在线视频互动社区 - 花魁直播官方版

 歡迎來(lái)到素材無(wú)憂網(wǎng),按 + 收藏我們
登錄 注冊(cè) 退出 找回密碼

dede獨(dú)立模型中的聯(lián)動(dòng)類(lèi)型字段是如何在文章頁(yè)面中顯示枚舉名的

時(shí)間: 2018-04-27 11:45 閱讀: 作者:素材無(wú)憂網(wǎng)

dede的聯(lián)動(dòng)類(lèi)型是是通過(guò)將字段和系統(tǒng)枚舉表dede_sys_enum相關(guān)聯(lián)的,獨(dú)立模型的表中聯(lián)動(dòng)類(lèi)別字段存儲(chǔ)的是表dede_sys_enum的枚舉值,這是一個(gè)數(shù)值,類(lèi)似于代號(hào)的意思,當(dāng)要顯示獨(dú)立模型的聯(lián)動(dòng)類(lèi)別字段時(shí),首先根據(jù)這個(gè)枚舉值在dede_sys_enum中找出相應(yīng)枚舉名,然后才顯示出來(lái)。在模版文件中我們不需要知道這個(gè)過(guò)程是如何進(jìn)行的,只需按照顯示一般字段的方式就能正確顯示聯(lián)動(dòng)類(lèi)型了。

這篇文章主要討論的就是在dede代碼中是如何顯示聯(lián)動(dòng)類(lèi)型字段的。

不管是在文章頁(yè)面還是列表頁(yè)面都能直接使用[field:codecategory/]這樣的方式來(lái)顯示聯(lián)動(dòng)類(lèi)型,這里就以列表頁(yè)面為例。

顯示獨(dú)立模型的列表是通過(guò)/include/arc.sglistview.class.php來(lái)完成的,在arc.sglistview.class.php的GetArcList方法中如下代碼完成了對(duì)獨(dú)立模型所有字段的特殊處理:


foreach($this->ChannelUnit->ChannelFields as $k=>$arr)
{
if(isset($row[$k]))
{
$row[$k] = $this->ChannelUnit->MakeField($k,$row[$k]);
}
}

沒(méi)有這段代碼獨(dú)立模型的聯(lián)動(dòng)字段就顯示的是亂七八糟的數(shù)字。ChannelUnit的MakeField的在/include/channelunit.class.php中,用于處理某個(gè)字段的值,代碼如下:


/**
* 處理某個(gè)字段的值
*
* @access public
* @param string $fname 字段名稱(chēng)
* @param string $fvalue 字段值
* @param string $addvalue 增加值
* @return string
*/
function MakeField($fname, $fvalue, $addvalue='')
{
//處理各種數(shù)據(jù)類(lèi)型
$ftype = $this->ChannelFields[$fname]['type'];
if($fvalue=='')
{
if($ftype != 'checkbox') $fvalue = $this->ChannelFields[$fname]['default'];
}
if($ftype=='text')
{
$fvalue = HtmlReplace($fvalue);
}
else if($ftype=='textdata')
{
if(!is_file($GLOBALS['cfg_basedir'].$fvalue))
{
return '';
}
$fp = fopen($GLOBALS['cfg_basedir'].$fvalue,'r');
$fvalue = '';
while(!feof($fp))
{
$fvalue .= fgets($fp,1024);
}
fclose($fp);
}
else if($ftype=='addon')
{
$foldvalue = $fvalue;
$tmptext = GetSysTemplets("channel_addon.htm");
$fvalue = str_replace('~link~',$foldvalue,$tmptext);
$fvalue = str_replace('~phpurl~',$GLOBALS['cfg_phpurl'],$fvalue);
}
else if(file_exists(DEDEINC.'/taglib/channel/'.$ftype.'.lib.php'))
{ echo "$fname-";
echo "$fvalue $ftype<br>";
include_once(DEDEINC.'/taglib/channel/'.$ftype.'.lib.php');
$func = 'ch_'.$ftype;
echo "$func";
$fvalue = $func($fvalue,$addvalue,$this,$fname);
}
return $fvalue;
}

其中,上面的不同case值處理不同字段類(lèi)型,聯(lián)動(dòng)類(lèi)型在最后一個(gè)case中,他引入了\include\taglib\channel\stepselect.lib.php文件(因?yàn)槁?lián)動(dòng)類(lèi)型的$ftype值為stepselect),然后最終的代碼進(jìn)入stepselect.lib.php的ch_stepselect方法中。


<?php
if(!defined('DEDEINC')) exit("Request Error!");
function ch_stepselect($fvalue,&$arcTag,&$refObj,$fname='')
{
return GetEnumsValue2($fname,$fvalue);
}
/**
* 獲取二級(jí)枚舉的值
*
* @version $Id: stepselect.lib.php 16:24 2010年7月26日Z(yǔ) tianya $
* @package DedeCMS.Taglib
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
function GetEnumsValue2($egroup,$evalue=0)
{
if( !isset($GLOBALS['em_'.$egroup.'s']) )
{
$cachefile = DEDEDATA.'/enums/'.$egroup.'.php';
if(!file_exists($cachefile))
{
require_once(DEDEINC.'/enums.func.php');
WriteEnumsCache();
}
if(!file_exists($cachefile))
{
return '';
}
else
{
require_once($cachefile);
}
}
if($evalue>=500)
{
if($evalue % 500 == 0)
{
return (isset($GLOBALS['em_'.$egroup.'s'][$evalue]) ? $GLOBALS['em_'.$egroup.'s'][$evalue] : '');
}
else if (preg_match("#([0-9]{1,})\.([0-9]{1,})#", $evalue, $matchs))
{
$esonvalue = $matchs[1];
$etopvalue = $esonvalue - ($esonvalue % 500);
$esecvalue = $evalue;
$GLOBALS['em_'.$egroup.'s'][$etopvalue] = empty($GLOBALS['em_'.$egroup.'s'][$etopvalue])? ''
: $GLOBALS['em_'.$egroup.'s'][$etopvalue];
$GLOBALS['em_'.$egroup.'s'][$esonvalue] = empty($GLOBALS['em_'.$egroup.'s'][$esonvalue])? ''
: $GLOBALS['em_'.$egroup.'s'][$esonvalue];
$GLOBALS['em_'.$egroup.'s'][$esecvalue] = empty($GLOBALS['em_'.$egroup.'s'][$esecvalue])? ''
: $GLOBALS['em_'.$egroup.'s'][$esecvalue];
return $GLOBALS['em_'.$egroup.'s'][$etopvalue].' -- '.$GLOBALS['em_'.$egroup.'s'][$esonvalue].' -- '.$GLOBALS['em_'.$egroup.'s'][$esecvalue];
}
else
{
$elimit = $evalue % 500;
$erevalue = $evalue - $elimit;
$GLOBALS['em_'.$egroup.'s'][$erevalue] = empty($GLOBALS['em_'.$egroup.'s'][$erevalue])? ''
: $GLOBALS['em_'.$egroup.'s'][$erevalue];
$GLOBALS['em_'.$egroup.'s'][$evalue] = empty($GLOBALS['em_'.$egroup.'s'][$evalue])? ''
: $GLOBALS['em_'.$egroup.'s'][$evalue];
return $GLOBALS['em_'.$egroup.'s'][$erevalue].' -- '.$GLOBALS['em_'.$egroup.'s'][$evalue];
}
}
}

其實(shí)我并沒(méi)有去研究ch_stepselect方法以及其調(diào)用的GetEnumsValue2方法,因?yàn)檫@里的關(guān)鍵是arc.sglistview.class.php的GetArcList方法中的那段代碼。

版權(quán)聲明: 本站資源均來(lái)自互聯(lián)網(wǎng)或會(huì)員發(fā)布,如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除!謝謝!

轉(zhuǎn)載請(qǐng)注明: dede獨(dú)立模型中的聯(lián)動(dòng)類(lèi)型字段是如何在文章頁(yè)面中顯示枚舉名的

標(biāo)簽:  
相關(guān)文章
模板推薦