diff --git a/admin/DashboardController.php b/admin/DashboardController.php
index 2271d92..7c2c1df 100644
--- a/admin/DashboardController.php
+++ b/admin/DashboardController.php
@@ -2353,24 +2353,51 @@ HTML;
HTML;
$menuIdx = 0;
foreach ($menus as $mk => $menu) {
- $mt = $menu['type'] ?? 'list';
- $mh = self::h($menu['header'] ?? '');
- $mb = self::h($menu['body'] ?? '');
- $mf = self::h($menu['footer'] ?? '');
+ $mt = $menu['type'] ?? 'button';
+ $mb = self::h($menu['body'] ?? '');
+ $mh = self::h($menu['header'] ?? '');
+ $mf = self::h($menu['footer'] ?? '');
$mbtn = self::h($menu['button'] ?? '');
+ $isBtn = $mt === 'button';
+
+ $listStyle = $isBtn ? 'display:none' : '';
+ $btnStyle = $isBtn ? '' : 'display:none';
+
echo "
- ';
echo ''; // node-card
- // ── Show first sub-menu connection inline ──
- foreach ($menu['sections'] ?? [] as $section) {
- foreach ($section['rows'] ?? [] as $row) {
- $flow = $flows[$row['id']] ?? null;
- if ($flow && $flow['type'] === 'menu' && isset($flow['menu'])) {
- echo '
';
- echo '
';
- echo '
🔘 ' . self::h($row['title']) . ' →
';
- self::renderFlowNode($row['id'], $flow, $allMenus, $companyId, true);
- echo '
';
- break 2;
- }
+ // Mostrar primer submenú en árbol
+ foreach ($items as $item) {
+ $flow = $flows[$item['id']] ?? null;
+ if ($flow && $flow['type'] === 'menu' && isset($flow['menu'])) {
+ echo '
';
+ echo '
';
+ echo '
🔲 ' . self::h($item['title']) . ' →
';
+ self::renderFlowNode($item['id'], $flow, $allMenus, $companyId, true);
+ echo '
';
+ break;
}
}
@@ -3583,21 +3709,19 @@ HTML;
echo '
📑 Sub-menú: ' . self::h($subKey) . '
';
if ($subMenu['body']) echo '
' . self::h($subMenu['body']) . '
';
- // Show sub-menu's rows
- $hasRows = false;
- foreach ($subMenu['sections'] ?? [] as $section) {
- if (!empty($section['rows'])) { $hasRows = true; break; }
- }
- if ($hasRows) {
+ // Mostrar items del sub-menú (buttons o sections[].rows)
+ $subIsBtn = ($subMenu['type'] ?? 'list') === 'button';
+ $subItems = $subIsBtn
+ ? ($subMenu['buttons'] ?? [])
+ : array_merge(...array_map(fn($s) => $s['rows'] ?? [], $subMenu['sections'] ?? []));
+ if (!empty($subItems)) {
echo '
';
- foreach ($subMenu['sections'] ?? [] as $section) {
- foreach ($section['rows'] ?? [] as $row) {
- echo '
';
- echo '🔘';
- echo '' . self::h($row['title']) . '';
- echo '' . self::h($row['id']) . '';
- echo '
';
- }
+ foreach ($subItems as $item) {
+ echo '
';
+ echo '' . ($subIsBtn ? '🔲' : '🔘') . '';
+ echo '' . self::h($item['title']) . '';
+ echo '' . self::h($item['id']) . '';
+ echo '
';
}
echo '
';
} else {
diff --git a/public/index.php b/public/index.php
index 1e17a4c..4906756 100644
--- a/public/index.php
+++ b/public/index.php
@@ -324,40 +324,57 @@ $routes = [
if (!empty($commands)) $config['commands'] = $commands;
// Menus
- $menuKeys = $_POST['menu_key'] ?? [];
- $menuTypes = $_POST['menu_type'] ?? [];
- $menuHeaders = $_POST['menu_header'] ?? [];
- $menuBodies = $_POST['menu_body'] ?? [];
- $menuFooters = $_POST['menu_footer'] ?? [];
- $menuButtons = $_POST['menu_button'] ?? [];
+ $menuKeys = $_POST['menu_key'] ?? [];
+ $menuTypes = $_POST['menu_type'] ?? [];
+ $menuBodies = $_POST['menu_body'] ?? [];
+ $menuHeaders = $_POST['menu_header'] ?? [];
+ $menuFooters = $_POST['menu_footer'] ?? [];
+ $menuBtnTrigger = $_POST['menu_button'] ?? [];
$menuSections = $_POST['menu_sections'] ?? [];
+ $menuBtnIds = $_POST['menu_btn_id'] ?? [];
+ $menuBtnTitles = $_POST['menu_btn_title'] ?? [];
$menus = [];
foreach ($menuKeys as $i => $mk) {
- $mk = trim($mk);
+ $mk = trim($mk);
+ $type = $menuTypes[$i] ?? 'button';
if ($mk === '') continue;
- $sections = [];
- if (!empty($menuSections[$i])) {
- foreach ($menuSections[$i] as $si => $section) {
+ if ($type === 'button') {
+ $buttons = [];
+ foreach ($menuBtnIds[$i] ?? [] as $j => $btnId) {
+ $btnId = trim($btnId);
+ $btnTitle = mb_substr(trim($menuBtnTitles[$i][$j] ?? ''), 0, 20);
+ if ($btnId !== '' && $btnTitle !== '') {
+ $buttons[] = ['id' => $btnId, 'title' => $btnTitle];
+ }
+ }
+ $menus[$mk] = [
+ 'type' => 'button',
+ 'body' => trim($menuBodies[$i] ?? ''),
+ 'buttons' => $buttons,
+ ];
+ } else {
+ $sections = [];
+ foreach ($menuSections[$i] ?? [] as $si => $section) {
$title = trim($section['title'] ?? '');
if ($title === '') continue;
$rows = [];
foreach ($section['rows'] ?? [] as $row) {
- $rid = trim($row['id'] ?? '');
+ $rid = trim($row['id'] ?? '');
$rtitle = trim($row['title'] ?? '');
if ($rid === '' || $rtitle === '') continue;
$rows[] = ['id' => $rid, 'title' => $rtitle, 'description' => trim($row['description'] ?? '')];
}
$sections[] = ['title' => $title, 'rows' => $rows];
}
+ $menus[$mk] = [
+ 'type' => 'list',
+ 'header' => trim($menuHeaders[$i] ?? ''),
+ 'body' => trim($menuBodies[$i] ?? ''),
+ 'footer' => trim($menuFooters[$i] ?? ''),
+ 'button' => trim($menuBtnTrigger[$i] ?? ''),
+ 'sections' => $sections,
+ ];
}
- $menus[$mk] = [
- 'type' => $menuTypes[$i] ?? 'list',
- 'header' => trim($menuHeaders[$i] ?? ''),
- 'body' => trim($menuBodies[$i] ?? ''),
- 'footer' => trim($menuFooters[$i] ?? ''),
- 'button' => trim($menuButtons[$i] ?? ''),
- 'sections' => $sections,
- ];
}
if (!empty($menus)) $config['menus'] = $menus;
diff --git a/services/NormalBot.php b/services/NormalBot.php
index 9208b73..5feb9a3 100644
--- a/services/NormalBot.php
+++ b/services/NormalBot.php
@@ -262,7 +262,7 @@ class NormalBot
return self::enqueueInteractive($to, $interactive, $company);
}
- if ($menuType === 'buttons') {
+ if ($menuType === 'button') {
$buttons = [];
foreach ($menu['buttons'] ?? [] as $btn) {
$buttons[] = [