public function pluginDeactivate($system) { ThemeHelper::setSystemThemeDirName(ThemeHelper::SYSTEM_MOBILE_THEME, null); // 删除在 Manage 系统中的设置 ManageThemePlugin::removeSystemUrlBase(PluginHelper::SYSTEM_MOBILE); return true; }
public function doUpdate($currentVersion) { // 更新数据库表 $sqlFileContent = <<<SQL -- 创建 cron 任务列表 CREATE TABLE IF NOT EXISTS `bzf_cron_task` ( `task_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `user_name` varchar(32) DEFAULT NULL COMMENT '哪个用户添加的', `task_name` varchar(16) DEFAULT NULL COMMENT '任务名称', `task_desc` varchar(128) DEFAULT NULL COMMENT '任务描述', `task_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '任务设定时间', `task_run_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '任务实际运行时间', `task_class` varchar(128) NOT NULL COMMENT '任务的PHP Class', `task_param` text DEFAULT NULL, `search_param` varchar(64) DEFAULT NULL COMMENT '用于任务搜索', `return_code` int DEFAULT 0 COMMENT '任务设定时间', `return_message` varchar(128) DEFAULT NULL COMMENT '任务返回消息', PRIMARY KEY (`task_id`) ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; ALTER TABLE `bzf_cron_task` ADD INDEX ( `task_name` ) ; ALTER TABLE `bzf_cron_task` ADD INDEX ( `task_time` ) ; ALTER TABLE `bzf_cron_task` ADD INDEX ( `task_run_time` ) ; ALTER TABLE `bzf_cron_task` ADD INDEX ( `search_param` ) ; ALTER TABLE `bzf_cron_task` ADD INDEX ( `return_code` ) ; -- 记录管理员的行为 CREATE TABLE IF NOT EXISTS `bzf_admin_log` ( `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` mediumint(8) unsigned NOT NULL , `user_name` varchar(60) DEFAULT NULL , `operate` varchar(16) DEFAULT NULL COMMENT '操作名称', `operate_desc` varchar(128) DEFAULT NULL COMMENT '操作描述', `operate_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '操作时间', `operate_data` text DEFAULT NULL COMMENT '操作的数据记录', PRIMARY KEY (`log_id`) ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; ALTER TABLE `bzf_admin_log` ADD INDEX ( `user_id` ) ; ALTER TABLE `bzf_admin_log` ADD INDEX ( `operate` ) ; ALTER TABLE `bzf_admin_log` ADD INDEX ( `operate_time` ) ; -- 修改价格表,增加价格说明 ALTER TABLE `bzf_goods` ADD `shop_price_notice` VARCHAR( 32 ) NULL DEFAULT NULL COMMENT '价格说明' AFTER `shop_price`; ALTER TABLE `bzf_goods` ADD `type_id` SMALLINT( 5 ) NOT NULL DEFAULT '0' COMMENT '商品类型' AFTER `cat_id`; -- 修改 brand 表 ALTER TABLE `bzf_brand` CHANGE `sort_order` `sort_order` TINYINT( 3 ) UNSIGNED NOT NULL DEFAULT '0'; ALTER TABLE `bzf_brand` CHANGE `brand_logo` `brand_logo` VARCHAR( 128 ) NULL DEFAULT NULL ; ALTER TABLE `bzf_brand` CHANGE `brand_desc` `brand_desc` VARCHAR( 255 ) NULL DEFAULT NULL ; ALTER TABLE `bzf_brand` ADD `is_custom` int NULL DEFAULT 0 COMMENT '是否自定义页面'; ALTER TABLE `bzf_brand` ADD `custom_page` TEXT NULL DEFAULT NULL COMMENT '品牌自定义页面'; -- 增加 goods_attr 表记录商品的属性值 CREATE TABLE IF NOT EXISTS `bzf_goods_attr` ( `goods_attr_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `goods_id` int(10) unsigned NOT NULL DEFAULT '0', `attr_item_id` int(10) unsigned NOT NULL DEFAULT '0', `attr_item_value` varchar(128) NULL, PRIMARY KEY (`goods_attr_id`), KEY `goods_id` (`goods_id`), KEY `attr_item_id` (`attr_item_id`), KEY `attr_item_value` (`attr_item_value`) ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; SQL; $dbEngine = DataMapper::getDbEngine(); // 解析 sql 文件,导入数据 $sqlFileContent = SqlHelper::removeComment($sqlFileContent); $sqlArray = SqlHelper::splitToSqlArray($sqlFileContent, ';'); unset($sqlFileContent); foreach ($sqlArray as $sqlQuery) { $queryObject = $dbEngine->prepare($sqlQuery); $queryObject->execute(); unset($sqlQuery); unset($queryObject); } unset($sqlArray); // 权限管理 $metaPrivilegeService = new MetaPrivilegeService(); // 删除不用的权限 $metaPrivilegeService->removePrivilegeItem('manage_goods_attrgroup_listattrgroup'); $metaPrivilegeService->removePrivilegeItem('manage_goods_attrgroup_create'); $metaPrivilegeService->removePrivilegeItem('manage_goods_attrgroup_edit'); // 添加执行权限 $privilegeGroup = $metaPrivilegeService->loadPrivilegeGroup('manage_misc'); $metaPrivilegeService->savePrivilegeItem($privilegeGroup['meta_id'], 'manage_misc_cron', '定时任务', '管理系统的定时任务'); $privilegeGroup = $metaPrivilegeService->loadPrivilegeGroup('manage_account'); $metaPrivilegeService->savePrivilegeItem($privilegeGroup['meta_id'], 'manage_account_admin_listlog', '管理员日志', '查看管理员的操作日志'); $privilegeGroup = $metaPrivilegeService->loadPrivilegeGroup('manage_goods'); $metaPrivilegeService->savePrivilegeItem($privilegeGroup['meta_id'], 'manage_goods_brand_listbrand', '商品品牌', '管理商品品牌'); $metaPrivilegeService->savePrivilegeItem($privilegeGroup['meta_id'], 'manage_goods_type_listtype', '商品类型', '管理商品类型'); // 把版本设置为 1.0.1 ManageThemePlugin::saveOptionValue('version', $this->targetVersion); return true; }
/** * 取得系统的可显示名字 * */ function smarty_helper_modifier_system_display_name($system) { if (empty($system)) { return ''; } $system_url_base_array = json_decode(\Theme\Manage\ManageThemePlugin::getOptionValue('system_url_base_array'), true); if (!empty($system_url_base_array)) { if (!array_key_exists($system, $system_url_base_array)) { // 不存在的系统,跳过 return ''; } return $system_url_base_array[$system]['name']; } }
<?php // 加载 ManageThemePlugin 插件加载文件,用于初始化插件同时返回一个插件的 instance 对象 use Theme\Manage\ManageThemePlugin; ManageThemePlugin::instance()->setPluginDirAbsolutePath(dirname(__FILE__)); return ManageThemePlugin::instance();
public function doUpdate($currentVersion) { // 简单的把版本设置为 1.0.0 就算完成升级了 ManageThemePlugin::saveOptionValue('version', $this->targetVersion); return true; }
$f3->set('ONERROR', function ($f3) { /** * Information about the last HTTP error that occurred. * ERROR.code is the HTTP status code. * ERROR.title contains a brief description of the error. * ERROR.text provides greater detail. For HTTP 500 errors, use ERROR.trace to retrieve the stack trace. */ $code = $f3->get('ERROR.code'); RouteHelper::reRoute(null, '/'); }); } // ---------------------------------------- 4. 加载显示主题 -------------------------------------- // 为 Manage 设置网站的 WebRootBase,这样在 Manage 中就可以对相应网站做操作 $systemUrlBase = ManageThemePlugin::getSystemUrlBase(PluginHelper::SYSTEM_MOBILE); if (empty($systemUrlBase) || $systemUrlBase['base'] != $f3->get('sysConfig[webroot_url_prefix]')) { ManageThemePlugin::saveSystemUrlBase(PluginHelper::SYSTEM_MOBILE, '移动', '棒主妇移动端网站', $f3->get('sysConfig[webroot_url_prefix]')); } $themeIntance = ThemeHelper::loadSystemTheme(ThemeHelper::SYSTEM_MOBILE_THEME); if (!$themeIntance) { die('没有正确设置 ' . ThemeHelper::SYSTEM_MOBILE_THEME . ' 主题'); } // 调用主题自己的初始化方法 $themeLoadRet = $themeIntance->pluginLoad(PluginHelper::SYSTEM_MOBILE); if (true !== $themeLoadRet) { die(ThemeHelper::SYSTEM_MOBILE_THEME . ' 主题无法初始化:' . $themeLoadRet); } // 调用主题的 action $themeActionRet = $themeIntance->pluginAction(PluginHelper::SYSTEM_MOBILE); if (true !== $themeActionRet) { die(ThemeHelper::SYSTEM_MOBILE_THEME . ' 主题无法加载:' . $themeActionRet); }
public function get($f3) { // 权限检查 $this->requirePrivilege('manage_goods_search'); global $smarty; // 参数验证 $validator = new Validator($f3->get('GET')); $pageNo = $validator->digits()->min(0)->validate('pageNo'); $pageSize = $validator->digits()->min(0)->validate('pageSize'); // 设置缺省值 $pageNo = isset($pageNo) && $pageNo > 0 ? $pageNo : 0; $pageSize = isset($pageSize) && $pageSize > 0 ? $pageSize : 10; // 搜索参数数组 $searchFormQuery = array(); $searchFormQuery['g.is_on_sale'] = $validator->digits()->min(0)->filter('ValidatorIntValue')->validate('is_on_sale'); $searchFormQuery['g.goods_id'] = $validator->digits()->min(1)->filter('ValidatorIntValue')->validate('goods_id'); $searchFormQuery['g.suppliers_id'] = $validator->digits()->min(1)->filter('ValidatorIntValue')->validate('suppliers_id'); $searchFormQuery['g.goods_name'] = $validator->validate('goods_name'); $searchFormQuery['g.cat_id'] = $validator->digits()->min(1)->filter('ValidatorIntValue')->validate('cat_id'); $searchFormQuery['g.type_id'] = $validator->digits()->min(1)->filter('ValidatorIntValue')->validate('type_id'); $searchFormQuery['g.brand_id'] = $validator->digits()->min(1)->filter('ValidatorIntValue')->validate('brand_id'); $searchFormQuery['g.goods_sn'] = $validator->validate('goods_sn'); $searchFormQuery['g.warehouse'] = $validator->validate('warehouse'); $searchFormQuery['g.shelf'] = $validator->validate('shelf'); $searchFormQuery['g.admin_user_id'] = $validator->digits()->min(1)->filter('ValidatorIntValue')->validate('admin_user_id'); $systemTag = $validator->validate('system_tag'); if (!empty($systemTag)) { $searchFormQuery['g.system_tag_list'] = Utils::makeTagString(array($systemTag)); } if (!$this->validate($validator)) { goto out_display; } // 查询条件 $searchParamArray = array(); // 根据推广渠道做搜索 $goods_promote = $validator->validate('goods_promote'); if (!empty($goods_promote)) { switch ($goods_promote) { case '360tequan': $searchParamArray[] = array('gp.360tequan_price > 0'); break; case '360tegong': $searchParamArray[] = array('gp.360tegong_enable = 1'); break; default: // do nothing break; } } // 建立查询条件 $searchParamArray = array_merge($searchParamArray, QueryBuilder::buildSearchParamArray($searchFormQuery)); // 查询商品列表 $totalCount = SearchHelper::count(SearchHelper::Module_GoodsGoodsPromote, $searchParamArray); if ($totalCount <= 0) { // 没商品,可以直接退出了 goto out_display; } // 页数超过最大值,返回第一页 if ($pageNo * $pageSize >= $totalCount) { RouteHelper::reRoute($this, '/Goods/Search'); } // 商品列表 $goodsArray = SearchHelper::search(SearchHelper::Module_GoodsGoodsPromote, 'g.goods_id, g.system_tag_list, g.cat_id, g.admin_user_name, g.goods_name, g.goods_number' . ', g.goods_spec, g.is_on_sale, g.type_id' . ', g.market_price, g.shop_price, g.shipping_fee, g.shipping_free_number' . ', g.suppliers_id, g.suppliers_price, g.suppliers_shipping_fee, g.warehouse, g.shelf', $searchParamArray, array(array('g.goods_id', 'desc')), $pageNo * $pageSize, $pageSize); // 取得供货商 id 列表,商品分类 id $supplierIdArray = array(); $categoryIdArray = array(); $typeIdArray = array(); foreach ($goodsArray as $goodsItem) { $supplierIdArray[] = $goodsItem['suppliers_id']; $categoryIdArray[] = $goodsItem['cat_id']; $typeIdArray[] = $goodsItem['type_id']; } $supplierIdArray = array_unique($supplierIdArray); $categoryIdArray = array_unique($categoryIdArray); //取得供货商信息 $userSupplierService = new UserSupplierService(); $supplierArray = $userSupplierService->fetchSupplierArrayBySupplierIdArray($supplierIdArray); // 建立 suppliers_id --> supplier 的反查表,方便快速查询 $supplierIdToSupplierArray = array(); foreach ($supplierArray as $supplier) { $supplierIdToSupplierArray[$supplier['suppliers_id']] = $supplier; } $system_url_base_array = json_decode(ManageThemePlugin::getOptionValue('system_url_base_array'), true); // 放入供货商信息 foreach ($goodsArray as &$goodsItem) { if (isset($supplierIdToSupplierArray[$goodsItem['suppliers_id']])) { // 很老的订单,用户可能被删除了 $goodsItem['suppliers_name'] = $supplierIdToSupplierArray[$goodsItem['suppliers_id']]['suppliers_name']; } // 解析 system_tag_list,放入 system_array 的信息 $systeArray = Utils::parseTagString($goodsItem['system_tag_list']); $goodsItem['system_array'] = array(); foreach ($systeArray as $systemItem) { $goodsItem['system_array'][] = @$system_url_base_array[$systemItem]['name']; } // 商品规格 if (!empty($goodsItem['goods_spec'])) { $goodsSpecService = new GoodsSpecService(); $goodsSpecService->initWithJson($goodsItem['goods_spec']); $goodsItem['goods_spec'] = $goodsSpecService->getGoodsSpecDataArray(); } } unset($goodsItem); // 取得分类信息 $categoryBasicService = new CategoryBasicService(); $categoryArray = $categoryBasicService->fetchCategoryArrayByIdArray($categoryIdArray); // 建立 cat_id ---> cateogry 信息的反查表 $categoryIdToCategoryArray = array(); foreach ($categoryArray as $categoryItem) { $categoryIdToCategoryArray[$categoryItem['meta_id']] = $categoryItem; } // 放入分类信息 foreach ($goodsArray as &$goodsItem) { if (isset($categoryIdToCategoryArray[$goodsItem['cat_id']])) { // 很老的商品,分类信息可能已经不存在了 $goodsItem['cat_name'] = $categoryIdToCategoryArray[$goodsItem['cat_id']]['meta_name']; } } unset($goodsItem); // 取得商品类型信息 $goodsTypeService = new GoodsTypeService(); $goodsTypeArray = $goodsTypeService->fetchGoodsTypeArrayByTypeIdArray($typeIdArray); // 建立 type_id ---> type 信息的反查表 $typeIdToTypeArray = array(); foreach ($goodsTypeArray as $goodsType) { $typeIdToTypeArray[$goodsType['meta_id']] = $goodsType; } // 放入类型信息 foreach ($goodsArray as &$goodsItem) { if (isset($typeIdToTypeArray[$goodsItem['type_id']])) { $goodsItem['type_name'] = $typeIdToTypeArray[$goodsItem['type_id']]['meta_name']; } } unset($goodsItem); // 给模板赋值 $smarty->assign('totalCount', $totalCount); $smarty->assign('pageNo', $pageNo); $smarty->assign('pageSize', $pageSize); $smarty->assign('goodsArray', $goodsArray); $smarty->assign('system_url_base_array', json_decode(ManageThemePlugin::getOptionValue('system_url_base_array'), true)); out_display: $smarty->display('goods_search.tpl'); }
/** * 生成不同系统的 URL,比如生成 Shop, Groupon, Mobile 系统的 URL * 在 Manage 或者 Supplier 中很有用 * * @param string $system * @param string $controller * @param array $paramArray * @param bool $static * * @return string * @throws \InvalidArgumentException */ public static function makeShopSystemUrl($system, $controller, array $paramArray = null, $static = null) { if (empty($system)) { throw new \InvalidArgumentException('system can not be empty'); } $systemUrlBase = ManageThemePlugin::getSystemUrlBase($system); global $f3; if (empty($systemUrlBase) || !isset($systemUrlBase['base'])) { if ($f3->get('DEBUG')) { throw new \InvalidArgumentException('system [' . $system . '] is invalid'); } return ''; } if (null === $static) { $static = $f3->get('sysConfig[enable_static_url][' . $system . ']'); if (empty($static)) { $static = false; } } return self::makeUrlWithSiteBase($systemUrlBase['base'], $controller, $paramArray, false, false, $static); }
* ERROR.title contains a brief description of the error. * ERROR.text provides greater detail. For HTTP 500 errors, use ERROR.trace to retrieve the stack trace. */ $code = $f3->get('ERROR.code'); if (404 == intval($code)) { RouteHelper::reRoute(null, '/Error/E404?url=' . urlencode(RouteHelper::getFullURL())); } else { RouteHelper::reRoute(null, '/'); } }); } // ---------------------------------------- 4. 加载显示主题 ----------------------------------- // 为 Manage 设置网站的 WebRootBase,这样在 Manage 中就可以对相应网站做操作 $systemUrlBase = ManageThemePlugin::getSystemUrlBase(PluginHelper::SYSTEM_SHOP); if (empty($systemUrlBase) || $systemUrlBase['base'] != $f3->get('sysConfig[webroot_url_prefix]')) { ManageThemePlugin::saveSystemUrlBase(PluginHelper::SYSTEM_SHOP, '商城', '棒主妇商城', $f3->get('sysConfig[webroot_url_prefix]')); } $themeIntance = ThemeHelper::loadSystemTheme(ThemeHelper::SYSTEM_SHOP_THEME); if (!$themeIntance) { die('没有正确设置 ' . ThemeHelper::SYSTEM_SHOP_THEME . ' 主题'); } // 调用主题自己的初始化方法 $themeLoadRet = $themeIntance->pluginLoad(PluginHelper::SYSTEM_SHOP); if (true !== $themeLoadRet) { die(ThemeHelper::SYSTEM_SHOP_THEME . ' 主题无法初始化:' . $themeLoadRet); } // 调用主题的 action $themeActionRet = $themeIntance->pluginAction(PluginHelper::SYSTEM_SHOP); if (true !== $themeActionRet) { die(ThemeHelper::SYSTEM_SHOP_THEME . ' 主题无法加载:' . $themeActionRet); }
public function get($f3) { global $smarty; // 参数验证 $validator = new Validator($f3->get('GET')); $pageNo = $validator->digits()->min(0)->validate('pageNo'); $pageSize = $validator->digits()->min(0)->validate('pageSize'); // 设置缺省值 $pageNo = isset($pageNo) && $pageNo > 0 ? $pageNo : 0; $pageSize = isset($pageSize) && $pageSize > 0 ? $pageSize : 10; // 查询条件 $searchFormQuery = array(); $searchFormQuery['g.is_on_sale'] = $validator->digits()->min(0)->filter('ValidatorIntValue')->validate('is_on_sale'); $searchFormQuery['g.goods_id'] = $validator->digits()->min(1)->filter('ValidatorIntValue')->validate('goods_id'); $searchFormQuery['g.goods_name'] = $validator->validate('goods_name'); $searchFormQuery['g.goods_sn'] = $validator->validate('goods_sn'); $searchFormQuery['g.warehouse'] = $validator->validate('warehouse'); $searchFormQuery['g.shelf'] = $validator->validate('shelf'); if (!$this->validate($validator)) { goto out_display; } // 构造查询条件 $authSupplierUser = AuthHelper::getAuthUser(); $searchFormQuery['g.suppliers_id'] = intval($authSupplierUser['suppliers_id']); // 建立查询条件 $searchParamArray = QueryBuilder::buildSearchParamArray($searchFormQuery); // 查询商品列表 $totalCount = SearchHelper::count(SearchHelper::Module_Goods, $searchParamArray); if ($totalCount <= 0) { // 没商品,可以直接退出了 goto out_display; } // 页数超过最大值,返回第一页 if ($pageNo * $pageSize >= $totalCount) { RouteHelper::reRoute($this, '/Goods/Search'); } // 商品列表 $goodsArray = SearchHelper::search(SearchHelper::Module_Goods, $this->searchFieldSelector, $searchParamArray, array(array('g.goods_id', 'desc')), $pageNo * $pageSize, $pageSize); $system_url_base_array = json_decode(ManageThemePlugin::getOptionValue('system_url_base_array'), true); foreach ($goodsArray as &$goodsItem) { // 解析 system_tag_list,放入 system_array 的信息 $systeArray = Utils::parseTagString($goodsItem['system_tag_list']); $goodsItem['system_array'] = array(); foreach ($systeArray as $systemItem) { $goodsItem['system_array'][] = @$system_url_base_array[$systemItem]['name']; } // 商品规格 if (!empty($goodsItem['goods_spec'])) { $goodsSpecService = new GoodsSpecService(); $goodsSpecService->initWithJson($goodsItem['goods_spec']); $goodsItem['goods_spec'] = $goodsSpecService->getGoodsSpecDataArray(); } } unset($goodsItem); // 给模板赋值 $smarty->assign('totalCount', $totalCount); $smarty->assign('pageNo', $pageNo); $smarty->assign('pageSize', $pageSize); $smarty->assign('goodsArray', $goodsArray); out_display: $smarty->display('goods_search.tpl'); }