Oferta Limitada! 40% OFF para compra e renovaÇÃo. Comprar agora

Autor Tópico: Criar Menu Dinamicamente - Scriptcase 8  (Lida 460 vezes)

ilanocf

  • Intermediário
  • ***
  • Mensagens: 194
    • Email
Criar Menu Dinamicamente - Scriptcase 8
« Online: 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) 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], , , );
   }
};
« Última modificação: Dezembro 31, 2017, 05:48:24 pm por ilanocf »

ilanocf

  • Intermediário
  • ***
  • Mensagens: 194
    • Email
Re:Criar Menu Dinamicamente - Scriptcase 8
« Responder #1 Online: 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. 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],
      "", "", "", ""
      );

};


ilanocf

  • Intermediário
  • ***
  • Mensagens: 194
    • Email
Re:Criar Menu Dinamicamente - Scriptcase 8
« Responder #2 Online: 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],
                  "", "", "");
   }
};

ilanocf

  • Intermediário
  • ***
  • Mensagens: 194
    • Email
Re:Criar Menu Dinamicamente - Scriptcase 8
« Responder #3 Online: 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],
                     "", "", "");
   };
};





ilanocf

  • Intermediário
  • ***
  • Mensagens: 194
    • Email
Re:Criar Menu Dinamicamente - Scriptcase 8
« Responder #4 Online: 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?

Wennys Carlos

  • Avançado
  • ****
  • Mensagens: 314
    • Email
Re:Criar Menu Dinamicamente - Scriptcase 8
« Responder #5 Online: Março 06, 2018, 02:12:50 pm »

O nome da tua app tem que ser menu.
Wennys Carlos

ilanocf

  • Intermediário
  • ***
  • Mensagens: 194
    • Email
Re:Criar Menu Dinamicamente - Scriptcase 8
« Responder #6 Online: Março 06, 2018, 02:40:27 pm »
O nome da minha app está menu mesmo.

ilanocf

  • Intermediário
  • ***
  • Mensagens: 194
    • Email
Re:Criar Menu Dinamicamente - Scriptcase 8
« Responder #7 Online: 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, , );
   }
...


ilanocf

  • Intermediário
  • ***
  • Mensagens: 194
    • Email
Re:Criar Menu Dinamicamente - Scriptcase 8
« Responder #8 Online: Abril 06, 2018, 11:21:05 am »
Alguém tem alguma ideia de como posso fazer isso?