PHPCMS V9 类别调用以及创建独立类别页

在需要调用类别的地方,比如列表页,首先写循环前面写上一句:

<?php $TYPE = getcache('type_content','commons');?>

这句就是把类别缓存加载进来.

然后在循环里写:

<a href="index.php?m=content&c

=type&catid={$catid}&typeid={$r[typeid]}">

{$TYPE[$r[typeid]][name]}</a>

这样就可以调用出来类别了.

不过链接暂时无效.因为还没有做好链接文件.后面会更新这个文件的.

类别链接页面:

新增一个 type.html 文件放到 phpcms\templates\default\content\ 下:

该文件代码如下:

{template "content","header"}

<!--main--><?php $typeid = intval($_GET['typeid']);?>

<div class="main">

<div class="col-left">

<div class="crumbs"><a href="{siteurl($siteid)}">首页</a><span> > </span>

{catpos($catid)} 类别:<font color="red">{$TYPE[$typeid][name]}</font>

 总共有 {$total} 条记录</div>

<ul class="list lh24 f14">

{loop $datas $r}

<li><span class="rt">{date('Y-m-d H:i:s',$r[inputtime])}</span>·

<a href="{$r[url]}" target="_blank"{title_style($r[style])}>{$r[title]}</a></li>

{if $n%5==0}<li class="bk20 hr"></li>{/if}

{/loop}

</ul>

<div id="pages" class="text-c">{$pages}</div>

</div>

<div class="col-auto">

<div class="box">

<h5 class="title-2">频道总排行</h5>

{pc:content action="hits" catid="$catid" num="10" order="views DESC"}

<ul class="content digg">

{loop $data $r}

<li><a href="{$r[url]}" target="_blank">{$r[title]}</a></li>

{/loop}

{

</ul>

{/pc}

</div>



</div>

</div>

{template "content","footer"}

新增一个 type.php 文件到 phpcms\modules\content\下,该文件代码如下:

<?php

defined('IN_PHPCMS') or exit('No permission resources.');

//模型缓存路径

define('CACHE_MODEL_PATH',CACHE_PATH.'caches_model'.DIRECTORY_SEPARATOR.

'caches_data'.DIRECTORY_SEPARATOR);

pc_base::load_app_func('util','content');

class type {

private $db;

function __construct() {

$this->db = pc_base::load_model('content_model');

}

/**

* 按照模型搜索

*/

public function init() {

if(!isset($_GET['catid'])) showmessage(L('missing_part_parameters'));

$catid = intval($_GET['catid']);

$siteids = getcache('category_content','commons');

$siteid = $siteids[$catid];

$this->categorys = getcache('category_content_'.$siteid,'commons');

if(!isset($this->categorys[$catid])) showmessage(L('missing_part_parameters'));

if(isset($_GET['info']['catid']) && $_GET['info']['catid']) {

$catid = intval($_GET['info']['catid']);

} else {

$_GET['info']['catid'] = 0;

}

if(isset($_GET['typeid']) && trim($_GET['typeid']) != '') {

$typeid = intval($_GET['typeid']);

} else {

showmessage(L('illegal_operation'));

}

$TYPE = getcache('type_content','commons');

$modelid = $this->categorys[$catid]['modelid'];

$modelid = intval($modelid);

if(!$modelid) showmessage(L('illegal_parameters'));

$CATEGORYS = $this->categorys;

$siteid = $this->categorys[$catid]['siteid'];

$siteurl = siteurl($siteid);

$this->db->set_model($modelid);

$page = $_GET['page'];

$datas = $infos = array();

$infos = $this->db->listinfo("`typeid` = '$typeid'",'id DESC',$page,20);

$total = $this->db->number;

if($total>0) {

$pages = $this->db->pages;

foreach($infos as $_v) {

if(strpos($_v['url'],'://')===false) $_v['url'] = $siteurl.$_v['url'];

$datas[] = $_v;

}

}

$SEO = seo($siteid, $catid, $TYPE[$typeid]['name'],$TYPE[$typeid]['description'],

$TYPE[$typeid]['name'].'类别');

include template('content','type');

}

}

?>

上面的链接即可生效.

一、在文章内容页显示类别名称和类别链接:

比如:

<span>类别:<?php $TYPE = getcache(‘type_content’,’commons’);?><a href=”{APP_PATH}index.php?m=content&c=type&catid={$catid}&typeid={$r[typeid]}”>{$TYPE[$r[typeid]][name]}</a>&nbsp;&nbsp;发布时间:{$inputtime}&nbsp;&nbsp;来源:{if $copyfrom}{$copyfrom}{else}CMSYOU{/if}&nbsp;&nbsp;点击:</span><span id=”hits”></span>

上面的代码中,{$TYPE[$r[typeid]][name]}就是类别名称,{APP_PATH}index.php?m=content&c=type&catid={$catid}&typeid={$r[typeid]}。

需要注意的是,调用{$TYPE[$r[typeid]][name]}之前,需要先调用$TYPE的缓存:<?php $TYPE = getcache(‘type_content’,’commons’);?>。

当然也可以采用下面这一个方法调用出来类别名称和链接:类型:<a href=”{APP_PATH}index.php?m=content&c=type&catid={$catid}&typeid={$typeid}”>{pc:get sql=”SELECT * FROM cmsyou_type WHERE typeid=$typeid” cache=”3600″ return=”data”}{loop $data $val}{$val[name]}{/loop}{/pc}</a>

这是通过查询类别id而得到的类别名称,注意修改数据库前缀。

二、在文章列表页前面显示类别名称:

根据文章内容页的代码,举一反三,可以调用到列表页中间。具体怎么写呢?留给大家到问答社区中间探讨下!

Ps,参考下面这个代码:<?php$arrtype = explode(‘,’,$usable_type);?>{loop $arrtype $t}<a href=”index.php?m=content&c=type&catid={$catid}&typeid={$t}”>{$TYPE[$t][name]}</a>{/loop}

多尝试,肯定可以调用出来!

以上就是今天本文的全部内容,希望对大家的学习和工作有所帮助,同时希望大家多多关注,谢谢!

PHPCMS V9 内容页新闻心情修改成“赞”

修改步骤:
模块->新闻心情->心情配置,去掉多余的剩一个,改成“赞”
心情模板:/phpcms/templates/default/mood/index.html
<ul>
                {loop $setting $k $v}
                        <li>
                                <label for=”n{$k}”>赞({$data[$v[‘fields’]]})<br/>
                                <i class=”iconfont” id=”n{$k}” name=”n” onclick=”vote({$k})” {if isset($key) && $key==$k} checked{/if}>&#xf013c;</i>
                                </label>
                        </li>
                {/loop}
        </ul>

升级php7.1.*后phpcms V9编辑文章出现segment.class.php | 345错误解决方法

这两天服务器环境升级了php到7.1.*,然后使用phpcms V9添加或编辑文章时都会遇到500错误。查看error_log文件,看到一堆Illegal string offset ‘**’ | phpcms/libs/classes/segment.class.php | 345这样的错误。查看segment.class.php 文件的345行,附近的代码是:

function get_keyword($str,$ilen=-1) {
if($str==”) return ”;
else $this->split_result($str,true,true);
$okstr = $this->result_string;
$ws = explode(‘ ‘,$okstr);
$okstr = $wks = ”;
foreach($ws as $w) {
$w = trim($w);
if(strlen($w)<2) continue; if(!preg_match("/[^0-9:-]/",$w)) continue; if(strlen($w)==2&&ord($w[0])>0x80) continue;
if($wks==””) $wks=array();
if(isset($wks[$w])) $wks[$w]++;
else $wks[$w] = 1; //345行的内容
}
if(is_array($wks)) {
arsort($wks);
if($ilen==-1) {
foreach($wks as $w=>$v) {
if($this->get_rank($w)>500) $okstr .= $w.” “;
}
} else {
foreach($wks as $w=>$v){
if((strlen($okstr)+strlen($w)+1)<$ilen) $okstr .= $w." "; else break; } } }

看来问题出在$wks这个变量上(字符串变量直接当数组使用)。查看前面的代码,$wks的赋值是:$okstr = $wks = ”; ,后来通过搜索得知:PHP7开始,对于数据类型的隐式转换做了调整,String无法隐式转换成Array了。

所以,问题就出在$wks一开始是字符串,后面的代码又直接把他当数组用,再新版PHP中就会出错。所以解决方法应该是在344行前面增加一行:if($wks==””) $wks=array();

经过测试,此方法有效。

phpcms v9 PC标签两种方法实现首页按类别调用新闻列表

PHPCMS v9实现首页按类别调用新闻列表的两种方法,可以自由修改达到如按地区等调用信息列表。

{pc:get et sql=”select * from jc_news where catid=6 and typeid=56 order by id desc” rows=”4″ return=”data”}
{loop $data $r}
<li>·<a href=”{$r[url]}” target=”_blank” title=”{$r[title]}”>{str_cut($r[title],56)}</a></li>
{/loop}
{/pc}

 

{pc:content action=”lists” catid=”6″ moreinfo=”1″ where=”typeid=56″ num=”4″ order=”id DESC”}
{loop $data $r}
<li>·<a href=”{$r[url]}” target=”_blank” title=”{$r[title]}”>{str_cut($r[title],56)}</a></li>
{/loop}
{/pc}

希望能帮助到大家

这样可以在首页有需要的地方按类别调用,做出一个tabmenu。

在phpcms v9中增加每个类别单独网页和调用方法

在需要调用类别的地方,比如列表页,首先写循环前面写上一句:
<?php $TYPE = getcache(‘type_content’,’commons’);?>
这句就是把类别缓存加载进来.
然后在循环里写:
<a href=”index.php?m=content&c=type&catid={$catid}&typeid={$r[typeid]}”>{$TYPE[$r[typeid]][name]}</a>
这样就可以调用出来类别了.
不过链接暂时无效.因为还没有做好链接文件.后面会更新这个文件的.

类别链接页面:
新增一个 type.html 文件放到 phpcms\templates\default\content\ 下:
该文件代码如下:

  • {template “content”,”header”}
  • <!–main–><?php $typeid = intval($_GET[‘typeid’]);?>
  • <div class=”main”>
  • <div class=”col-left”>
  •      <div class=”crumbs”><a href=”{siteurl($siteid)}”>塘下网首页</a><span> > </span>{catpos($catid)} 类别:<font color=”red”>{$TYPE[$typeid][name]}</font> 总共有 {$total} 条记录</div>
  •         <ul class=”list lh24 f14″>
  • {loop $datas $r}
  • <li><span class=”rt”>{date(‘Y-m-d H:i:s’,$r[inputtime])}</span>·<a href=”{$r[url]}” target=”_blank”{title_style($r[style])}>{$r[title]}</a></li>
  • {if $n%5==0}<li class=”bk20 hr”></li>{/if}
  • {/loop}
  •         </ul>
  •         <div id=”pages” class=”text-c”>{$pages}</div>
  •   </div>
  •     <div class=”col-auto”>
  •         <div class=”box”>
  •             <h5 class=”title-2″>频道总排行</h5>
  •              {pc:content action=”hits” catid=”$catid” num=”10″ order=”views DESC”}
  •             <ul class=”content digg”>
  •     {loop $data $r}
  •      <li><a href=”{$r[url]}” target=”_blank”>{$r[title]}</a></li>
  •     {/loop}
  •             </ul>
  •             {/pc}
  •         </div>
  •       
  •     </div>
  • </div>
  • {template “content”,”footer”}

新增一个 type.php 文件到 phpcms\modules\content\下,该文件代码如下:

  • <?php
  • defined(‘IN_PHPCMS’) or exit(‘No permission resources.’);
  • //模型缓存路径
  • define(‘CACHE_MODEL_PATH’,CACHE_PATH.’caches_model’.DIRECTORY_SEPARATOR.’caches_data’.DIRECTORY_SEPARATOR);
  • pc_base::load_app_func(‘util’,’content’);
  • class type {
  • private $db;
  • function __construct() {
  •   $this->db = pc_base::load_model(‘content_model’);
  • }
  • public function init() {
  •   if(!isset($_GET[‘catid’])) showmessage(L(‘missing_part_parameters’));
  •   $catid = intval($_GET[‘catid’]);
  •   $siteids = getcache(‘category_content’,’commons’);
  •   $siteid = $siteids[$catid];
  •   $this->categorys = getcache(‘category_content_’.$siteid,’commons’);
  •   if(!isset($this->categorys[$catid])) showmessage(L(‘missing_part_parameters’));
  •   if(isset($_GET[‘info’][‘catid’]) && $_GET[‘info’][‘catid’]) {
  •    $catid = intval($_GET[‘info’][‘catid’]);
  •   } else {
  •    $_GET[‘info’][‘catid’] = 0;
  •   }
  •   if(isset($_GET[‘typeid’]) && trim($_GET[‘typeid’]) != ”) {
  •    $typeid = intval($_GET[‘typeid’]);
  •   } else {
  •    showmessage(L(‘illegal_operation’));
  •   }
  •   $TYPE = getcache(‘type_content’,’commons’);
  •   $modelid = $this->categorys[$catid][‘modelid’];
  •   $modelid = intval($modelid);
  •   if(!$modelid) showmessage(L(‘illegal_parameters’));
  •   $CATEGORYS = $this->categorys;
  •   $siteid = $this->categorys[$catid][‘siteid’];
  •   $siteurl = siteurl($siteid);
  •   $this->db->set_model($modelid);
  •   $page = $_GET[‘page’];
  •   $datas = $infos = array();
  •   $infos = $this->db->listinfo(“`typeid` = ‘$typeid'”,’id DESC’,$page,20);//读取整个模型下同类别文章
  •   //$infos = $this->db->listinfo(“`typeid` = ‘$typeid’ AND catid = ‘$catid'”,’id DESC’,$page,20);//仅仅读取当前栏目下的同类别文章,如果要启用此模式,请去掉上一行代码并将本行开头的// 两斜杠去掉.
  •   $total = $this->db->number;
  •   if($total>0) {
  •    $pages = $this->db->pages;
  •    foreach($infos as $_v) {
  •     if(strpos($_v[‘url’],’://’)===false) $_v[‘url’] = $siteurl.$_v[‘url’];
  •     $datas[] = $_v;
  •    }
  •   }
  •   $SEO = seo($siteid, $catid, $TYPE[$typeid][‘name’],$TYPE[$typeid][‘description’],$TYPE[$typeid][‘name’].’类别’);
  •   include template(‘content’,’type’);
  • }
  • }
  • ?>

上面的链接即可生效.
需要注意的是:
 $infos = $this->db->listinfo(“`typeid` = ‘$typeid'”,’id DESC’,$page,20);//读取整个模型下同类别文章
 //$infos = $this->db->listinfo(“`typeid` = ‘$typeid’ AND catid = ‘$catid’ “,’id DESC’,$page,20);//仅仅读取当前栏目下的同类别文章,如果要启用此模式,请去掉上一行代码并将本行开头的// 两斜杠去掉.