wecenter 학습 노트 - 플러그인 메커니즘
플러그인 메커니즘
wecenter는 초급 플러그인 모델을 가지고 있지만 아쉽게도 제3자가 이 메커니즘을 바탕으로 플러그인을 개발하지 않았고 공식 사이트에서 제출한
도 2차 개발 방식일 뿐 플러그인을 바탕으로 개발한 것이 아니다.현재 플러그인
프로젝트에 두 개의 플러그인 내장
몇 개의utility 함수를 제공하였다
플러그인 구조
일반적인 플러그인 구조는 다음과 같습니다.
모든 플러그인은plugins의 디렉터리이고 디렉터리의
config.php
은 플러그인의 메타데이터 정보입니다$aws_plugin = array(
'title' => 'External for Anwsion', //
'version' => 20130107, //
'description' => 'Anwsion ', //
'requirements' => '20120706', // Build
'contents' => array(
// (setup)
'setups' => array(
array(
'app' => 'app',
'controller' => 'controller',
'include' => 'aws_plungin_controller.php'
)
),
// Action ( )
'actions' => array(
array(
'app' => 'app',
'controller' => 'controller',
'action' => 'action',
'template' => 'template.tpl',
'include' => 'aws_plungin_controller.php'
)
),
// Model, $this->model('name')
'model' => array(
'class_name' => 'aws_offical_external_class', // Model name, _class
'include' => 'aws_offical_external.php', //
),
),
);
구성에는 주로 다음 정보가 포함됩니다.
플러그인의 메타데이터 로드
적용 시작 시 플러그인 관리자 로드(core plugins)
aws_app.inc.app#init
117 self::$plugins = load_class('core_plugins');
모든 플러그인 디렉토리를 검색하고 메타데이터를 로드합니다.
aws_app.inc.app#load_plugins()
$dir_handle = opendir($this->plugins_path);
while (($file = readdir($dir_handle)) !== false)
{
if ($file != '.' AND $file != '..' AND is_dir($this->plugins_path . $file))
{
$config_file = $this->plugins_path . $file . '/config.php';
if (file_exists($config_file))
{
$aws_plugin = false;
require_once($config_file);
if (is_array($aws_plugin) AND G_VERSION_BUILD >= $aws_plugin['requirements'])
{
if ($aws_plugin['contents']['model'])
{
$this->plugins_model[$aws_plugin['contents']['model']['class_name']] = $this->plugins_path . $file . '/' . $aws_plugin['contents']['model']['include'];
}
if ($aws_plugin['contents']['setups'])
{
foreach ($aws_plugin['contents']['setups'] AS $key => $data)
{
if ($data['app'] AND $data['controller'] AND $data['include'])
{
$this->plugins_table[$data['app']][$data['controller']]['setup'][] = array(
'file' => $this->plugins_path . $file . '/' . $data['include'],
);
}
}
}
if ($aws_plugin['contents']['actions'])
{
foreach ($aws_plugin['contents']['actions'] AS $key => $data)
{
if ($data['app'] AND $data['controller'] AND $data['include'])
{
$this->plugins_table[$data['app']][$data['controller']][$data['action']][] = array(
'file' => $this->plugins_path . $file . '/' . $data['include'],
'template' => $data['template']
);
}
}
}
$this->plugins[$file] = $aws_plugin;
}
}
}
}
closedir($dir_handle);
캐시에 메타데이터 쓰기
플러그인 로드
Controller의 초기화 함수는 매개 변수에 따라 대응하는 플러그인을 불러옵니다
aws_controller.inc.php#__construct
//
if ($plugins = AWS_APP::plugins()->parse($_GET['app'], $_GET['c'], 'setup'))
{
foreach ($plugins as $plugin_file)
{
include $plugin_file;
}
}
템플릿 렌더링 시 플러그인 불러오기
system/class/cls_template.inc.php#output
if ($plugins = AWS_APP::plugins()->parse($_GET['app'], $_GET['c'], $_GET['act'], str_replace(self::$template_ext, '', $template_filename)))
{
foreach ($plugins AS $plugin_file)
{
include_once $plugin_file;
}
}
이 밖에 정시 작업도 플러그인을 불러일으킨다
app/crond/main.php#run_action
if ($plugins = AWS_APP::plugins()->parse('crond', 'main', $call_action))
{
foreach ($plugins AS $plugin_file)
{
include($plugin_file);
}
}
플러그인 사용 방법
Autoload는 Plugin에서 모델 클래스를 불러오는 것을 처리하기 때문에 모든 모델 클래스의 사용 방식은 다르지 않습니다.예:
$this->model('aws_external')->format_js_question_ul_output($_GET['ul_class'],$_GET['is_recommend']));
자동 도입 메커니즘 및 Autoload← o→Cache의 실현 원리
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.