人人商城店铺装修的链接显隐的逻辑

本文为随手记录,内容排版请忽略!

人人商城店铺装修插件中,针对会员中心添加 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 不显示。。。

思考:

以后二开插件,尽可能不要与原生插件名称有交叉。