分类 "PhpCms" 下的文章

修改方法:

第一步、

修改 phpcms\modules\content\classes\content_tag.class.php  在最后面的}上面添加

    public function newcontent($data){
    $num = intval($data['limit']) ? intval($data['limit']) : '20';
    // 设置排序
    switch($data['order']){
    case '1':
    $order = ' `id` ASC ';
    break;
    case '2':
    $order = ' `id` DESC ';
    break;
    case '3':
    $order = ' `inputtime` ASC ';
    break;
    case '4':
    $order = ' `inputtime` DESC ';
    break;
    case '5':
    $order = ' `updatetime` ASC ';
    break;
    case '6':
    $order = ' `updatetime` DESC ';
    break;
    default:
    $order = ' `id` DESC ';
    }
    if($data['catid']){
    $catids = explode(',', $data['catid']);
    foreach($catids as $catid){
    $catid = intval($catid);
    if(empty($catid))continue;
    $this->set_modelid($catid);
    $where = $this->category[$catid]['child'] ? ' `catid` IN ('.$this->category[$catid]['arrchildid'].')' : " `catid` = $catid";
    $datas = $this->db->select($where, '*', $num, $order);
    $data[$catid]['data'] = $datas;
    // 记录本次的文章数
    $data['num'][] = count($datas);
    $model_num++;
    }
    }else{
    $models = getcache('model', 'commons');
    foreach($models as $model){
    $this->db->set_model($model['modelid']);
    $datas = $this->db->select('', '*', $num, $order);
    $data[$model['modelid']]['data'] = $datas;
    // 记录本次的文章数
    $data['num'][] = count($datas);
    $model_num++;
    }
    }
    if($data){
    // 获取每个模型应该截取的条数
    $num = ceil($num/$model_num);
    // 循环条数记录用于找出条数不满足的数量然后进行平均
    $w_num = $w_num_t = '';
    foreach($data['num'] as $num_t){
    if($num_t < $num){
    $w_num += $num-$num_t;
    $w_num_t++;
    }
    }
    // 判断是否有不满足平均数的 如果有那么就增加平均值
    if($w_num_t){
    $num += ceil($w_num/($model_num-$w_num_t));
    }
    $datas = array();
    foreach($data as $r){
    $r_n = '';
    if(is_array($r['data']))
    foreach($r['data'] as $r_t){
    $datas[] = $r_t;
    if(++$r_n == $num)break;
    }
    }
    return $datas;
    }else{
    return false;
    }
    }

 第二步:模板调用 、

其实就和默认的文章列表调用差不多

{pc:content action="newcontent" catid="1" num="24" order="1"}

参数说明:
catid:可有可无  加了就只调用指定栏目的信息  多个栏目请使用英文半角的 ,间隔
order:排序 参数值:1-7  具体的含义在代码里面很容易看明白 不祥述
num:调用数量  不指定默认调用20条

1、修改文章后,会重复在v9_keyword_data插入数据
解决办法:
官方最新下载的版本修复了此BUG,对于之前下载的9.3.2版本
在/phpcms/modules/content/fields/keyword/updata.inc.php中找到:

$keyword_data_db->insert(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid));

修改为:

if (!$keyword_data_db->get_one(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid))) {
        $keyword_data_db->insert(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid));
}

2、删除文章不能同时删除对应关键词的问题
解决办法:
在/phpcms/modules/content/content.php找到:
delete函数里

//删除内容

之前加上如下代码:

//删除关键字
$this->keyword_db = pc_base::load_model('keyword_model');
$this->keyword_data_db = pc_base::load_model('keyword_data_model');
$keyword_temp=$this->keyword_data_db->listinfo(array('contentid'=>$id.'-'.$modelid));
$this->keyword_data_db->delete(array('contentid'=>$id.'-'.$modelid));
foreach($keyword_temp as $one){
        $same_keyword=$this->keyword_data_db->listinfo(array('tagid'=>$one[tagid]));
        if(empty($same_keyword)){
                $this->keyword_db->delete(array('id'=>$one[tagid]));
        }
}

最近在二次开发phpcms v9,根据网站设计图,需要用到热门关键字功能,但通过详细查看 phpcms v9后,并没有发现可以管理热门关键字的相关选项。虽然可以通过pc:get标签查询出搜索次数最多的关键字,但毕竟后台可以管理才是王道。尤其是网站运 营初期,必须定义一些热门的关键字引导用户查阅更多的信息,以提高浏览量。此方法由于是增加文件,并不影响升级,以后程序升级后,此功能还能继续使用。

首先列出使用pc:get标签的方法:

{pc:get sql=”select keyword from v9_search_keyword” orderby=”searchnums desc” num=”5″ }
{loop $data $r}
<a href=”{APP_PATH}index.php?m=search&c=index&a=init&typeid=1&siteid=1&q={$r[keyword]}” >{$r[keyword]}</a>
{/loop}
{/pc}

将上面这段代码复制到头部的任意位置,即可显示5个关键词并按搜索次数最多的前5个显示。
下面是后台增加关键词管理的操作方法。我将管理菜单放在扩展的栏目下,其它朋友可以根据知道的需求,增加到各自的栏目下,先上图,有图有真相。。

1.关键词管理页面,在扩展栏目下
20131031152739_01

2.增加关键字页面,可以自由增加关键字
20131031152739_02

3.关键字编辑页面,可以把热门的关键字增加搜索次数,以引导用户获取更多信息
20131031152740_03
请按照以下方法增加:
1.增加语言包:
phpcms/languages/zh-cn/admin.lang.php
找到此文件,在此文件最下面增加以下内容:

/*热门搜索关键词*/
$LANG['search_keyword'] = '关键字管理';
$LANG['search_word_add'] = '增加关键字';
$LANG['search_word_pinyin'] = '拼音';
$LANG['search_word_nums'] = '搜索次数';
$LANG['search_word_some'] = '相关分词';
$LANG['search_word_confirm_del'] = '是否删除该关键词';
$LANG['search_word_name'] = '关键字名称';
$LANG['search_word_error_input'] = '请输入完整的数据';

2.由于模型类本来已存在,所以不需要再创建模型类,只需要创建控制器:
在phpcms\modules\admin\下,新建文件名为:search_keyword.php,路径:phpcms\modules\admin\search_keyword.php

<?php
defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_app_class('admin','admin',0);
class search_keyword extends admin {
function __construct() {
$this->db = pc_base::load_model('search_keyword_model');
parent::__construct();
}

function init () {
$page = $_GET['page'] ? intval($_GET['page']) : '1';
//根据搜索数量由大到小排序
$infos = $this->db->listinfo('','searchnums DESC',$page ,'20');
$pages = $this->db->pages;
$big_menu = array('javascript:window.top.art.dialog({id:\'add\',iframe:\'?m=admin&c=search_keyword&a=add\', title:\''.L('search_word_add').'\', width:\'450\', height:\'150\'}, function(){var d = window.top.art.dialog({id:\'add\'}).data.iframe;var form = d.document.getElementById(\'dosubmit\');form.click();return false;}, function(){window.top.art.dialog({id:\'add\'}).close()});void(0);', L('search_word_add'));
include $this->admin_tpl('search_keyword_list');
}

/**
* 关键词添加
*/
function add() {
if(isset($_POST['dosubmit'])){
if(empty($_POST['info']['keyword']) || empty($_POST['info']['pinyin']) || empty($_POST['info']['searchnums'])){
echo L('search_word_error_input');
return false;
}
$this->db->insert($_POST['info']);
showmessage(L('operation_success'),'?m=admin&c=search_keyword&a=add','', 'add');
}else{
$show_validator = $show_scroll = $show_header = true;
include $this->admin_tpl('search_keyword_add');
}
}

/**
* 关键词修改
*/
function edit() {
if(isset($_POST['dosubmit'])){
$keywordid = intval($_GET['keywordid']);
if(empty($_POST['info']['keyword']) || empty($_POST['info']['pinyin']) || empty($_POST['info']['searchnums'])){
echo L('search_word_error_input');
return false;
}
$this->db->update($_POST['info'],array('keywordid'=>$keywordid));
showmessage(L('operation_success'),'?m=admin&c=search_keyword&a=edit','', 'edit');
}else{
$show_validator = $show_scroll = $show_header = true;
$info = $this->db->get_one(array('keywordid'=>$_GET['keywordid']));
if(!$info) showmessage(L('specified_word_not_exist'));
extract($info);
include $this->admin_tpl('search_keyword_edit');
}
}
/**
* 关键词删除
*/
function delete() {
if(is_array($_POST['keywordid'])){
foreach($_POST['keywordid'] as $keywordid_arr) {
$this->db->delete(array('keywordid'=>$keywordid_arr));
}
showmessage(L('operation_success'),'?m=admin&c=search_keyword');
} else {
$keywordid = intval($_GET['keywordid']);
if($keywordid < 1) return false;
$result = $this->db->delete(array('keywordid'=>$keywordid));
if($result){
showmessage(L('operation_success'),'?m=admin&c=search_keyword');
}else {
showmessage(L("operation_failure"),'?m=admin&c=search_keyword');
}
}
}
}
?>

3.在模板里,增加三个模板页面,分别是:
phpcms\modules\admin\templates\search_keyword_add.tpl.php (增加关键词页面)
phpcms\modules\admin\templates\search_keyword_edit.tpl.php (编辑关键词页面)
phpcms\modules\admin\templates\search_keyword_list.tpl.php (编辑关键词列表)

(1).增加关键词页面:search_keyword_add.tpl.php

<?php
defined('IN_ADMIN') or exit('No permission resources.');
include $this->admin_tpl('header');
?>
<script type="text/javascript">
<!--
$(function(){
$.formValidator.initConfig({formid:"myform",autotip:true,onerror:function(msg,obj){window.top.art.dialog({content:msg,lock:true,width:'200',height:'50'}, function(){this.close();$(obj).focus();})}});
})
//-->
</script>
<div class="pad_10">
<table width="100%" cellpadding="2" cellspacing="1" class="table_form">
<form action="?m=admin&c=search_keyword&a=add" method="post" name="myform" id="myform">
<tr>
<th width="25%"><?php echo L('search_word_name');?> :</th>
<td><input type="text" name="info[keyword]" id="word" size="20"></td>
</tr>
<tr>
<th><?php echo L('search_word_pinyin');?> :</th>
<td><input type="text" name="info[pinyin]" value="" id="pinyin"></td>
</tr>
<tr>
<th><?php echo L('search_word_nums');?> :</th>
<td><input type="text" name="info[searchnums]" value="" id="searchnums"></td>
</tr>
<tr>
<th><?php echo L('search_word_some');?> :</th>
<td><input type="text" name="info[data]" value="" id="data"></td>
</tr>
<input type="submit" name="dosubmit" id="dosubmit" class="dialog" value=" <?php echo L('submit')?> ">
</form>
</table>
</div>
</body>
</html>

(2).编辑关键词列表:search_keyword_edit.tpl.php

<?php
defined('IN_ADMIN') or exit('No permission resources.');
include $this->admin_tpl('header');
?>
<script type="text/javascript">
$(function(){
$.formValidator.initConfig({formid:"myform",autotip:true,onerror:function(msg,obj){window.top.art.dialog({content:msg,lock:true,width:'200',height:'50'}, function(){this.close();$(obj).focus();})}});

})
</script>

<div class="pad_10">
<table cellpadding="2" cellspacing="1" class="table_form" width="100%">
<form action="?m=admin&c=search_keyword&a=edit&keywordid=<?php echo $keywordid?>" method="post" name="myform" id="myform">
<tr>
<th width="25%"><?php echo L('search_word_name');?> :</th>
<td><input type="text" name="info[keyword]" size="20" value="<?php echo $keyword?>"></td>
</tr>
<tr>
<th><?php echo L('search_word_pinyin');?> :</th>
<td><input type="text" name="info[pinyin]" value="<?php echo $pinyin?>" ></td>
</tr>
<tr>
<th><?php echo L('search_word_nums');?> :</th>
<td><input type="text" name="info[searchnums]" value="<?php echo $searchnums?>" ></td>
</tr>
<tr>
<th><?php echo L('search_word_some');?> :</th>
<td><input type="text" name="info[data]" value="<?php echo $data?>"></td>
</tr>

<input type="submit" name="dosubmit" id="dosubmit" value=" <?php echo L('submit')?> " class="dialog">
</form>
</table>
</div>
</body>
</html>

(3).编辑关键词列表:search_keyword_list.tpl.php

<?php
defined('IN_ADMIN') or exit('No permission resources.');
$show_dialog = 1;
include $this->admin_tpl('header','admin');
?>
<div class="pad-lr-10">
<form name="myform" id="myform" action="?m=admin&c=search_keyword&a=delete" method="post" onsubmit="checkuid();return false;">
<div class="table-list">
<table width="100%" cellspacing="0">
<thead>
<tr>
<th width="35" align="center"><input type="checkbox" value="" id="check_box" onclick="selectall('keywordid[]');"></th>
<th width="30%"><?php echo L('keyword_name')?></th>
<th ><?php echo L('search_word_pinyin')?></th>
<th ><?php echo L('search_word_nums')?></th>
<th ><?php echo L('search_word_some')?></th>
<th width="120"><?php echo L('operations_manage')?></th>
</tr>
</thead>
<tbody>
<?php
if(is_array($infos)){
foreach($infos as $info){
?>
<tr>
<td align="center">
<input type="checkbox" name="keywordid[]" value="<?php echo $info['keywordid']?>">
</td>
<td width="30%" align="left"><span class="<?php echo $info['style']?>"><?php echo $info['keyword']?></span> </td>
<td align="center"><?php echo $info['pinyin']?></td>
<td align="center"><?php echo $info['searchnums']?></td>
<td align="center"><?php echo $info['data']?></td>
<td align="center"><a href="javascript:edit(<?php echo $info['keywordid']?>, '<?php echo new_addslashes($info['keyword'])?>')"><?php echo L('edit')?></a> | <a href="javascript:confirmurl('?m=admin&c=search_keyword&a=delete&keywordid=<?php echo $info['keywordid']?>', '<?php echo L('search_word_confirm_del')?>')"><?php echo L('delete')?></a> </td>
</tr>
<?php
}
}
?></tbody>
</table>
<div class="btn">
<a href="#" onClick="javascript:$('input[type=checkbox]').attr('checked', true)"><?php echo L('selected_all')?></a>/<a href="#" onClick="javascript:$('input[type=checkbox]').attr('checked', false)"><?php echo L('cancel')?></a>
<input type="submit" name="submit" class="button" value="<?php echo L('remove_all_selected')?>" onClick="return confirm('<?php echo L('badword_confom_del')?>')" />
</div>
<div id="pages"><?php echo $pages?></div>
</div>
</form>
</div>
</body>
</html>
<script type="text/javascript">
function edit(id, name) {
window.top.art.dialog({id:'edit'}).close();
window.top.art.dialog({title:'<?php echo L('edit')?> '+name+' ',id:'edit',iframe:'?m=admin&c=search_keyword&a=edit&keywordid='+id,width:'450',height:'150'}, function(){var d = window.top.art.dialog({id:'edit'}).data.iframe;var form = d.document.getElementById('dosubmit');form.click();return false;}, function(){window.top.art.dialog({id:'edit'}).close()});
}

function checkuid() {
var ids='';
$("input[name='keywordid[]']:checked").each(function(i, n){
ids += $(n).val() + ',';
});
if(ids=='') {
window.top.art.dialog({content:'<?php echo L('badword_pleasechose')?>',lock:true,width:'200',height:'50',time:1.5},function(){});
return false;
} else {
myform.submit();
}
}
</script>

4.增加导航菜单:
请使用phpmyadmin或其它mysql数据库管理软件执行下面此语句。

1.为关键词表增加一个可自动增加的id,keywordid

alter table v9_search_keyword add keywordid int(16) unsigned NOT NULL auto_increment PRIMARY KEY ;

2.以下是插入菜单链接:(以下的SQL语句不知道哪里出问题了,就是导入不进去,没有办法,我是后台手动添加的,见图片!)

INSERT INTO v9_menu VALUES (null, ‘search_keyword’, ’977′, ‘admin’, ‘search_keyword’, ‘init’, ”, ’13′, ’1′);
INSERT INTO v9_menu VALUES (null, ‘add_search_keyword’, ’1571′, ‘admin’, ‘search_keyword’, ‘add’, ”, ’0′, ’0′);
INSERT INTO v9_menu VALUES (null, ‘edit_search_keyword’, ’1571′, ‘admin’, ‘search_keyword’, ‘edit’, ”, ’0′, ’0′);
INSERT INTO v9_menu VALUES (null, ‘del_search_keyword’, ’1571′, ‘admin’, ‘search_keyword’, ‘del’, ”, ’0′, ’0′);

20131031152740_04

20131031152740_05

20131031152740_06

20131031152740_07

通过以上步骤,即可完成后台管理热门管理词。
但现在还有一个问题没有解决,相关分词正常来说是通过程序生成的,因为不是程序生成的话,在搜索页面相关搜索并不会出现数据,我的想法是把输入框禁用,然 后旁边增加一个获取相关分词的按钮,点击按钮,通过程序生成,并把生成的值赋给相关分词的输入框,但由于时间关系,并没有做这一步处理,有兴趣的朋友可以 进行增加。这个功能一定要做的,但不知道有没有时间把文章补完,我尽量把此功能完成后,再把方法告诉大家。以下是我所增加的文件,提供大家进行下载,有不 明白的地方,可以留言进行交流。

以下压缩包以下4个文件:
phpcms\modules\admin\search_keyword.php
phpcms\modules\admin\templates\search_keyword_add.tpl.php
phpcms\modules\admin\templates\search_keyword_edit.tpl.php
phpcms\modules\admin\templates\search_keyword_list.tpl.php
下载地址:
phpcms_keyword_piaoyun.cc

在看完PHPCMS V9静态化HTML生成设置及URL规则优化之后,发现有不少朋友在搜索寻找Phpcms V9在Apache、Nginx、IIS伪静态规则,于是搜集分享在此!

PHPCMS V9 伪静态规则 for Apache:

RewriteEngine on
RewriteBase / //如果安装在子目录需要制定RewriteBase
RewriteRule ^content_([0-9]+)_([0-9]+)_([0-9]+).html index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3
RewriteRule ^announce_([0-9]+).html index.php?m=announce&c=index&a=show&aid=$1
RewriteRule ^link.html index.php?m=link
RewriteRule ^link_type_([0-9,a-z]*).html index.php?m=link&c=index&a=list_type&type_id=$1&siteid=$2
RewriteRule ^rss.html index.php?m=content&c=rss&siteid=$1
RewriteRule ^tag_([0-9,a-z]*)_(.*).html index.php?m=content&c=tag&catid=$1&tag=$2
RewriteRule ^special.html index.php?m=special&c=index&a=special&siteid=$1
RewriteRule ^special_([0-9,a-z]*).html index.php?m=special&c=index&id=$1
RewriteRule ^special_([0-9,a-z]*)_([0-9,a-z]*).html index.php?m=special&c=index&a=type&specialid=$1&typeid=$2

PHPCMS V9在Rewrite伪静态Nginx规则【2014年6月14日更新规则】:

location / {
if (!-f $request_filename){
rewrite (.*) /index.php;
}
rewrite ^/caipu-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3 last;
rewrite ^/content-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3 last;
rewrite ^/list-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=lists&catid=$1&page=$2 last;
rewrite ^/tags/([^\.]*)-([0-9]+).html /index.php?m=content&c=tag&a=lists&tag=$1&page=$3 last;
rewrite ^/comment-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=comment&c=index&a=init&commentid=content_$1-$2-$3 last;
rewrite ^/([^\.]*).html /index.php?m=member&c=index&a=$1 last;
}
<strong>相关热词搜索:</strong>{loop $keywords $keyword}<a href="{APP_PATH}tags/{urlencode($keyword)}-1.html" target="_blank" class="blue">{$keyword}</a>{/loop}

PHPCMS V9伪静态规则 win下IIS完美设置:

新建一个记事本文件,将文件名改为:httpd.ini。再将以下代码粘贴进去:

[ISAPI_Rewrite]

# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteEngine on
RewriteRule ^(.*)content-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/index\.php\?m=content&c=index&a=show&catid=$2&id=$3&page=$4
RewriteRule ^(.*)show-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/index\.php\?m=content&c=index&a=show&catid=$2&id=$3&page=$4
RewriteRule ^(.*)list-([0-9]+)-([0-9]+).html$ $1/index\.php\?m=content&c=index&a=lists&catid=$2&page=$3

PHPCMS V9分类信息列表页在IIS6 伪静态规则:

RewriteRule /list-(d+)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*).html /index.php?m=content&c=index&a=lists&catid=$1&city=$2&agent=$3&bedroom=$4&objecttype=$5&pay_type_int=$6&price=$7&rent_mode=$8&zone=$9&page=$10

找到文件:
\phpcms\modules\link\link.php

修改审核通过的友情链接列表页面的显示数量,找到代码(大概位置:19行):
$infos = $this->db->listinfo($where,$order = 'listorder DESC,linkid DESC',$page, $pages = '9');

修改上面的:
$pages = '9' 其中的数字为你要显示的数量!

修改分类管理列表页面的显示数量,找到代码(大概位置:177行-179行):
//:分类管理
public function list_type() {
$this->db2 = pc_base::load_model('type_model');
$infos = $this->db2->listinfo(array('module'=> ROUTE_M,'siteid'=>$this->get_siteid()),$order = 'listorder DESC',$page, $pages = '10');

修改上面的:
$pages = '10' 其中的数字为你要显示的数量!

找到代码(大概位置:202行):
$types = $this->db2->listinfo(array('module'=> ROUTE_M,'siteid'=>$this->get_siteid()),$order = 'typeid DESC',$page, $pages = '10');

修改上面的:
$pages = '10' 其中的数字为你要显示的数量!

修改未审核列表页面的显示数量,找到代码(大概位置:328行-331行):
//读取未审核列表
$where = array('siteid'=>$this->get_siteid(),'passed'=>0);
$page = isset($_GET['page']) && intval($_GET['page']) ? intval($_GET['page']) : 1;
$infos = $this->db->listinfo($where,'linkid DESC',$page, $pages = '9');

修改上面的:
$pages = '9' 其中的数字为你要显示的数量!

找到文件:\phpcms\modules\special\functions\global.func.php

function content_url 此函数,大概位置23行---56行,找到如下代码:

/**
 * 内容页url
 * @param $contentid 文章ID
 * @param $page 当前页
 * @param $addtime 文章发布时间
 * @param $type 返回路径的格式(.html|.php)
 * @param $site_info 站点信息
 * @param $type 类型 静态地址 $type = 'html', 动态地址 $type='php'
 */
function content_url($contentid = 0, $page = 1, $addtime, $type = 'html', $site_info = '') {
 if (!$contentid) return '';
 $url = array();
 $page = max(intval($page), 1);
 $app_path = substr(APP_PATH, 0, -1);
 switch ($type) {
  case 'html':
   if ($site_info['dirname']) {
    if ($page==1) {
     $url[0] = $site_info['domain'].'special/'.date('Y', $addtime).'/'.date('md', $addtime).'/'.$contentid.'.html';
     $url[1] = pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/'.date('Y', $addtime).'/'.date('md', $addtime).'/'.$contentid.'.html';
    } else {
     $url[0] = $site_info['domain'].'special/'.date('Y', $addtime).'/'.date('md', $addtime).'/'.$contentid.'-'.$page.'.html';
     $url[1] = pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/'.date('Y', $addtime).'/'.date('md', $addtime).'/'.$contentid.'-'.$page.'.html';
    }
   } else {
    if ($page==1) {
     $url[0] = $url[1] = pc_base::load_config('system', 'html_root').'/special/'.date('Y', $addtime).'/'.date('md', $addtime).'/'.$contentid.'.html';
     $url[0] = $app_path.$url[0];
    } else {
     $url[0] = $url[1] = pc_base::load_config('system', 'html_root').'/special/'.date('Y', $addtime).'/'.date('md', $addtime).'/'.$contentid.'-'.$page.'.html';
     $url[0] = $app_path.$url[0];
    }
   }
   break;

按照你的信息修改上面代码中的:

 special/'.date('Y', $addtime).'/'.date('md', $addtime).'/

修改的代码请修改为一致的。不然会出现未知的问题!

PHPCMSV9的专题,在设置生成静态并且网站的静态设置成生成在根目录的时候,专题路径的URL中会多出一个斜杠,如:http://Www.PiaoYun.CC//special/about/ ,我只能说这是PHPCMS V9众多诡异的BUG中的一个。在PC论坛多个会员多次提起,但未见官方修复。今天花了大把的时间,最终找到问题所在并解决。

解决办法:
1、修改 phpcms/modules/special/special.php 文件第43行和92行:

$url = $special['ishtml'] ? APP_PATH.substr(pc_base::load_config('system', 'html_root'), 1).'/special/'.$special['filename'].'/' :

$special['url'] = APP_PATH.substr(pc_base::load_config('system', 'html_root'), 1).'/special/'.$special['filename'].'/';

把其中 /special/ 的前面一个 / 去掉,改成 special/ ,即可。

2、现在再网站后台添加新的专题,会发现新添加的专题URL中不会再有两个斜杠了。
3、而原本已经添加好了并生成了的专题多了斜杠的,通过修改数据库来实现,如用 phpmyadmin 打开 v9_special表,找到每个专题的 URL字段,将其中多了的斜杠去掉即可。或者在后台点击修改专题,再保存url即可更新过来。

方法一:
找到文件:phpcms\libs\classes\form.class.php
找到代码:(大概位置16行)

public static function editor($textareaid = 'content', $toolbar = 'basic', $module = '', $catid = '', $color = '', $allowupload = 0, $allowbrowser = 1,$alowuploadexts = '',$height = 200,$disabled_page = 0, $allowuploadnum = '10')

修改上方代码内的:
$allowuploadnum = '10'
20131030084534_01

修改数字10为你想要的一次上传的图片数量:
$allowuploadnum = '100'
20131030084534_02

方法二:
找到文件:/phpcms/modules/attachment/functions/global.func.php
找到代码:

file_upload_limit:"'.$file_upload_limit.'",

修改为
file_upload_limit: 100,
小结:本人推荐使用方法一修改。虽然方法修改后也能实现。但是在上传附件处的,最多上传 个附件,不显示你实际修改的数量!

在一级栏目列表页调用:

<!--
* 获取子栏目
* @param $parentid 父级id
* @param $type 栏目类型
* @param $self 是否包含本身 0为不包含
* @param $siteid 站点id
-->
<div>
{php $j=1;}
{loop subcat($catid) $v}
{php if($v['type']!=0) continue;}
<a href="{$v[url]}">[{$v[catname]}]</a>
{/loop}
</div>

在二级栏目列表页调用:

<!--
* 获取子栏目
* @param $parentid 父级id
* @param $type 栏目类型
* @param $self 是否包含本身 0为不包含
* @param $siteid 站点id
-->
<div>
{php $j=1;}
{loop subcat($parentid) $v}
{php if($v['type']!=0) continue;}
<a href="{$v[url]}">[{$v[catname]}]</a>
{/loop}
</div>

找到文件:phpcms\modules\attachment\templates\swfupload.tpl.php

找到代码:大概位置31行,删除下面的代码!

<input type="checkbox" id="watermark_enable" value="1" <?php if(isset($watermark_enable) &&$watermark_enable == 1) echo 'checked'?> onclick="change_params()"> <?php echo L('watermark_enable')?>

接着找到108行---114行的代码:

function change_params(){
if($('#watermark_enable').attr('checked')) {
swfu.addPostParam('watermark_enable', '1');
} else {
swfu.removePostParam('watermark_enable');
}
}

删除代码!

如果以后升级的话,有此文件,请在自行测试,按照此方法是否可行!

{pc:get sql="select * from v9_news where status=99 order by id DESC" num="8" moreinfo="1"} 这个是调用全站,审核通过的
{pc:content action="lists" catid="6" order="listorder DESC" num="8" moreinfo="1"} 这个是调用栏目ID为:6的新闻
{loop $data $key $r}
栏目名和链接[<a href="{$CATEGORYS[$r[catid]][url]}">{$CATEGORYS[$r[catid]][catname]}</a>]
标题名和链接<a href="{$r[url]}" target="_blank">{str_cut($r[title], 38)}</a>
时间日期[{date('y年m月d日',$r[riqi])}]
{/loop}
{/pc}

moreinfo="1" 是允许调用副表的意思,,我们新建的模型,有些字段都保存在副表里边,,不加这个,我们建的字段就调不出来,嘿嘿。。
{date('y年m月d日',$r[riqi])} 显示出来是11年01月01日的格式
换成大写的Y
{date('Y年m月d日',$r[riqi])} 显示出来是2011年01月01日的格式

BUG原因:
V9在判断权限的时候只判断admin_role_priv表中所记录的权限。也就是我们在设置角色的时候所进行的“权限设置”,而不考虑我们所设置的“栏目权限”。由admin:check_priv() 在可以看出,该方法没有对栏目权限作任何考虑。所以当我们使用非超管登录时,修改栏目或删除栏目就会提示“您没有权限操作该项”。

解决办法:
1、找到/phpcms/modules/admin/classes/admin.class.php
2、查找:

$r =$privdb->get_one
(array('m'=>ROUTE_M,'c'=>ROUTE_C,'a'=>$action,'roleid'=>$_SESSION['roleid'],'siteid'=>$siteid));

大概在:169行。
然后在该句下面加上:

/**====phpcmsV9非超级管理员修改栏目权限错误 Add======*/
if(ROUTE_C == 'category'){
$du_catid = $_GET['catid'] ? $_GET['catid'] : $_POST['catid'];
//获取角色当前权限设置
pc_base::load_app_class('role_cat', '', 0);
$priv = role_cat::get_roleid($_SESSION['roleid'], $siteid);
if($priv[$du_catid][$action]) $r = true;

}
/**====phpcmsV9非超级管理员修改栏目权限错误 End======*/

问题即可得到解决!

<a {title_style($r[style])} href="{$r[url]}" title="{$r[title]}">{str_cut($r[title],22,'')}</a>

在a标签中使用{title_style($r[style])} 时,后台标题已设置过颜色信息的clear无法清除

在文件 /statics/js/colorpicker.js
找到末尾代码:

function clear_title() {
$('#title').css('color','');
$('#title_colorpanel').html(' ');

}

修改为:

function clear_title() {
$('#title').css('color','');
$('#title_colorpanel').html(' ');
$('#style_color').val(' ');
}

最后,更新系统全站缓存!

找到文件:

phpcms/libs/classes/update.class.php 文件,修改第50行的代码(大概位置):

function notice() {
return $this->url('notice');
}

修改为:

function notice() {
}

保存后,上传文件覆盖就可以了。
证明:此修改方法在版本V9.1.8 Release 20111014 还在有用的

在内容模板里加上{$username},编辑内容或添加内容时生成的页面中没有$username字段值,批量生成时有。

1.phpcms\modules\content\templates\content_add.tpl.php
找到代码:

<form name="myform" id="myform" action="?m=content&c=content&a=add" method="post" enctype="multipart/form-data">

以下的代码添加在上面这段代码的后面,添加的位置,大概在90-93行之间;

添加在下面的代码上面,方便阅读:

<input type="hidden" name="info[username]" value="<?php echo $admin_username?>" />

添加后变成:

<input type="hidden" name="info[username]" value="<?php echo $admin_username?>" />
<div class="button"><input value="<?php echo L('save_close');?>" type="submit" name="dosubmit" class="cu" style="width:145px;" onclick="refersh_window()"></div>

2.phpcms\modules\content\templates\content_edit.tpl.php
找到代码:

<form name="myform" id="myform" action="?m=content&c=content&a=edit" method="post" enctype="multipart/form-data">

以下的代码添加在上面这段代码的后面,添加的位置,大概在90-93行之间;

添加在下面的代码上面,方便阅读:

<input value="<?php echo $data['username']?>" type="hidden" name="info[username]" />

添加后变成这样:

<input value="<?php echo $data['username']?>" type="hidden" name="info[username]" />
<input value="<?php if($r['upgrade']) echo $r['url'];?>" type="hidden" name="upgrade">

最近一直在弄网站的投稿系统,用的是phpcms的程序呢,发现IE7登陆总是提示回话已过期,经查询搜索,在官方找到解决的办法,解决办法如下:

出现问题:
1、登陆后提示 会话已过期。
2、登陆成功进入会员中心时提示会话已过期。

解决方案:
1、修改文件 根目录\phpcms\modules\member\index.php
第17行

$this->http_user_agent = str_replace('7.0' ,'8.0',$_SERVER['HTTP_USER_AGENT']);

修改为:

$this->http_user_agent = $_SERVER['HTTP_USER_AGENT'];

2、修改文件 根目录\phpcms\modules\member\classes\foreground.class.php

第29行

$auth_key = md5(pc_base::load_config('system', 'auth_key').str_replace('7.0' ,'8.0',$_SERVER['HTTP_USER_AGENT']));

修改为:

$auth_key = md5(pc_base::load_config('system', 'auth_key').$_SERVER['HTTP_USER_AGENT']);

问题原因:

不知道官方哪次的更新把 .$_SERVER['HTTP_USER_AGENT'] 改成了 str_replace('7.0' ,'8.0',$_SERVER['HTTP_USER_AGENT'])
所以会出现上面的正状,正常使用没有什么问题,但是整合UC并开启同步登陆后问题出现。
问题推断:str_replace('7.0' ,'8.0',$_SERVER['HTTP_USER_AGENT'])是取当前浏览器版本做一个IE 7.0 8.0 的替换。

例如,IE7内核360浏览器演示

$_SERVER['HTTP_USER_AGENT'] --------取得
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QQDownload 677; .NET CLR 2.0.50727; AskTbCFTP2V5/5.11.3.15590)

str_replace('7.0' ,'8.0',$_SERVER['HTTP_USER_AGENT']) -------------------取得
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; QQDownload 677; .NET CLR 2.0.50727; AskTbCFTP2V5/5.11.3.15590)

至于为什么这样用就不得而知了

md5(pc_base::load_config('system', 'auth_key').$_SERVER['HTTP_USER_AGENT'])

又把这个东西做了一次加密,放到了COOKIE里。做浏览器的兼容吗?费解。

至于为什么整合后出问题呢,推断问题可能出在PHPSSO那边,是不是那边也有这个$_SERVER['HTTP_USER_AGENT'],没有换过来,结果7.0还是7.0,没做替换导致IE7下先后加密的和会员中心的就不一样了,导致过期问题?额,只是猜测,期待官方给出答案。不过如果官方不能

解决过期问题,下次更新时还是换回来吧。否则原来的目的没有达到,反而增加了新问题。