phpcms网站建设中,联动菜单怎样读取?联动菜单菜单调用方法
在phpcms中,联动菜单的管理位置位于“后台-扩展-联动菜单”,支持自定义添加。因为问题中没有具体说明在哪里调用,那我就从使用于开发的几个角度来讲联动菜单的调用:
一、我们常用的是在自定义数据模型字段中:
创建的联动菜单项将应用于后台内容(文章)添加界面。在“后台-内容-数据模型-字段管理-添加字段”中,字段类型设置为“联动菜单”,然后在“菜单id”选项处通过联动菜单列表选择你要使用的菜单,例如地区联动菜单,并可设定联动菜单的返回值的方式。然后在内容添加编辑界面可出现此联动菜单项了。
当然,菜单显示样式(下拉式、弹窗式)可在“后台-扩展-联动菜单-修改”中配置。
二、在phpcms模板中直接调用联动菜单:
此方法不常用。具体方法是来到“后台-扩展-联动菜单列表”,你会看到每一个联动菜单都有一个调用代码,将此代码复制粘贴到你想放的模板位置即可。
但根据经验,这还不够,因为虽然通过此代码把联动菜单掉出来了,但是因为缺乏此菜单显示时的css、js文件导致缺乏样式与效果从而显示不正常,所以需要保证你的模板里同时引入了一下几个文件:
statics/js/dialogjs
statics/js/linkage/js/popjs
statics/css/dialogcss
三、在php文件中或者在模板中使用万能标签直接读取联动菜单数据表中的数据:
此方法往往在我们进行二次开发中使用。联动菜单数据存放在v9_linkage数据表中,可根据字段parentid等字段指定获取不同层级数据。
因为开发相关会涉及到phpcms的相关类方法或函数相对来说比较复杂,这里就不详细讲解了,具体可参考官方开发手册以及iphpcms的视频教程,这里给出演示代码以作了解:
php程序中调用代码演示:
1
2
$linkage_db = pc_base::load_model("linkage_model"); //引入模型
$data = $linkage_db->select(array('parentid'=>0)); //读取指定条件的数据
模板中万能标签写法演示:
1
2
3
4
5
{pc:get sql="select from phpcms_linkage where parentid=0 and keyid=1" num="99"}
{loop $data $v}
<li>省份:{$v[name]}</li>
{/loop}
{/pc}
本方法中获取的是原始的数据表数据,没有签名方法中的相关html代码css样式等修饰,自己根据需求进行相应处理渲染即可。
PS: 1 以上方法前两个偏向于系统应用,后者偏向于开发,希望对你有所帮助吧。如果仍有疑惑可以追问。2考虑的你说的“联动菜单”有指“导航条联动下拉效果”的嫌疑,这里附注一段调用演示代码:
1
2
3
4
5
6
7
8
9
10
11
12
{pc:content action="category" catid="0" num="25" siteid="$siteid" order="listorder ASC"}
<li><div><a href="{siteurl($siteid)}/"><span>网站首页</span></a></div></li>
{loop $data $k $v}
<li><div>
<a href="{$v[url]}"><span>{$v[catname]}</span></a>
<ul class="sub_mune_ul" style="display: none; ">
{pc:content action="category" catid="$k" num="10" siteid="$siteid" order="listorder ASC"}
{loop $data $r} <li><a href="{$r[url]}">{$r[catname]}</a></li> {/loop}
{/pc}
</ul></div></li>
{/loop}
{/pc}
1、二级栏目的调用方法
{php $data = subcat($module, $catid);}
{loop $data $n $r}
{if $r[ismenu]}
{$r[catname]}
{get sql="select catname,url from phpcms_category where parentid='$r[catid]'" return="v"}
{$v[catname]}
{/get}
{/if}
{/if}
{/loop}
2、导航如何实现一级栏目后跟特定的二级栏目
{pc:content action="category" catid="0" num="25" siteid="$siteid" order="listorder ASC"}
<ul class="nav-site">
<li><a href="{siteurl($siteid)}"><span>首页</span></a></li>
{loop $data $r}
<li class="line">|</li>
<li><a href="{$r[url]}"><span>{$r[catname]}</span></a></li>
{pc:content action="category" catid="2" num="3" siteid="$siteid" order="listorder ASC"}
{loop $data $r}
<li><a href="{$r[url]}">{$r[catname]}</a><span> | </span></li>
{/loop}
{/pc}
{/loop}
</ul>
{/pc}
{pc:content action="category" catid="2" num="3" siteid="$siteid" order="listorder ASC"}
根据父栏目id,如上面的21,22,23,24,25都是 15下面的子栏目,可以这样写:
{loop subcat(15) $k $v}
{php $subcatid[] = $k;}
{/loop}
{php $subcatid = implode(',', $subcatid);}
{pc:get sql="SELECT from v9_news where status=99 and catid in ($subcatid) order by id DESC" num="7" return="data" }
{loop $data $r}
<li><span><strong><a href="{$CATEGORYS[$r[catid]][url]}">[{$CATEGORYS[$r[catid]][catname]}]</a><a href="{$r[url]}" title="{$r[title]}" target="_blank">{str_cut($r['title'],40)}</a></strong><em>[{date('Y-m-d',$r[inputtime])}]</em></span></li>
{/loop}
{/pc}
好处:只要写一个父栏目id,自动取下级子栏目id
缺点:循环父栏目下所有的子栏目id,如果某个子栏目的内容不想显示的话,不好实现
更多问题到后盾网论坛问题求助专区http://bbshoudunwangcom/
phpcms里面有两个全局常量包含主域名信息你可以使用。
第一个是 APP_PATH,代表当前网站主目录地址,如果你安装的时候不是用的二级目录,那么里面包含的就是主域名,注意里面包含的域名开头有http://和结尾有/。
第二个是 SITE_URL,也是包含当前网站域名,等价于$_SERVER['HTTP_HOST']。所以这个里面没有http://和结尾的/符号。
根据自己的需求选择用哪个吧。
有没有这样一种需求,当我们使用PHPCMS建立多级站点时,每个大的分类下面又有许多小的分类,如果想要调用第一大分类下面和第二大分类下面的文章同时出来的时候,该怎么调用呢。如果只是第一大分类和第二大分类,下面没有包含小的分类的时候,哪么调用就很简单了,我们直接使用GET就可以调用出来了,使用 PHP 的 SQL 中 in 功能。如下代码:
123456 {pc:get sql="SELECT FROM v9_news WHERE catid in(1,3,5) ORDE R BY id DESC" num="10"} {loop $data $v} <li><a href="{$v[url]}">{$v[title]}</a></li> {/loop} {/pc}
上面调用了1,3,5分类的文章,这个是比较容易理解的,如果遇到上面提到的问题,大的分类下面又存在小的分类,那么利用上面的方法就没有办法调出子分类的内容了,所以我们要做的是如果直接分类那么直接显示分类ID,如果有小的分类,那么就显示所有的子分类ID,最后再把他们用逗号连接起来,同样可以实现相同的效果,看下面的代码:
1234567891011121314 <php $assigncatid=array(23,24,19); $str =array(); foreach($assigncatid as $row){ $str[]=$CATEGORYS[$row][arrchildid]; } $finalcatid= implode(',', $str); > {pc:get sql="SELECT FROM v9_news WHERE catid in($finalcatid) ORD ER BY id DESC" num="14"} {loop $data $v} <li><a href="{$v[url]}">{$v[title]}</a></li> {/loop} {/pc}
这里先了 3 个分类的ID,其中,23,24没有子分类,而19有许多子分类,$CATEGORYS[$row][arrchildid] 这一句很重要,如果没有子分类则直接显示该分类的ID,如果有子分类,就会以1,2,3,4,5这种格式将所有的子分类都显示出来,数组中有3个值,所以foreach后会形成3个数组,分别是大类23,24,以及19,43,44,其中,43,44均为19大类下面的子分类ID。
把这循环的三组数组赋给一个新的数组,然后在循环外用逗号切割成字符串,拼起来就是所有大类与子类了,如23,24,19,43,44这样,做到这里就实现了刚开始提出的问题。
另外一种方法调用代码如下:
1234 {loop subcat(15) $k $v} {php $subcatid[] = $k;} {/loop} {php $subcatid = implode(',', $subcatid);}
然后在读取SQL的条件中这样写 WHERE catid in($finalcatid)
其实phpcms开源程序是很多中小站长都常用的一种cms程序,对于在首页上面直接调用单页内容,官方并没有相应的调用标签,以下的标签是直接从数据库中直接调用。
一:首页单页调用内容:
{pc:get sql="SELECT FROM v9_page where catid=你需要调用的单页栏目id"}{loop $data $val}
{str_cut(strip_tags($val[content]),860,"")}
{/loop}
{/pc}
以上这串代码就是可以在首页上面直接调用处理,既然首页都能调用,那么栏目页和内容也是可以调用的,
二:栏目页单页调用代码:
{pc:get sql="SELECT FROM v9_page where catid=所要调用的catid号"}{loop $data $key $val}
{$val[content]}
{/loop}
{/pc}
0条评论