人人商城店铺装修的链接显隐的逻辑
本文为随手记录,内容排版请忽略!
在人人商城的店铺装修插件中,针对会员中心添加 abonus 也就是区域代理插件的链接时,前端并未显示出来,我们来分析一下原因。
涉及如下文件
ewei_shopv2\core\mobile\member\index.php ewei_shopv2\core\inc\page_mobile.php ewei_shopv2\plugin\diypage\core\model.php
前端会员中心 member\index.php 中的 main() 方法中,有如下代码来判断是否加载店铺装修模板
$this->diypage("member");
这里的 diypage() 方法位于 inc\page_mobile.php 文件中,该方法使用如下代码来读取店铺装修的模板数据
$page = p("diypage")->getPage($diypageid, true);
getPage() 方法位于 diypage\core\model.php,有如下代码段
$page["data"] = base64_decode($page["data"]); if( $mobile ){ $memberpage = ($page["type"] == 3 ? true : false); $this->calculate($page["data"], $page["type"]); $this->verifymobile($page["id"], $page["type"]); }
我们使用如下代码可以写入日志来看看数据
load()->func('logging'); logging_run($page["type"], 'trace', 'diypage2'); logging_run(iserializer($page["data"]), 'trace', 'diypage2');
其中 calculate() 方法也位于 model.php 文件中,该方法将判断页面添加了哪些插件的链接,然后判断该插件是否开启等,据此来判断是否显示该链接!
我们来看下代码
if( strexists($str, "r=abonus") ) { $plugins["abonus"] = false; $plugin_abonus = p("abonus"); if( $plugin_abonus ) { $plugin_abonus_set = $plugin_abonus->getSet(); if( !empty($plugin_abonus_set["open"]) ) { $plugins["abonus"] = true; } if( $pagetype == 3 ) { if( empty($plugin_abonus_set["openmembercenter"]) ) { $plugins["abonus"] = false; } } else { if( $pagetype == 4 && !empty($plugin_abonus_set["closecommissioncenter"]) ) { $plugins["abonus"] = false; } } } }
注释:
$plugin_abonus_set["open"] 判断 abonus 插件是否开启
$plugin_abonus_set["openmembercenter"] 判断 abonus 插件中的一项设置【会员中心区域代理入口】是否开启
上述两项均开启,会员中心页店铺装修时调用该链接,才会显示该链接。
最后标注 $plugins["abonus"] = true; 然后调用了如下代码
$this->plugin = $plugins;
这里的 $this->plugin 在后边要用到
拓展说明
我们二开了一个插件,名称为 yjw_extrabonus ,其中恰好包含了 abonus 这段字符串
如果在会员中心同时添加了 abonus 插件和 yjw_extrabonus 两个插件,
而且 abonus 这个原生插件不符合上述的显示要求,同时基于 judge() 的 strexists() 方法,也会影响 yjw_extrabonus 不显示。。。
思考:
以后二开插件,尽可能不要与原生插件名称有交叉。