<?php mpf_require_component('MPF_Resource_JavascriptsAndStyles'); class MPF_Resource_ScriptBlocksComponent extends MPF_Resource_JavascriptsAndStylesComponent { public function get_view() { return @$this->get_param('head') ? 'ScriptBlocksHead' : 'ScriptBlocks'; } }
/** * @param string $class * @return MPF_Component */ public function load_component($parent, $class, $is_page = false) { $flag = true; if ($is_page) { $this->debug("load page: {$class}"); $flag = mpf_require_page($class); $class = $class . "Page"; } else { $this->debug("load component: {$class}"); $flag = mpf_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); }
/** * 实际结果就是更新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); } mpf_require_page($class); $path = "page/"; $class = $class . "Page"; } else { // 载入组件类 mpf_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(); } $mpf = MPF::get_instance(); foreach ($list as $item) { // 获取资源文件的绝对路径 $mpf->prcess_resource_url($path, $item, $this->boundable_resources); } return true; }