您的位置:首页 > 其它

dede5.7定义文件名“{pinyin} 拼音+文章ID”如何去掉文章ID,只显示拼音?

2014-05-17 14:19 344 查看
首先在后台网站栏目管理,高级管理更改一号游戏{typedir}/{y}/{m}/{aid}.html为{typedir}/{pinyin}.html.

然后修改include文件夹下的/helpers/channelunit.func.php文件里的代码.代码如下:

//获得文件相对于主站点根目录的物理文件名(动态网址返回url)

function GetFileName($aid,$typeid,$timetag,$title,$ismake=0,$rank=0,$namerule='',$typedir='',$money=0,$filename='')

{

global $cfg_rewrite, $cfg_cmspath, $cfg_arcdir, $cfg_special, $cfg_arc_dirname;

//没指定栏目时用固定规则(专题)1号游戏

if(empty($namerule)) {

   $namerule = $cfg_special.'/arc-{aid}.html';

   $typeid = -1;

}

if($rank!=0 || $ismake==-1 || $typeid==0 || $money>0)

{

   //动态文章

   if($cfg_rewrite == 'Y')

   {

    return $GLOBALS["cfg_plus_dir"]."/view-".$aid.'-1.html';

   }

   else

   {

    return $GLOBALS['cfg_phpurl']."/view.php?aid=$aid";

   }

}

else

{

   $articleDir = MfTypedir($typedir);

   $articleRule = strtolower($namerule);

   if($articleRule=='')

   {

    $articleRule = strtolower($GLOBALS['cfg_df_namerule']);

   }

   if($typedir=='')

   {

    $articleDir = $GLOBALS['cfg_cmspath'].$GLOBALS['cfg_arcdir'];

   }

   $dtime = GetDateMk($timetag);

   list($y,$m,$d) = explode('-',$dtime);

   $arr_rpsource = array('{typedir}','{y}','{m}','{d}','{timestamp}','{aid}','{cc}');

   $arr_rpvalues = array($articleDir,$y, $m, $d, $timetag, $aid, dd2char($m.$d.$aid.$y));

   if($filename != '')

   {

    $articleRule = dirname($articleRule).'/'.$filename.$GLOBALS['cfg_df_ext'];

   }

   $articleRule = str_replace($arr_rpsource,$arr_rpvalues,$articleRule);

   if(ereg('{p',$articleRule))

   {

    $articleRule = str_replace('{pinyin}',GetPinyin($title).'_'.$aid,$articleRule);

    $articleRule = str_replace('{py}',GetPinyin($title,1).'_'.$aid,$articleRule);

   }

   $articleUrl = '/'.ereg_replace('^/','',$articleRule);

   if(ereg("index.html", $articleUrl) && $cfg_arc_dirname=='Y')

   {

    $articleUrl = str_replace('index.html', '', $articleUrl);

   }

   return $articleUrl;

}

}

我们看到默认的是$articleRule = str_replace('{pinyin}',GetPinyin($title).'_'.$aid,$articleRule);

现在只需要<把".'_'.$aid>去掉即可.

最后修改include/inc文件夹下的inc_fun_funAdmin.php文件里的代码.代码如下:

function SpGetPinyin($str,$ishead=0,$isclose=1)

{

global $pinyins;

$restr = '';

$str = trim($str);

$slen = strlen($str);

if($slen<2)

{

   return $str;

}

if(count($pinyins)==0)

{

   $fp = fopen(DEDEINC.'/data/pinyin.dat','r');

   while(!feof($fp))

   {

    $line = trim(fgets($fp));

    $pinyins[$line[0].$line[1]] = substr($line,3,strlen($line)-3);

   }

   fclose($fp);

}

for($i=0;$i<$slen;$i++)

{

   if(ord($str[$i])>0x80)

   {

    $c = $str[$i].$str[$i+1];

    $i++;

    if(isset($pinyins[$c]))

    {

     if($ishead==0)

     {

      $restr .= $pinyins[$c];

     }

     else

     {

      $restr .= $pinyins[$c][0];

     }

    }else

    {

     $restr .= "_";

    }

   }else if( eregi("[a-z0-9]",$str[$i]) )

   {

    $restr .= $str[$i];

   }

   else

   {

    $restr .= "_";

   }

}

if($isclose==0)

{

   unset($pinyins);

}

return $restr;

}

修改$restr .= "_";  为$restr .= "-"; 即可.

第二种:::

dedecms 生成文章以拼音命名的方法.

使用过织梦的朋友可能会知道,在织梦添加栏目时,会自动生成栏目名称的拼音,可是这样的话,文件路径会很长,看起来不很不方便,也不方便搜索引擎的抓取.

栏目名可以自己随便写,也可以默认拼音,如果默认拼音那生成的是全部汉字的全拼,像“公司简介”,生成后是“gongsijianjie”,如果我们的栏目是5个汉字、6个汉字那生成后的栏目名称其不是很长,那能不能直接生成为"gsjj"呢?答案是可以的。

  现在我教大家怎么修改文件只让它生成汉字的首写字母。

  1.找到include/inc/inc_fun_funadmin.php这个文件。

  2.找到其中的23行,23行内容为:

  $pinyins[$line[0].$line[1]] = substr($line,3,strlen($line)-3);

  修改为:

  $pinyins[$line[0].$line[1]] = substr($line,3,1);

  就OK了。

  3.自己测试吧。

dedecms文章内容页面生成拼音url的方法

DEDECMS也支持把文章的URL转化成拼音或者英文

去掉“/拼音_id.html”形式下的ID方法

打开include/channelunit.func.php文件找到如下代码:

$articleRule = str_replace(‘{py}’,GetPinyin($title,1).’_’.$aid,$articleRule);

修改成如下:

$articleRule = str_replace(‘{py}’,GetPinyin($title,1),$articleRule);

再生成看看就能看到效果了

如果是英文字的话生成页面把“_”改成“-”的修改

打开include/inc/inc_fun_funAdmin.php文件,找到如下代码

for($i=0;$i<$slen;$i++)

{

  if(ord($str[$i])>0×80)

  {

   $c = $str[$i].$str[$i+1];

   $i++;

   if(isset($pinyins[$c]))

   {

    if($ishead==0)

    {

     $restr .= $pinyins[$c];

    }

    else

    {

     $restr .= $pinyins[$c][0];

    }

   }else

   {

    $restr .= “_”;

   }

  }else if( eregi(“[a-z0-9]“,$str[$i]) )

  {

   $restr .= $str[$i];

  }

  else

  {

   $restr .= “_”;

  }

}

修改里面的红色的字体后面的“_”,改成“-”就OK了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: