ScriptCase Forum

Aplicações => Menu / Menu Árvore => Tópico iniciado por: ilanocf em Dezembro 31, 2017, 04:47:36 pm

Título: Criar Menu Dinamicamente - Scriptcase 8
Enviado por: ilanocf em Dezembro 31, 2017, 04:47:36 pm
Olá pessoal,

Primeiro, Feliz Ano Novo para toda a galera do Fórum Scriptcase. Bom, enconrei um post (www.scriptcase.com.br/tutoriais/menu-dinamico/#main (http://www.scriptcase.com.br/tutoriais/menu-dinamico/#main)) na internet que mostra como montar um menu dinamicamente. Bom, eu alterei as consultas implementando de acordo com minha base de dados. Bom, já vi que as consultas estão retornando resultado, mas ainda assim não mona meu menu. Alguém poderia me dar uma luz? Segue os dados abaixo abaixo:

TABELA MÓDULOS: a000_modulos

CREATE TABLE a000_modulos (
  ID INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  TIPO INTEGER(11) DEFAULT NULL COMMENT 'Receberá o ID da tabela quando o campo NOME for filho de outro registro',
  NOME VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  NOMEARQUIVO VARCHAR(100) COLLATE utf8_general_ci DEFAULT NULL,
  ORDEM INTEGER(11) NOT NULL DEFAULT 0,
  PRIMARY KEY USING BTREE (ID),
  UNIQUE KEY a000_modulos_idx1 USING BTREE (TIPO, NOME)
) ENGINE=InnoDB;

TABELA PERMISSÃO: a029_permissoes

CREATE TABLE a029_permissoes (
  ID INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  IDPERFIL INTEGER(11) UNSIGNED NOT NULL,
  IDMODULO INTEGER(11) UNSIGNED NOT NULL,
  INCLUIR INTEGER(11) NOT NULL DEFAULT 0,
  ALTERAR INTEGER(11) NOT NULL DEFAULT 0,
  EXCLUIR INTEGER(11) NOT NULL DEFAULT 0,
  FILTRAR INTEGER(11) NOT NULL DEFAULT 0,
  EXPORTAR INTEGER(11) NOT NULL DEFAULT 0,
  ATIVAR INTEGER(11) DEFAULT 0,
  PRIMARY KEY USING BTREE (ID),
  KEY IDPERFIL USING BTREE (IDPERFIL),
  KEY IDMODULO USING BTREE (IDMODULO),
  CONSTRAINT a029_itensmenu_fk1 FOREIGN KEY (IDPERFIL) REFERENCES a001_perfis (ID),
  CONSTRAINT a029_itensmenu_fk2 FOREIGN KEY (IDMODULO) REFERENCES a000_modulos (ID)
) ENGINE=InnoDB;

CÓDIGO DO MENU NO EVENTO ONLOAD

sc_appmenu_reset(mcr14);
sc_appmenu_create(mcr14);

$sql1 = "SELECT ID, NOME FROM a000_modulos
      WHERE NOMEARQUIVO IS NULL OR NOMEARQUIVO = ''; ";

sc_lookup(dsmodulos, $sql1);

foreach({dsmodulos} as $arr_modulo)
{
 
   sc_appmenu_add_item(mcr14,'item_'.$arr_modulo[0],, $arr_modulo[1],mcr14_2,catid=$arr_modulo[0];catname=$arr_modulo[1], , , );
   
   $sql2 = "SELECT A.ID, B.NOME, B.NOMEARQUIVO, A.IDPERFIL, A.IDMODULO
          FROM a029_permissoes A
          INNER JOIN a000_modulos B ON (B.ID = A.IDMODULO)
          WHERE A.IDMODULO = ".$arr_modulo[0]." AND A.IDPERFIL = 1 AND A.ATIVAR = 1; ";

   sc_lookup(dspermissao,$sql2);
 
   if(!empty({dspermissao}))
   foreach({dspermissao} as $arr_permissao)
   {
   sc_appmenu_add_item('mcr14','item_'.$arr_modulo[0].$arr_permissao[0],'item_'.$arr_modulo[0], $arr_permissao[1],mcr14_1,prodid=$arr_permissao[0], , , );
   }
};
Título: Re:Criar Menu Dinamicamente - Scriptcase 8
Enviado por: ilanocf em Dezembro 31, 2017, 05:46:55 pm
Alterei para esse outro modelo, bem mais simples, baseado nesse vídeo https://www.youtube.com/watch?v=i-UMyg_hpQI (https://www.youtube.com/watch?v=i-UMyg_hpQI). Embora tenha criado o menu, não criou subitens, todos ficaram como itens.

sc_appmenu_reset(menu);
sc_appmenu_create(menu);

$sql = "SELECT A.ID, B.NOME, B.NOMEARQUIVO, A.IDPERFIL, A.IDMODULO
      FROM a029_permissoes A
      INNER JOIN a000_modulos B ON (B.ID = A.IDMODULO)
      WHERE A.ATIVAR = 1 AND A.IDPERFIL = 1; ";

sc_lookup(dsmenu, $sql);

foreach({dsmenu} as $arr_menu)
{
   $id_item = 'item_'.$arr_menu[0];
   
   if($arr_menu[1] == 0)
   {
      $id_parent = '';
   } else
      {
         $id_parent = 'item_'.$arr_menu[1];
      }
   
   sc_appmenu_add_item(
      'menu',
      $id_item,
      $id_parent,
      $arr_menu[1],
      $arr_menu[2],
      "", "", "", ""
      );

};

Título: Re:Criar Menu Dinamicamente - Scriptcase 8
Enviado por: ilanocf em Dezembro 31, 2017, 06:28:33 pm
Retornei ao código do primeiro post e consegui montar os Itens mas, os subitens só oram montados no primeiro item. O que está faltando?

sc_appmenu_reset(menu);
sc_appmenu_create(menu);

$sql1 = "SELECT ID, NOME FROM a000_modulos
      WHERE TIPO IS NULL AND (NOMEARQUIVO IS NULL OR NOMEARQUIVO = '')
      ORDER BY ORDEM; ";

sc_lookup(dsmodulos, $sql1);

foreach({dsmodulos} as $arr_modulo)
{
 
   sc_appmenu_add_item('menu','item_'.$arr_modulo[0],, $arr_modulo[1],'',catid=$arr_modulo[0];catname=$arr_modulo[1], , , );
   
   $sql2 = "SELECT A.ID, B.NOME, B.NOMEARQUIVO, A.IDPERFIL, A.IDMODULO
          FROM a029_permissoes A
          INNER JOIN a000_modulos B ON (B.ID = A.IDMODULO)
          WHERE B.TIPO = ".$arr_modulo[0]." AND A.IDPERFIL = 1 AND A.ATIVAR = 1
          ORDER BY B.ORDEM; ";
   
   echo $sql2. "<br />";
   
   sc_lookup(dspermissao,$sql2);
 
   if(!empty({dspermissao}))
   foreach({dspermissao} as $arr_permissao)
   {
   sc_appmenu_add_item('menu',
                  'item_'.$arr_modulo[0].$arr_permissao[0],
                  'item_'.$arr_modulo[0],
                  $arr_permissao[1],
                  $arr_permissao[2],
                  prodid=$arr_permissao[0],
                  "", "", "");
   }
};
Título: Re:Criar Menu Dinamicamente - Scriptcase 8
Enviado por: ilanocf em Janeiro 02, 2018, 09:28:54 pm
Consegui montar o menu. Meu código final ficou como abaixo, a questão agora é só criar o item de saída.

Citar

sc_appmenu_reset(menu);
sc_appmenu_create(menu);
$perfil = [vlPerfil];

$sql1 = "SELECT ID, NOME FROM a000_modulos
      WHERE TIPO IS NULL AND (NOMEARQUIVO IS NULL OR NOMEARQUIVO = '')
      AND ID IN (SELECT DISTINCT TIPO
      FROM a029_permissoes
      WHERE IDPERFIL = $perfil AND ATIVAR = 1)
      ORDER BY ORDEM; ";

sc_lookup(dsmodulos, $sql1);

foreach({dsmodulos} as $arr_modulo)
{
 
   sc_appmenu_add_item('menu','item_'.$arr_modulo[0],, $arr_modulo[1],'',catid=$arr_modulo[0];catname=$arr_modulo[1], , , );
   
   $sql2 = "SELECT A.ID, B.NOME, B.NOMEARQUIVO, A.IDPERFIL, A.IDMODULO
          FROM a029_permissoes A
          INNER JOIN a000_modulos B ON (B.ID = A.IDMODULO)
          WHERE B.TIPO = ".$arr_modulo[0]." AND A.IDPERFIL = $perfil AND A.ATIVAR = 1
          ORDER BY B.ORDEM; ";
   
   sc_lookup(dspermissao,$sql2);
 
   if(!empty({dspermissao}))
   foreach({dspermissao} as $arr_permissao)
   {
      sc_appmenu_add_item('menu',
                     'item_'.$arr_modulo[0].$arr_permissao[0],
                     'item_'.$arr_modulo[0],
                     $arr_permissao[1],
                     $arr_permissao[2],
                     prodid=$arr_permissao[0],
                     "", "", "");
   };
};




Título: Re:Criar Menu Dinamicamente - Scriptcase 8
Enviado por: ilanocf em Março 06, 2018, 12:40:35 pm
Galera, estou adicionando essa linha após o código acima:

Citar
$i=$i + 1;
sc_appmenu_add_item('menu', $i, '', '<b>SAIR</b>', 'login', '', '', '', '_parent');

Só que está retornando o erro:

Citar
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@mdierp.com.br to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

Como posso resolver isso?
Título: Re:Criar Menu Dinamicamente - Scriptcase 8
Enviado por: Wennys Carlos em Março 06, 2018, 02:12:50 pm

O nome da tua app tem que ser menu.
Título: Re:Criar Menu Dinamicamente - Scriptcase 8
Enviado por: ilanocf em Março 06, 2018, 02:40:27 pm
O nome da minha app está menu mesmo.
Título: Re:Criar Menu Dinamicamente - Scriptcase 8
Enviado por: ilanocf em Março 31, 2018, 11:53:38 am
Consegui fazer, agora, como faço para pegar a imagem que está no banco e passar para o menu para mostrar o ícone?

Tentei fazer assim, mas não deu certo:

Citar

...
if(!empty({dspermissao}))
   foreach({dspermissao} as $arr_permissao)
   {
   $icone = base64_encode({dspermissao[0][5]});
   sc_appmenu_add_item('mcr14','item_'.$arr_modulo[0].$arr_permissao[0],'item_'.$arr_modulo[0], $arr_permissao[1],mcr14_1,prodid=$arr_permissao[0], $icone, , );
   }
...

Título: Re:Criar Menu Dinamicamente - Scriptcase 8
Enviado por: ilanocf em Abril 06, 2018, 11:21:05 am
Alguém tem alguma ideia de como posso fazer isso?