Menu Responsivo Dinâmico

Olá pessoal,

Estou usando a versão 9.12 com a última atualização até hoje. E estou tentando montar um menu dinâmico mas tudo que consegui até agora foi a criação dos menus pai mas os submenus (filhos) não consegui criar. Vou colocar aqui as tabelas envolvidas e o código que fiz baseado num modelo do próprio site da Scriptcase (https://tutoriais.myscriptcase.com/tutoriais/pt/menu-dinamico/):

TABELAS:
CREATE TABLE menu (
ID INTEGER NOT NULL AUTO_INCREMENT,
MENUID INTEGER DEFAULT NULL,
NOME VARCHAR(100) COLLATE utf8mb4_0900_ai_ci NOT NULL,
ENDERECOURL VARCHAR(100) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
IMAGEM BLOB DEFAULT NULL,
ORDEM INTEGER NOT NULL,
ATIVO ENUM(‘True’,‘False’) COLLATE utf8mb4_0900_ai_ci NOT NULL,
TARGETMENU VARCHAR(15) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
HINTMENU VARCHAR(255) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY USING BTREE (ID),
KEY MENUID USING BTREE (MENUID),
CONSTRAINT menu_ibfk_1 FOREIGN KEY (MENUID) REFERENCES menu (ID)
) ENGINE=InnoDB;

CREATE TABLE perfil (
ID INTEGER NOT NULL AUTO_INCREMENT,
NOME VARCHAR(100) COLLATE utf8mb4_0900_ai_ci NOT NULL,
HABILITA TINYINT(1) NOT NULL COMMENT ‘Habilitar este o registro para ser padrão quando o usuário se cadastrar no site.’,
PRIMARY KEY USING BTREE (ID),
UNIQUE KEY NOME USING BTREE (NOME)
) ENGINE=InnoDB;

CREATE TABLE permissaomenu (
ID INTEGER NOT NULL AUTO_INCREMENT,
PERFILID INTEGER NOT NULL,
MENUID INTEGER NOT NULL,
ATIVO ENUM(‘True’,‘False’) COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY USING BTREE (ID),
UNIQUE KEY permissaomenu_idx1 USING BTREE (PERFILID, MENUID),
KEY permissaomenu_fk2 USING BTREE (MENUID),
CONSTRAINT permissaomenu_fk1 FOREIGN KEY (PERFILID) REFERENCES perfil (ID),
CONSTRAINT permissaomenu_fk2 FOREIGN KEY (MENUID) REFERENCES menu (ID)
) ENGINE=InnoDB

CÓDIGO - EVENTO ONLOAD

sc_appmenu_reset("menu");
sc_appmenu_create("menu");

sc_lookup(Ds,"SELECT ID, NOME FROM menu WHERE MENUID IS NULL");

foreach({Ds} as $arr_menu) {
	sc_appmenu_add_item(menu, "item_".$arr_menu[0], , $arr_menu[1], '#', menuid=$arr_menu[0];menunome=$arr_menu[1], , ,);
	
	$sSQL = "SELECT A.ID, A.MENUID, B.NOME, B.ENDERECOURL, B.HINTMENU, B.TARGETMENU
			FROM permissaomenu A
			INNER JOIN menu B ON (B.ID = A.MENUID)
			WHERE A.PERFILID = ".[g_perfilid]."
			AND B.MENUID = ".$arr_menu[0]."
			AND B.ATIVO = 'True'";
	
	sc_lookup(DsItem, $sSQL);
	
	if(!empty({DsSubItem}))
		foreach({DsSubItem} as $arr_submenu) {
			sc_appmenu_add_item('menu', 'item_'.$arr_menu[0].$arr_submenu[0], 'item_'.$arr_menu[0], $arr_submenu[3], $arr_submenu[0], , , $arr_submenu[4], $arr_submenu[5]);
		}
}

Como posso resolver isso?

Grato,

Ilano.

Creio que este tutorial era no antigo menu.
Não sei se funcionará no novo.
@yuri_esteves @HenriqueB dá para dar um retorno sobre isto?

Bom dia Illano, como vai? Ocorre algum erro? Estou trabalhando num sistema em que usa o menu dinâmico e está funcionando tudo normalmente. Estamos trabalhando na atualização do sc 9.4 para o 9.12 e nos meus testes aqui na última versão está funcionando normalmente. A única coisa que não estou sabendo ainda utilizar é o Mega menu com o menu dinâmico.

Minha sugestão é dar uma debugada ai e ver se retorna algum erro pra vc…

Olá Alexandre,

Primeiro, agradeço pela atenção.
Então, eu fiz o que você sugeriu mas, mesmo assim, continua aparecendo apenas os menus pai.

Você ainda esta usando o menu novo

Olá Thyago,
Também te agradeço pela atenção. Bem, essa opção para ativar o debug, infelizmente, não encontra-se disponível na aplicação de Menu.

Verdade, ainda estava usando o novo. Criei uma nova aplicação de menu e agora no modelo antigo mas, mesmo assim, ainda só fica os menus pai, os submenus não estão sendo criados.

Pelo Webinar,
Márcia disse que haverá uma apresentação do novo
Menu de forma dinâmica.

Nessa linha do seu código você está declarando a variável de retorno dos dados como DsItem, e nas próximas linhas você se refere a esses dados como {DsSubItem}, talvez por isso não são adicionados os os sub itens dos menus.

1 Curtida

Olá Paulo Vitor, deu certo fazendo as alterações que você sugeriu.

Porém, ao aumentar os níveis, não funciona, veja como está meu cadastro.

Veja que o subitem Pais deverá estar dentro do item Básicos. Como posso resolver isso.