你现在的位置:首页 > PHP网站建设知识库 > Joomla > 正文

Joomla 3 菜单项类型的生成

在添加menu item时 ,点击select, 会弹出 可选择的menu
select 按钮对应的链接是:administrator/index.php?option=com_menus&view=menutypes&tmpl=component&recordId=0
数据流程与其他组件相似,
获取菜单项数据的操作函数是com_menus/models/menutypes.php中的getTypeOptions函数
getTypeOptions函数 的处理流程:
读取extentions表中 type=component的所有 组件 数据 ,返回 的数组各项中有name和option的信息
name是组件 名称 ,option也是组件名称 
循环每个组件 ,调用getTypeOptionsByComponent函数 ,检测 相应的每个组件 参数

getTypeOptionsByComponent函数 的处理流程是:
检测组件下的metadata.xml 是否存在,路径类似 components/com_contact/metadata.xml
如果 存在且有设置,会使用里面的设置 即调用  getTypeOptionsFromXML 函数 来处理
如果 选项还是为空,调用  getTypeOptionsFromMVC 函数 来处理
 
getTypeOptionsFromMVC 的函数 处理流程是:
组合组件views的路径 ,类似  components\com_contact\views\
获取 到所有子文件夹: $views = JFolder::folders($path);
检测 相应文件夹下的 metadata.xml 。如果 存在 ,则分析 metadata.xml如果 不存在 
调用getTypeOptionsFromLayouts 函数继续深入到tmpl文件夹
 
getTypeOptionsFromLayouts 函数的处理流程:
进入到相应的tmpl文件夹, 寻找 到所有以.xml结尾 的文件 JFolder::files($path, '.xml$', false, true)
循环分析 相应的xml文件
 
com_weblinks 使用的是在tmpl文件夹中放相应.xml文件的规则

撇开程序 的数据流程,其实菜单项类型就是根据各组件 的.xml文件设置来生成的
分为几个 层次,前台 组件 的根目录 下的metadata.xml,各views目录 下的metadata.xml, 各tmpl(模板)文件夹下的xml文件