/** * 实际结果就是更新APF->boundable_resources变量,将用到的资源文件(整合)路径信息 * 记录到boundable_resources中。 * @todo 非递归实现 * @param string $class 文件名<->资源文件名与页面类名是一一对应的 * @param string $ext 文件扩展名 * @param boolen $is_page 是否为页面类 */ protected function fetch_boundable_resources($class, $ext, $is_page = false) { if ($is_page) { if ($pos = strpos($class, "(")) { $class = substr($class, 0, $pos); } apf_require_page($class); $path = "page/"; $class = $class . "Page"; } else { // 载入组件类 apf_require_component($class); $path = "component/"; $class = $class . "Component"; } if (!class_exists($class)) { return false; } // 获取组件(页面)使用的组件列表 eval("\$list = {$class}" . "::use_component();"); foreach ($list as $item) { // 载入所有子组件用到的资源文件 $this->fetch_boundable_resources($item, $ext); } // 获取用到的资源文件相对路径 if ($ext == 'js') { eval("\$list = {$class}::use_boundable_javascripts();"); } elseif ($ext == 'css') { eval("\$list = {$class}::use_boundable_styles();"); } else { trigger_error("Unknown extention \"{$ext}\"", E_USER_WARNING); $list = array(); } $apf = APF::get_instance(); foreach ($list as $item) { // 获取资源文件的绝对路径 $apf->prcess_resource_url($path, $item, $this->boundable_resources); } return true; }
protected function fetch_boundable_resources($class, $ext, $is_page = false) { if ($is_page) { apf_require_page($class); $path = "page/"; $class = $class . "Page"; } else { apf_require_component($class); $path = "component/"; $class = $class . "Component"; } if (!class_exists($class)) { return false; } eval("\$list = {$class}" . "::use_component();"); foreach ($list as $item) { $this->fetch_boundable_resources($item, $ext); } if ($ext == 'js') { eval("\$list = {$class}::use_boundable_javascripts();"); } elseif ($ext == 'css') { eval("\$list = {$class}::use_boundable_styles();"); } else { trigger_error("Unknown extention \"{$ext}\"", E_USER_WARNING); $list = array(); } $apf = APF::get_instance(); foreach ($list as $item) { $apf->prcess_resource_url($path, $item, $this->boundable_resources); } return true; //if (!$this->include_resource_file($item[0])) { // trigger_error("Unable to include resource \"".$item[0]."\"", E_USER_WARNING); //} }
/** * @param string $class * @return APF_Component */ public function load_component($parent, $class, $is_page = false) { $flag = true; if ($is_page) { $this->debug("load page: {$class}"); $flag = apf_require_page($class); $class = $class . "Page"; } else { $this->debug("load component: {$class}"); $flag = apf_require_component($class); $class = $class . "Component"; } if (!$flag && substr($class, 0, 3) == "HK_") { $class = substr($class, 3); } $this->html_id++; return new $class($parent, self::HTML_ID_PREFIX . $this->html_id); }
<?php apf_require_component('APF_Resource_JavascriptsAndStyles'); class APF_Resource_StyleBlocksComponent extends APF_Resource_JavascriptsAndStylesComponent { public function get_view() { return "StyleBlocks"; } public function enabled_inline_styles() { return APF::get_instance()->get_config('enabled_inline_styles', 'resource') && APF::get_instance()->get_use_inline_styles(); // enabled and used } public function get_inline_styles() { $url = $this->get_boundable_styles_url(); $key = "css-" . md5($url); apf_require_class('APF_Cache_Factory'); $mem = APF_Cache_Factory::get_instance()->get_memcache(); $css = $mem->get($key); if ($css) { return $css; } apf_require_class('APF_Http_Client_Factory'); $c = APF_Http_Client_Factory::get_instance()->get_curl(); $c->set_url($url); $c->execute(); $css = $c->get_response_text(); $mem->set($key, $css, 0, 0); return $css;