zoukankan      html  css  js  c++  java
  • ecos资源探测器

    两种类型的资源探测器

    xml文件资源探测器

    目录资源探测器

    系统内置的资源探测器(核心)

    数据库定义目录资源探测器  -base_application_datable  关注dbschema  

    service资源探测器  -base_application_service  关注services.xml  

    语言包资源探测器  -base_application_lang

    缓存更新探测器  -base_application_cache_expires

    位置解释

    base-》app名称

    application-》lib/application

    datable-》datable.php文件

    其余的资源探测器,都通过service的形式注册,注册点为app_content_detector (detector探测器的意思)

    这里怎么实现的过会再说???

    查看系统里目前已注册的资源探测器

    dev:show services | grep -i app_content_detector (dev:show services 所有注册的service,grep -i app_content_detector从这些注册的service中找资源探测器)//这个命令只适合与linux

    windows命令未找到,等找到会补上---------------------------------------------------???

    资源探测器开放!!!

    级联结构

    Iterator(迭代器)接口

    base_application_prototype_content 使用 Iterator 接口(implements)  

    位置app/base/lib/application/prototype/content.php 

    base_application_prototype_filepath 继承 base_application_prototype_content

    base_application_prototype_xml 继承 base_application_prototype_content

    filepath.php提供可以遍历目录里所有文件或目录的接口

    xml.php提供可以遍历xml文件下某个节点下所有子节点的接口

    例子

    开发xml文件资源探测器

    desktop作为例子

    菜单探测器针对desktop.xml内寻找permissions下所有permission子节点

    <desktop>
        <permissions>
            <permission id="shopsetting" display='true'>商店设置    </permission>
            <permission id="setting" display='true'>数据管理</permission>
            <permission id="performance" display='true'>缓存,队列,计划任务管理</permission>
            <permission id="users" display='true'>权限管理</permission>
            <permission id="other" display='true'>其他</permission>
        </permissions>
    
    </desktop>

    建立探测器类文件(那个app下探测什么,该探测器继承与那类探测器)

    <?php
    class desktop_application_permission extends base_application_prototype_xml{
    }

    位置app/desktop/lib/application/permission.php

    注册成service

    在service中进行注册

    app/desktop/desktop.xml(配置文件)(app_conetent_detector  service box id意思)

    <services>
       ...
       <service id="app_content_detector">
            <class>desktop_application_permission</class>   
        </service>
        ...
    </services>

    补充desktop_application_permission类

    <?php
    class desktop_application_permission extend base_application_prototype_xml{
        var $xml='desktop.xml';//指定要探测的xml资源文件,本例中会调用app/desktop/desktop.xml
        var $xsd='desktop_content';//指定xml对应的xsd位置,本例是app/desktop/xmlschema/content.xsd(为何不是desktop_xmlschema_content)
        var $path='permissions/permission';//指定xml节点        
    }

    desktop.xml下permissions节点下所有permission子节点

    current

    设置当前遍历子节点的内容$current和当前元素的键$key

    通过$this->iterator()->current()可以获取当前xml子节点的array数据

    本例中是当前permissions/permission节点数据

    <?php
    class desktop_application_permission extends base_application_prototype_xml{
        function current(){
            $this->current = $this->iterator->current();
            $this->key = $this->current['id'] ;
            return $this;   
        }
    }    

    install

    install app_name时调用

    需要重载,安装当前遍历节点的数据

    <?php
    class desktop_application_permission extend base_application_prototype_xml{
        function row(){
            $row = array(
                'menu_type'=>$this->content_typename();
                'app_id'=>$this->target_app->app_id
            );
            $row['menu_title']=$this->current['value'];
            $row['display'] = $this->current['display'];
            $access_opct=array(
                'show'=>$this->current['show'],
                'save'=>$this->current['save']
            );
            $row['addon']=serialize($access_opct);
            $row['permission']=$this->current['id']//$this->key;  
            return $row;
        }
       function install(){
         kernel:log('Installing'.$this->content_typename().' '.$this->key());
         return app:get('desktop')->model('menus')->insert($this->row());
       }       
    }    

    到这里就解释了资源探测器的作用了,探测资源,获取资源,操作资源

    clear_by_app

    资源卸载,在uninstall app_name时调用

    <?php
    class desktop_application_permission extends base_application_prototype_xml {
        function clear_by_app($app_id){
            if(!$app_id){
                return false;
            }
            app::get('desktop')->model('menus')->delete(array(
                'app_id'=>$app_id,'menu_type' => $this->content_typename()));
        }

    update

    资源更新 update app_name时调用 不需要重载(基类有这个函数)

    active_by_app

    active app_name时调用 不需要重载(基类有这个函数)

    pause_by_app

    pause app_name时调用 不需要重载(基类有这个函数)

    如何开发目录型资源探测器

    类似

    去掉$xml和$xsd属性

    去掉current()函数,基类提供的函数默认设置$key为文件名/目录名

    增加filter()函数,可以只遍历$path目录下关注的文件和目录

    增加getPathname(),可以取得当前节点的目录名

    增加getFilename(),可以取得当前节点的文件名

  • 相关阅读:
    perl中的默认变量与Z/map介绍
    perl6中字符串字母编历
    将数字转化为特殊符号的密码
    vue: axios
    vue: alias
    background-size
    问题:当浏览器窗口变化时,内容的大小以及相对位置也要相应变化
    vue移动端适配
    Web 端屏幕适配方案
    vue: register and import
  • 原文地址:https://www.cnblogs.com/motian06/p/3449822.html
Copyright © 2011-2022 走看看