phpcms 二次开发 (1)
充培
2023-12-01
下载 安装
进入后台 -- 生成首页 更新缓存
进入前台 -- http://127.0.0.1/phpcms/index.php
进入后台 -- 配置网站
更新模板--设置首页
将css、images、js 文件导入到phpcms/static/下面
找到首页模块module、控制器content、视图view
phpcms/modules/content/index.php
找到 init() 尝试打印一下
$default_style = $sitelist[$siteid]['default_style'];
可以知道当前的模板路径
phpcms/templates/default/content 下面 重命名 之前的 index.html 并将我们的index.php 导入页面
开始页面分离
$SEO 是phpcms 的全局变量
加载模板:
{template "content","header"}
{template "content","footer"}
修改css路径 修改js路径 修改图片img 路径
{CSS_PATH}
{JS_PATH}
{IMG_PATH}
替换相应的路径标签
------------------------
开始做功能:
先做导航:
{pc:content action="category" catid="0" num="25" siteid="$siteid" order="listorder ASC"}
<ul id="nav">
<li class="nav1"><a href="{siteurl($siteid)}" target="_blank">首页</a></li>
{loop $data $r}
<li><a href="{$r[url]}" target="_blank">{$r[catname]}</a></li>
{/loop}
</ul>
{/pc}
{php echo runhook('glogal_menu')}
进入后台添加导航
---------------
套首页的焦点图:
进入后台----模块---广告---添加版位---我们新添加一个首页轮播图广告位---按照要求添加图片即可
在首页如何调用广告图片呢? 如果模板的效果与phpcms 默认效果相同,复制phpcms的代码即可,通常情况,
二次开发 我们都会按照我们的模板样式来重新设置的。
<script language="javascript" src="{APP_PATH}index.php?m=poster&c=index&a=show_poster&id=11"></script>
先找到 poster 模块下面的index 控制器下面的show_poster方法id 是 id=11 分析phpcms之前的数据处理层
然后,我们测试源码,得知:
$pinfo 是我们需要的幻灯片的数据
include template('poster', $type); 表示 加载模板层的poster目录下面的imagechange.html
当我们得到模板和数据之后,就需要将我们的模板写入到imagechange.html里面.
写模板的时候,我们需要学习一下phpcms的模板语法
1.定义变量: {$name}
2. 条件判断: {if *} * {else} * {else} * {/if} 或者 {if *} * {/if}
3. 循环 {loop $a $b} * {/loop} 或者 {loop $a $b $c} * {/loop} ,{loop $a $b} * {/loop}
{loop $a $b} * {/loop} $a 表示数组 $b表示value值
类似:
foreach($a as $b){
}
{loop $a $k $c} * {/loop} $a 表示数组 $k 表示 key $c 表示value值
类似:
foreach($a as $k=>$c){
}
在模板中调试数据
<?php
echo '<pre>';
print_r($data);
echo '</pre>';
?>
---------------------------
综合学习之后:我们可以得到广告幻灯片代码
var str=' <ul class="pic" id="pic">';
{loop $pinfo $k $p}
{if $k == 1}
str+='<li style="z-index:1;"><a href="{$p['setting']['1']['linkurl']}"><img src="{$p['setting']['1']['imageurl']}"/></a></li>';
{else}
str+='<li><a href="{$p['setting']['1']['linkurl']}"><img src="{$p['setting']['1']['imageurl']}"/></a></li>';
{/if}
{/loop}
str+='</ul><ul class="num" id="num">';
{loop $pinfo $p}
{$i++}
{if $i == 1}
str+='<li class="active"><span></span></li>';
{else}
str+='<li><span></span></li>';
{/if}
{/loop}
str+='</ul>';
document.write(str);
解释一下上面的代码:
$pinfo 通过我们的测试,发现该变量就是图片轮播广告图的所有信息的数据数组。
打印该数组,去拿到我们所需要的数据显示在页面
套首页的搜索
<form action="{APP_PATH}index.php" method="get" target="_blank">
<input type="hidden" name="m" value="search"/>
<input type="hidden" name="c" value="index"/>
<input type="hidden" name="a" value="init"/>
<input type="hidden" name="typeid" value="{$typeid}" id="typeid"/>
<input type="hidden" name="siteid" value="{$siteid}" id="siteid"/>
<input type="text" name="q" placeholder="请输入关键字" class="text"/>
<button class="btn"></button>
</form>
套首页的文章内容:
常用的全局数组: $CATEGORYS
$CATEGORYS 是一个二维数组,主要是用来保存当前频道或者模块以及栏目的基本配置信息
$categorys 是系统默认自动加载的,可以在任何模块或者频道重点任何php文件、模板文件中使用
常用的有:
$CATEGORYS[$catid][catid] 当前页面所在的栏目的id
$CATEGORYS[$catid][module] 当前栏目所在的模块名
$CATEGORYS[$catid][type] 栏目的类型
$CATEGORYS[$catid][modelid] 栏目所属的模型的id
$CATEGORYS[$catid][catname] 栏目的名称
$CATEGORYS[$catid][image] 栏目所对应的图片
$CATEGORYS[$catid][catdir] 栏目的路径
$CATEGORYS[$catid][url] 栏目所对应的url
$CATEGORYS[$catid][parentid] 栏目所对应的父级id
$CATEGORYS[$catid][arrparentid] 栏目所对应的所有上级栏目id
$CATEGORYS[$catid][parentdir] 栏目所对应的父级的路径
$CATEGORYS[$catid][child] 是否有下级栏目
$CATEGORYS[$catid][arrchildid] 栏目的所有下级栏目的id
$CATEGORYS[$catid][items] 栏目信息数
$CATEGORYS[$catid][ismenu] 栏目是否显示在导航
$CATEGORYS[$catid][hits] 栏目的点击数
比如这样一个url
http://127.0.0.1/phpcms/index.php?m=content&c=index&a=lists&catid=10
那么 $CATEGORYS[10][catid]
在比如: http://127.0.0.1/phpcms/index.php?m=content&c=index&a=lists&catid=13
{$CATEGORYS[13][catname]} 得到名称
{$CATEGORYS[13][url]} 得到url
下面我们来理解phpcms的pc标签应用:
PC标签做为数据的获取的一种方式
基本语法规则: PC标签必须以{pc}开头,并以{/pc}结尾的代码片段
{pc:}冒号之后跟随的为模块名
{pc:模块名 参数名="参数值" 参数名="参数值" 参数名="参数值" return=data} 默认返回的是 $data 当然这里可以改
那么首页我们需要的是推荐位: 在后台去设置推荐位:
后台---内容相关设置-----推荐位管理---- 你可以依据你的项目需求重新设置一个推荐,也可以使用phpcms 之前的
推荐位置。
比如我们点击首页头条推荐: 需要注意的是 首页头条推荐的 id 号 posId
在选择栏目的时候 需要注意栏目id catID
这两个id都是我们需要的
{pc:content action="position" catid="13" posid="2" thumb="1" num="1" }
{loop $data $key $value}
<p> {$value['description']} <a href="{$CATEGORYS[13][url]}">更多详情</a> </p>
<img src="{$value['thumb']}" />
{/loop}
{/pc}
这个地方可以用php 的代码直接输出 <?php ?>
我们这里解释一下上面的代码
action="position" 表示推荐位
catid="13" 表示当前文章所在栏目的id
posid="2" 表示推荐位的id
thumb="1" 表示是否需要缩略图
num="1" 表示显示多少条
下面我们来套 相关产品的搜索,产品推荐的图片也是我们的推荐的一部分。所以我们在后台管理面板中的内容
---- 推荐位管理---新增推荐位----有5种产品,那么我们就新增5种推荐位,我们在后台操作完成后,那么问题也来了。
在前台如何循环查询呢? 这里有两种方法,第一种:模仿pc内容标签 在 /modules/content/classes/content_tag.class.php
可以参考phpcms的标签仿照写代码
第二种: 在模板层直接查询sql 然后使用 loop 循环 phpcms万能标签get调用sql
phpcms 万能标签 get 语法规则
{pc:get sql="" num="" return="data"}
在这里可以循环
{/pc}
当我们了解到这些之后,那么我们就需要去找到表然后写sql 语句了。 通过数据库我们发现推荐表示 v9_position
那么我们需要分析一下 需要去哪些数据呢?
推荐位id posid 栏目id catid 缩略图地址 thumb
因此;我们的查询语句是: select posid,catid,thumb from v9_position where posid in (19,20,21,22)
<ul>
<!-- 在这里循环推荐位的图片 -->
{pc:get sql="select posid,catid,thumb from v9_position where posid in (19,20,21,22)" num="5" return="data"}
{loop $data $key $listpic}
{/pc}
<li><img src="{$listpic['thumb']}"/></li>
{/loop}
</ul>
那么下面我们来套企业新闻列表
我们现在来添加新闻: 添加新闻后 ---- 推荐位显示---- 这里我们可以设置某条新闻显示在哪个推荐位下面。
也就是说: 同一个推荐位可以有多个新闻
好, 咱们进入后台,内容管理---添加新闻-- 选择推荐位
那么我们来在前端循环,需要找到 catid 点击管理栏目---查看新闻中心的id
点击推荐位管理---查看 首页文章推荐位 的id
标签:
{pc:content action="position" catid="10" posid="28" thumb="1" num="3" return="wordlist" }
{loop $wordlist $key $word}
{/loop}
{/pc}
通过调试,我们去寻找我们所需要的数据 title description thumb inputtime,通过数据分析发现
iputtime 是一个时间戳 所以需要格式化成我们所需要的模板显示格式
<!-- 在这里查询 文章列表 -->
{pc:content action="position" catid="10" posid="28" thumb="1" num="3" return="wordlist" }
{php $i=0 } /* 定义php 的变量*/
<ul class="wz" id="wz">
{loop $wordlist $key $word}
{php $i++}
{if $i == 1} /*如 $i==1 表示第一次循环*/
<li class="wl"><span><b>{date('d',$word['inputtime'])}</b><br /><br />{date('Y-m',$word['inputtime'])}</span>
<p>{$word['title']}</p>
<br/>{str_cut($word['description'],120,'........')} /*截取函数 以及使用 php 函数*/
</li>
{else}
<li><span><b>{date('d',$word['inputtime'])}</b><br /><br />{date('Y-m',$word['inputtime'])}</span>
<p>{$word['title']}</p>
<br/>{str_cut($word['description'],120,'........')}
</li>
{/if}
{/loop}
</ul>
{/pc}