今天magento开发的重点就是分类的权限限制.可能很多人不知道我为什么要这么修改magento的功能.
(用户要我给magento做两个分类,对应不同的网站,一个专卖数码产品一个专卖,所以上传的话为了避免另一个站的分类数据在产品选择分类那显示出来,最好的方法就是对magento二次开发了.)
好了,说开发吧:
产品分类筛选显示模板目录:
/app/esign/adminhtml/default/defalt/template/catalog/product/edit/categories.phtml
因为magento是使用AJAX进行请求的,所以,我们看不到太多的PHP的语句,基本都是JavaScript覆盖了.
在一开始就有个getRootNode(),是magento分类的全部参数.具体数据太多,自行打印可查看
在categories.phtml里进行foreach循环输出.
在JavaScript里有个bildCategoryTree(parent, config)的方法,里面就是循环输出分类
我们可以看到有个变量:var _node = Object.clone(config[i]);
通过for循环组合输出,可以看到里面包含了ID.
好了,有ID了就好办了;
比如作者不希望显示根分类为2的属性,作者修改了下该方法
function bildCategoryTree(parent, config){
if (!config) return null; //is no catagory
if (parent && config && config.length){
for (var i = 0; i < config.length; i++){
//config.length为根目录的数量
config[i].uiProvider = Ext.tree.CheckboxNodeUI;
var node;
var _node = Object.clone(config[i]);
if(_node[‘id’]==2)
{
// break;
}
else
{
if (_node.children && !_node.children.length) {
delete(_node.children);
node = new Ext.tree.AsyncTreeNode(_node);
} else {
node = new Ext.tree.TreeNode(config[i]);
}
parent.appendChild(node);
node.loader = node.getOwnerTree().loader;
if(config[i].children){
bildCategoryTree(node, config[i].children);
}
}
}
}
}
这样如果分类ID如果=2的话,系统就不会进行输出调用了.
因为要对应系统,所以我们需要根据数据库里的来屏蔽非当前站点分类
开发的话,自己写个模型来进行提取站点的根分类
数据库对应的表段为:
core_store //站点信息参数
core_store_group //站点分类参数
至于要如何获取站点的store_id,作者前面的文章已经有说(强制增加站点);
根据store_id来提取分类就可以了.
关于作者