diff --git a/AvocadoEdition_Light/addons/sample/config.php b/AvocadoEdition_Light/addons/sample/config.php
new file mode 100644
index 0000000..02c4578
--- /dev/null
+++ b/AvocadoEdition_Light/addons/sample/config.php
@@ -0,0 +1,3 @@
+getConfig();
+ echo '
';
+ }
+
+ public function getConfig()
+ {
+ global $g5;
+
+ $sql = "SELECT addon_config FROM {$g5['addons_config_table']} WHERE addon_name = '{$this->className}'";
+ $result = sql_fetch($sql);
+
+ if ($result && isset($result['addon_config'])) {
+ return json_decode($result['addon_config'], true) ?: [];
+ }
+
+ return [];
+ }
+}
diff --git a/AvocadoEdition_Light/addons/sample/sample.config.php b/AvocadoEdition_Light/addons/sample/sample.config.php
deleted file mode 100644
index d21ee4a..0000000
--- a/AvocadoEdition_Light/addons/sample/sample.config.php
+++ /dev/null
@@ -1,3 +0,0 @@
-addChildMenu("config", "환경설정", G5_ADMIN_URL . "/site_config_form.php", true, 1, "\F3E5", 0);
$menu["config"]->getLastAddedMenu()->addSubURL("/site_config_form_update.php");
-$menu["config"]->addChildMenu("config", "테마 설정", G5_ADMIN_URL . "/theme.php", true, 2, "\F4B2", 0);
+$menu["config"]->addChildMenu("config", "애드온 설정", G5_ADMIN_URL . "/addon_config.php", true, 2, "\F4CA", 0);
+
+$menu["config"]->addChildMenu("config", "홈페이지 폰트 설정", G5_ADMIN_URL . "/editor_font.php", true, 3, "\F5CB", 0);
+$menu["config"]->getLastAddedMenu()->addSubURL("/editor_font_update.php");
+
+$menu["config"]->addChildMenu("config", "테마 설정", G5_ADMIN_URL . "/theme.php", true, 4, "\F4B2", 0);
$menu["config"]->getLastAddedMenu()->addSubURL("/theme_config_load.php");
$menu["config"]->getLastAddedMenu()->addSubURL("/theme_detail.php");
$menu["config"]->getLastAddedMenu()->addSubURL("/theme_update.php");
$menu["config"]->getLastAddedMenu()->addSubURL("/theme_preview.php");
-$menu["config"]->addChildMenu("config", "메인 편집", G5_ADMIN_URL . "/viewer_form.php", true, 3, "\F3F4", 0);
-$menu["config"]->getLastAddedMenu()->addSubURL("/viewer_form_update.php");
-
-$menu["config"]->addChildMenu("config", "디자인 설정", G5_ADMIN_URL . "/design_form.php", true, 4, "\F1D8", 0);
+$menu["config"]->addChildMenu("config", "디자인 설정", G5_ADMIN_URL . "/design_form.php", true, 5, "\F1D8", 0);
$menu["config"]->getLastAddedMenu()->addSubURL("/design_form_update.php");
-$menu["config"]->addChildMenu("config", "HTML에디터 폰트 설정", G5_ADMIN_URL . "/editor_font.php", true, 5, "\F3DA", 0);
-$menu["config"]->getLastAddedMenu()->addSubURL("/editor_font_update.php");
+$menu["config"]->addChildMenu("config", "메인 편집", G5_ADMIN_URL . "/viewer_form.php", true, 6, "\F891", 0);
+$menu["config"]->getLastAddedMenu()->addSubURL("/viewer_form_update.php");
-$menu["config"]->addChildMenu("config", "메뉴 설정", G5_ADMIN_URL . "/menu_list.php", true, 6, "\F478", 0);
+$menu["config"]->addChildMenu("config", "메뉴 설정", G5_ADMIN_URL . "/menu_list.php", true, 7, "\F478", 0);
$menu["config"]->getLastAddedMenu()->addSubURL("/menu_list_update.php");
$menu["config"]->getLastAddedMenu()->addSubURL("/menu_form.php");
$menu["config"]->getLastAddedMenu()->addSubURL("/menu_form_search.php");
diff --git a/AvocadoEdition_Light/adm/addon_config.php b/AvocadoEdition_Light/adm/addon_config.php
new file mode 100644
index 0000000..7d29c23
--- /dev/null
+++ b/AvocadoEdition_Light/adm/addon_config.php
@@ -0,0 +1,107 @@
+
+
+ $value) {
+ if (!in_array($key, $filter)) {
+ $config_data[$key] = $value;
+ }
+ }
+
+ $config_data["saved_date"] = (new DateTime())->getTimestamp();
+
+ $config_json = addslashes(json_encode($config_data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
+
+ $sql = " SELECT COUNT(*) as cnt FROM {$g5['addons_config_table']} WHERE addon_name = '{$addon_name}' ";
+ $row = sql_fetch($sql);
+
+ if ($row['cnt'] > 0) {
+ $sql = " UPDATE {$g5['addons_config_table']}
+ SET addon_config = '{$config_json}',
+ addon_version = '{$addon->version}'
+ WHERE addon_name = '{$addon_name}' ";
+ } else {
+ $sql = " INSERT INTO {$g5['addons_config_table']}
+ SET addon_name = '{$addon_name}',
+ addon_config = '{$config_json}',
+ addon_version = '{$addon->version}' ";
+ }
+
+ sql_query($sql);
+} else {
+ alert("애드온이 설정되지 않았습니다.");
+}
+
+goto_url('./addon_config.php?addon=' . $addon_name);
diff --git a/AvocadoEdition_Light/adm/admin.head.php b/AvocadoEdition_Light/adm/admin.head.php
index ae86d55..ea975b6 100644
--- a/AvocadoEdition_Light/adm/admin.head.php
+++ b/AvocadoEdition_Light/adm/admin.head.php
@@ -2,7 +2,7 @@
if (!defined('_GNUBOARD_'))
exit;
-$begin_time = get_microtime();
+$begin_time = microtime(true);
include_once G5_PATH . '/head.sub.php';
?>
diff --git a/AvocadoEdition_Light/adm/css/addon_config.css b/AvocadoEdition_Light/adm/css/addon_config.css
new file mode 100644
index 0000000..69b9c8f
--- /dev/null
+++ b/AvocadoEdition_Light/adm/css/addon_config.css
@@ -0,0 +1,70 @@
+
+th a {
+ display: inline-block;
+ vertical-align: middle;
+ padding: 3px 10px;
+ background: #ecc6c6;
+ color: #fff;
+ margin: 5px 0 0;
+}
+
+th a+a {
+ margin-top: 3px;
+}
+
+#wrap {
+ height: 100%;
+}
+
+#container {
+ padding: 0 !important;
+ min-height: 100%;
+}
+
+#wrapper {
+ height: 100%;
+ box-sizing: border-box;
+}
+
+#container section.addon_config {
+ display: flex;
+ height: 100%;
+ padding: 8px;
+ gap: 8px;
+}
+
+.addon_config>nav {
+ min-width: 200px;
+ display: flex;
+ flex-direction: column;
+ border: 1px solid #d18686;
+ border-radius: 4px;
+ overflow:hidden;
+}
+
+.addon_config>nav>* {
+ padding: 0 12px;
+ line-height: 32px;
+}
+
+.addon_config>nav>a.selected {
+ background: #ecc6c6;
+ font-weight: bold;
+}
+
+.addon_config>nav>span {
+ background: #d18686;
+ color: #FFF;
+ line-height: 48px;
+}
+
+.addon_config>section {
+ flex-grow: 1;
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+td a {
+ color: #d18686;
+}
diff --git a/AvocadoEdition_Light/adm/design_form_update.php b/AvocadoEdition_Light/adm/design_form_update.php
index 72d4fcd..7dd0a4c 100644
--- a/AvocadoEdition_Light/adm/design_form_update.php
+++ b/AvocadoEdition_Light/adm/design_form_update.php
@@ -1,6 +1,25 @@