PHPCMS利用数据源对网站数据调用至其他网站方法

话说,我工作上有个需要,公司论坛上想加个小区域,放一些公司的门户站的最新的新闻等等内容,问怎么解决?

情况: 两个站h.net(PHPCMS V9)是门户站b.net(DISCUZ 7.2)是论坛,当然这两个站都是拥有后台管理权限的!那么b.net有一个区域要放h.net的文章列表,OK,最初我以为是整合两个站,让其关联数据库.其实这个办法是错误的,对于PHPCMS V9这个系统来说,其实有个更好的解决办法,适合初级菜鸟使用,详细操作办法如下:

进入h.net后台,找到 模块 > 模块管理 > 数据源 > 添加数据源调用 弹出一个窗口

数据源未填写
数据源未填写

这些选项大家应该看得懂吧,我简单说明一下,

1.先看数据源调用配置区,调用方式中模型配置其实就是大家常用的PC标签调用方式,而自定义SQL也就是get sql方式调用的,这里建议新手选择模型配置.选择模型下拉菜单,这个就更不用说了,一般我们如果调用栏目内文章列表,则选择内容模块,接下来选择列表,则出现一些关于调用范围的选项和条件,大家根据自己需要添加,其中值得说明的是,调用附表建议勾上.这个跟字段的是否为主键有关,此处不进行详细说明.

2.公共配置区域,名称可以随便写了,只要你自己看得懂,输出方式,这个比较复杂,如果对动态脚本不熟悉的同学,我建议使用js,我今天也已js为例给大家说一下,选中js后,弹出选择模板,这里我分享一下我得模板,

<h3>最新行业动态</h3>
{loop $data $k $v}
    <li>· <a href="{$v[url]}">{$v[title]}</a></li>
{/loop}
数据源填好后
数据源填好后

其实跟普通的文章调用方式写的模板相同,缓存时间一般为0,数量自己决定,最后确定,于是就生成了一段代码.接下来我们将在论坛上放置此js代码.

打开论坛系统安装目录的模板目录,一般在安装根目录下的templates文件夹内的某个模板文件夹,我这里修改的是discuz.htm文件,此段代码我插入到

<!--{else}-->
<div id="ad_text"></div>
<!--{/if}-->

我进行简单修改如下:

<div id="ad_text"></div>
<!--{/if}-->
<style>
.linkBox {
  padding-bottom: 10px;
  height:100px;
  width:98%;
  border: 0px solid #6595D6;
  background-color: #E6F6E6;
  clear: both;
  margin:10px auto;
}
.linkBox ul {
  float:left;
  text-align:left;
  width:32%;
}
.linkBox ul h3 {
  margin-left:10px;
}
</style>
<div class="linkBox">
  <ul>
    <script type="text/javascript" src="http://h.net/index.php?m=dbsource&c=call&a=get&id=1"></script>
  </ul>
  <ul>
    <script type="text/javascript" src="http://h.net/index.php?m=dbsource&c=call&a=get&id=1"></script>
  </ul>
  <ul>
    <script type="text/javascript" src="http://h.net/index.php?m=dbsource&c=call&a=get&id=1"></script>
  </ul>
</div>

我这是样本,所以重复三块.仅供大家参考用.最终效果图

最终效果图
最终效果图

对了忘记说了,我这个调用的代码其实调用了两个地方的- -!所以略有不同..z请谅解

PS:其实这个链接效果上虽然成功了,其实还有个小问题…就是链接地址不正确,我后来才发现,又经过半天时间研究,原来是这么个小问题,详情请见<<PHPCMS数据源功能使用注意事项>>

PHPCMS V9 栏目模版空白无显示解决方案

先看看问题截图:

PHPCMS V9 栏目模版空白无显示解决方案
请选择什么模板?

很明显栏目首页模板:选择处什么都没有,该死的PHPCMS这次坑了我一大把啊.怎么会突然没有了?我还搜遍了全世界,跑论坛上找答案,结果论坛上的没有一个人回答是什么原因.当然提问贴不多,只有三个跟我的情况类似.于是推出结论,这个问题发生概率较小并且要么是奇迹诡异并且复杂的问题,要么是过于简单一般人能够处理的问题,而我最近脑袋卡壳,想不出来……

过了若干小时,突然想到做个测试,我把list_xxx全部移到别的地方,再来看栏目列表页模板,也没有了,说明读取模板正常,而category的模板里,有个是我用系统默认备份功能备份了一遍的,就是所谓的,选中某个文件按住ALT拖放,对的罪魁祸首就是这步操作.本来是想做个备份文件,而这个文件包含了中文字,那么就导致PHPCMS系统无法读出所有的模板,这也太2了啊!!!解决方案很简单,把文件名改成全英文字符的就可以了.

phpcms文章列表循环不同样式制作方法

大家在用PHPCMS系统做网站的时候,有时候在列表循环可能希望用到不同的布局格式,而并不希望在整个列表中做好几个pc标签配合不同的start参数的时候,你可以试试我这个方法.

先来看看效果图:

phpcms文章列表循环不同样式制作方法
phpcms文章列表循环不同样式制作方法

那么我这张图清晰的告诉大家,这个列表分为三个部分,而我将采用两个PC标签完成它(之所以用两个PC标签输出,目的在于温习phpcms嵌套循环内容输出,当然你完全可以通过我的方法用一个PC标签搞定),因为CSS样式已经做好,这里大家只用看程序部分即可,先上代码部分:

<div class="hifi_PubArea">
  <div class="MainTitle">
    <div class="classTitle">
      <div><a href="{APP_PATH}cydiy/">创意DIY&nbsp;</a></div>
    </div>
    <div class="fr Blue_List_A"><a href="{APP_PATH}cydiy/" class="block_more"></a></div>
  </div>
  {pc:content action="lists" catid="40" order="id DESC" num="5" return="data"}
  <ul class="video_MainList">
    {php $num=0}
    {loop $data $r}
    {php $num++}
    {if $num==1}
    <li class="classMain">
    <a href="{$r[url]}"><img src="{$r[thumb]}" /></a>
    <h3><a href="{$r[url]}">{$r[title]}</a></h3>
    <p class="videoDpt">{$r[description]}</p>
    <p>栏目:<span>{$CATEGORYS[$r[catid]][catname]}</span></p>
    {php $keywords = explode(' ',$r['keywords']);}
    <p>书签:<span>{loop $keywords $keyword}<a href="{APP_PATH}{$r['catid']}-{urlencode($keyword)}.html" class="keywords">{$keyword}</a>{/loop}</span></p>
    <p>发布时间:<span>({date('Y-m-d',$r[inputtime])})</span></p>
    <div class="videoPart3">
      {pc:content action="lists" catid="40" order="id DESC" num="4" start="5" return="data"}
      <ul>
        {loop $data $v}
        <li><h4><a href="{$v[url]}">{str_cut($v[title],54,'...')}</a></h4></li>
        {/loop}
      </ul>
      {/pc}
    </div>
    <div class="clear"></div>
    </li>
    {/if}
    {if $num>=2}
    {php $num++}
    <li class="videoPart2">
    <a href="{$r[url]}"><img src="{$r[thumb]}" /></a>
    <h4><a href="{$r[url]}">{$r[title]}</a></h4>
    <p>栏目:<span>{$CATEGORYS[$r[catid]][catname]}</span></p>
    {php $keywords = explode(' ',$r['keywords']);}
    <p>书签:<span>{loop $keywords $keyword}<a href="{APP_PATH}{$r['catid']}-{urlencode($keyword)}.html" class="keywords">{$keyword}</a>{/loop}</span></p>
    </li>
    {/loop}
    {/if}
  </ul>
  {/pc}
</div>

看不懂?好吧,我简单说明一下,其中图片中的Part1Part2其实就是第一个PC标签所循环的内容,而循环出来的5篇文章,其中第一篇和后面四篇是不同的,那么,这里有个判断语句,给$num初始值定义为0,随着循环自增,当$num==1是输出第一个很特殊的结构样式,然后当$num>=2时,则开始输出剩余的4篇文章,Part3则穿插在Part1内,当然我有用了一个PC标签调用文章,这里就要增加一句start=”5″了,当然如果你不想用PC标签,其实可以用Part2同样的方法来做,当然不要忘记在第8行内的num改成9,因为此栏目一共有9篇文章,那么就呈现了一个PC标签循环列表中可以采用三种不同的样式结构了.

其实这段代码理解起来也没有什么难度,基本上是基本语法,希望大家看了之后有所收获能够在其他所需要的地方活学活用.

PHPCMS页面专题汇总列表内调用该专题内文章方法

好吧,由于工作需求,外加自己过分追求完美,晚上研究了一下,PHPCMS专题总列表页内的某个专题含有该专题的几篇文章的方式,其实原理很简单,核心思想是
1.嵌套循环.
2.数据库中存储总列表内某专题的id值等于该专题某文章列表的id值.


昨晚其实最后效果还有点问题,今天上午一上班继续解决,终于弄好了,现在跟大家分享心得.

前文可能这样说大家看不大明白,我先截取两张图片给大家看:

PHPCMS页面专题汇总列表内调用该专题内文章方法

想实现的效果:通俗点讲就是假设你后台有5个专题,而且这5个专题内有若干篇相关文章,你希望这个专题列表页面不单单显示出这5个专题信息,在列表中每个单独的专题区域能够显示该专题下的文章.

实现原理:很显然从逻辑上来讲就是一个嵌套循环,大循环,循环的是有多少个专题,挨个输出,而在每个已经输出的专题中,再次运行一次小循环,来循环当前专题内的所有文章.

准备工作:当然理解了原理,有了思想之后,就好办了,先看看PHPCMS V9专题管理的数据库表.这里有两个表”v9_special“和”v9_special_content“,一看就知道了,前者是管理有多少个专题的,后者是存放这些专题的所有内容的.而两个表如何关联起来,由于我数据库和php学的都不好(大家都知道我之前做网页设计和前端的–!),所以代码也许略有不合理的地方.我之前尝试用系统默认的PC标签”pc:special“来写,但是未能实现,于是只好用我认为最暴力的方式,直接读取数据库的”pc:get sql=’ ‘“,接着观察两个表的字段.他们功能连接的方式是v9_specialidv9_special_contentspecialid.那么再循环过程中将这两个值关联起来就可以了.

实现方法:由于这个站展示在公司网站上了,所以就不写CSS出来了,大家只需要理解了,可以自己想怎么用就怎么用.我的代码是这样写的:

<div class="hifi_PubArea">
  <!--嵌套循环输出专题及专题内文章By小白-->
  {pc:get sql="SELECT * FROM v9_special ORDER BY createtime DESC" num="10" return="data"}
  <ul class="hifi_ListPage_MainList">
    {loop $data $r}
    {php $sid=$r['id']}
    <li>
      <div class="Title">
        <div class="LeftTitle">{if time()-$r['createtime'] <= 24*3600}<img src="{IMG_PATH}hifidiy/hifi010.gif" />{else}{/if}<a href="{$r['url']}">{$r['title']}</a><span>[<a href="{$CATEGORYS[$catid]['url']}">{$catname}</a>]</span></div>
        <div class="RightTitle"> <span class="author">{if $r['username']}{$r['username']}{else}hifidiy{/if}</span> </div>
      </div>
      <div class="Content">
        <div class="DivImg"><a href="{$r['url']}"><img src="{thumb($r['thumb'],165,95)}" alt="{$r['thumb']}" /></a></div>
        <div class="DivContent">{str_cut($r['description'],240)}[<a href="{$r['url']}">查看</a>]
          <div class="subArticle">
            {pc:get sql="SELECT * FROM v9_special_content WHERE specialid = '$sid'  ORDER BY updatetime ASC" num="4" return="data"}
            <ul>
              {loop $data $t}
              <li><a href="{$t['url']}">{$t['title']}</a></li>
              {/loop}
            </ul>
            {/pc}
          </div>
        </div>
      </div>
    </li>
    {/loop}
    <div class="bk"></div>
  </ul>
  <div id="pages">{$pages}</div>
  {/pc}
</div>

关键部位我已经做了高亮,方便大家查看.我顺便简单讲解一下, 第一行高亮表示从v9_special表获取所有字段内容,当然里面有个id字段的所有值也获取了,接下来将这个值赋值给sid,那么在第一个循环内,$sid==id,并继续执行下个循环(第二条高亮部分),从v9_special_content内获取所有字段的内容,当然这里加了个条件因为这个表内包含了不止一个专题的文章,因此我将条件设定为specialid==$sid,这样就不会出现文章调用问题了.至于数量顺序什么的就很简单了,这里不再熬述.

好了,其实写完这篇文章想想,好像很简单的一个自定义功能,但是为什么昨天晚上做了半天效果出不来呢,呵呵,还是编程语言基础不扎实,还得努力啊!

PHPCMS V9安装步骤详细介绍及说明(有效避免乱码产生)

前几天简单的介绍了本地搭建最新的WAMP 2.2d的本地环境办法,详情请看Apache创建本地域名的服务器(WAMP环境),今天倒是来说说搭建环境后在安装PHPCMS V9过程的详细步骤和一些注意事项.

首先搭建好本地环境之后将从官方网站下载PHPCMS V9安装包,将其解压,所有的程序在install_package,将这个目录复制到你WAMP所安装的目录内的www目录里,例如“e:/wamp/www/install_package/”,此时你可以将目录重命名成为你所需要的名字,例如whidy,那么这个phpcms系统的完整文件路径即:“e:/wamp/www/whidy/”,如果想搭配本地域名也可参见本文开头提到的那篇文章,里面有详细的方法.为了方便期间,假设我已经做好了本地的访问域名为w.net,那么尝试在浏览器内输入w.net,发现会报错(那是肯定的,系统不是这么装的==!~).

好的接下来,打开phpmyadmin页面,新建个数据库,名称例如whidy,而后面字符集,根据需求填写,假设是latin1_swedish_ci,点击创建,然后会提示创建完成.

接下来新开一个页面标签,正确的安装方法是输入“w.net/install”回车,好的这是安装界面出现如下步骤(为了节约空间容量我就不发全图了哈哈~):

前面两步直接pass,一般情况下WAMP的配置是没有问题的.第三步,选择全新安装,模块什么的按照默认的就行了.第四步,直接pass,第五步需要注意:

数据库主机:    w.net
数据库账号:    root    (默认情况下用户名)
数据库密码:                 (默认情况下不用填写)
数据库名称:    whidy
数据表前缀:    v9        (其实这个随便了,当然前缀必须有,不要太长.)
数据库字符集:    这里是重点,请选择你创建数据库时所选择字符集,比如此次选择的是latin1.
….(下面默认即可直到邮箱随便填一个)

点下一步,直至安装完成.正常情况下是没有问题的.(其实最后一步的时候会有个小错误,我每次也没看清,不过好像没有什么影响,所以无视它吧.)

那么现在可以通过w.net来访问本地的网站了,感觉不错吧,进入后台的方法也就是“w.net/admin.php”了默认账户密码都是phpcms.


以上是整个安装过程的说明,接下来我要说几个与服务器数据同步的注意事项,其实MYSQL字符集一直让人头疼,我也查过相关资料,据说搞这个的人是瑞典人,所以很多东西就很非主流,经常一个不小心让人出现莫名其妙的错误,例如数据库还原导入失败,数据库内数据呈现乱码等等.我经过多次测试总结如下:

在服务器上通过PHPCMS备份的数据库文件(备份时也要注意字符集的统一),全部在phpcms安装目录内caches文件夹内,通过FPT寻找准确的文件路径是
“你的ftp地址…..\caches\bakup\default”

将其下载下来放在本地的目录里,并进入后台进行还原,整个过程将自动完成.这时重新登录后台(用户密码将会被还原成线上服务器的了.),对整站的缓存更新一下,将站点设置设置成本地的即可.

当然我最近在操作过程中除了总结了以上方法之外,仍然有个问题未能解决,目前还在思索中,那就是在PHPMYADMIN内管理数据库的数据时,发现这个中文字符依然是乱码,我估计还是字符集的问题但是试过了很多办法还是没有弄好…仍在研究探索中.