Lançado Adianti Framework 7.6!
Clique aqui para saber mais
TQuestion - 2 botões para ações e um para cancelar, como fazer? Boa tarde! Tenho uma situação onde cada opção do TQuestion leva para determinado local, porém, necessito que o usuário tenha a possibilidade de cancelar a TQuestion, caso contrário ele ficará obrigado a escolher uma das opções. O que eu fiz foi alterar o nome de "Sim" e "Não" do TQuestion para atender minha necessidade (neste caso alterei o tquestion para receber nomes para os botõ...
CG
TQuestion - 2 botões para ações e um para cancelar, como fazer?  
Boa tarde!

Tenho uma situação onde cada opção do TQuestion leva para determinado local, porém, necessito que o usuário tenha a possibilidade de cancelar a TQuestion, caso contrário ele ficará obrigado a escolher uma das opções.
O que eu fiz foi alterar o nome de "Sim" e "Não" do TQuestion para atender minha necessidade (neste caso alterei o tquestion para receber nomes para os botões), e como mencionei cada botão direciona o usuário para determinada ação, e nenhuma delas é cancelar o TQuestion.

Verifiquei o código do TQuestion para inserir mais um botão e neste caso, o botão receberia outra action para voltar a página atual, fiz modificações mas a TQuestion acaba não carregando.

Alguém poderia me auxiliar nessa questão?
Agradeço antecipadamente!

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (5)


NR

Uma outra opção é usar o TInputDialog que permite maior customização:
adianti.com.br/framework_files/tutor/index.php?class=DialogInputView

Se for modificar o TQuestion também será necessário copiar a função javascript __adianti_question do arquivo lib/adianti/include/adianti.js para o arquivo app/lib/include/application.js e alterá-la para adicionar o outro botão. Nesse caso deve ser necessário limpar o cache.
CG

Obrigado Nataniel!
O botão apareceu, na tela mas não executou a ação bem como não apareceu o nome do botão, no lugar do nome do botão apareceu o link da ação, e o botão que eu adicionei que no caso foi o cancelar, quando clica-se nele não executa nada.

Bom, por hora estou usando o theme3 que tem um X pra fechar a janela (posso usar também o DialogInputView depois), mas se possivel queria editar o question.
Ficou assim:

function __adianti_question(title, message, callback_yes, callback_no, label_yes, label_no, callback_cancel) { if (typeof bootbox == 'object') { bootbox.dialog({ title: title, animate: false, message: '<div>'+ '<span class="fa fa-question-circle fa-5x blue" style="float:left"></span>'+ '<span style="margin-left:70px;display:block;max-height:500px">'+message+'</span>'+ '</div>', buttons: { yes: { label: label_yes, className: "btn-default", callback: function() { if (typeof callback_yes != 'undefined') { callback_yes(); } } }, no: { label: label_no, className: "btn-default", callback: function() { if (typeof callback_no != 'undefined') { callback_no(); } } }, cancel: { label: 'Cancelar', className: "btn-default", callback: function () { if (typeof callback_cancel != 'undefined') { callback_cancel(); } } }, } }); } else { // fallback mode var r = confirm(message); if (r == true) { if (typeof callback_yes != 'undefined') { callback_yes(); } } else { if (typeof callback_no != 'undefined') { callback_no(); } if (typeof callback_cancel != 'undefined') { callback_cancel(); } } } }


No TQuestion fiz assim:

  1. <?php
  2. public function __construct($messageTAction $action_yes NULLTAction $action_no NULL$title_msg ''TAction $action_cancel NULL)
  3.     {
  4.         $title        = ( $title_msg $title_msg AdiantiCoreTranslator::translate('Question') );
  5.         $callback_yes "function () {}";
  6.         $callback_no  "function () {}";
  7.         $callback_cancel "function () {}";
  8.        
  9.        
  10.         if ($action_yes && $action_yes->isStatic())
  11.         {
  12.             $action_yes->setParameter('static''1' );
  13.         }
  14.         
  15.         if ($action_no && $action_no->isStatic())
  16.         {
  17.             $action_no->setParameter('static''1' );
  18.         }
  19.         if ($action_cancel && $action_cancel->isStatic())
  20.         {
  21.             $action_cancel->setParameter('static''1' );
  22.         }
  23.               
  24.         $title addslashes($title);
  25.         $message addslashes($message);
  26.         
  27.         if ($action_yes)
  28.         {
  29.             $callback_yes "function () { __adianti_load_page('{$action_yes->serialize()}') }";
  30.         }
  31.         
  32.         if ($action_no)
  33.         {
  34.             $callback_no "function () { __adianti_load_page('{$action_no->serialize()}') }";
  35.         }
  36.         if ($action_cancel)
  37.         {
  38.             $callback_cancel "function () { __adianti_load_page('{$action_no->serialize()}') }";
  39.         }
  40.         TScript::create("__adianti_question('{$title}', '{$message}', $callback_yes$callback_no, '{$label_yes}', '{$label_no}', $action_cancel)");
  41.     }
  42. }
  43. ?>


Creio que o erro está no fallback mode, não entendi bem como funciona aquela parte!
Agradeço!
NR

Dois detalhes que observei no TQuestion:
1:
  1. <?php
  2. if ($action_cancel)
  3. {
  4.        //$callback_cancel = "function () { __adianti_load_page('{$action_no->serialize()}') }"; está serializando a action_no ao invés de action_cancel
  5.        $callback_cancel "function () { __adianti_load_page('{$action_cancel->serialize()}') }";
  6. }
  7. ?>

2:
  1. <?php
  2. //TScript::create("__adianti_question('{$title}', '{$message}', $callback_yes, $callback_no, '{$label_yes}', '{$label_no}', $action_cancel)"); deve passar callback_cancel e nao action_cancel para a função javascript
  3. TScript::create("__adianti_question('{$title}', '{$message}', $callback_yes$callback_no, '{$label_yes}', '{$label_no}', $callback_cancel)");
  4. ?>

Faça esses ajustes, se não funcionar busque por erros de javascript no console do navegador.
CG

Bom dia Nataniel!

Fiz alguns ajustes aqui e funcionou no template3, eis o código php e javascript.
Mas no template 4, que é onde vou utilizar não aparece o botão, não aparece. Preciso modificar mais alguma coisa, de repente algo específico pra esse template?

  1. <?php
  2. TScript::create("__adianti_question('{$title}', '{$message}', $callback_yes$callback_no, '{$label_yes}', '{$label_no}', $callback_cancel)");
  3. ?>


  1. <?php
  2. function __adianti_question(titlemessagecallback_yescallback_nolabel_yeslabel_nocallback_cancel)
  3. {
  4.     if (typeof bootbox == 'object')
  5.     {
  6.         bootbox.dialog({
  7.           titletitle,
  8.           animatefalse,
  9.           message'<div>'+
  10.                     '<span class="fa fa-question-circle fa-5x blue" style="float:left"></span>'+
  11.                     '<span style="margin-left:70px;display:block;max-height:500px">'+message+'</span>'+
  12.                     '</div>',
  13.           buttons: {
  14.             yes: {
  15.               labellabel_yes,
  16.               className"btn-default",
  17.               callback: function() {
  18.                 if (typeof callback_yes != 'undefined') {
  19.                     callback_yes();
  20.                 }
  21.               }
  22.             },
  23.             no: {
  24.               labellabel_no,
  25.               className"btn-default",
  26.               callback: function() {
  27.                 if (typeof callback_no != 'undefined') {
  28.                     callback_no();
  29.                 }
  30.               }
  31.             },
  32.               cancel: {
  33.                   label"Cancelar",
  34.                   className"btn-default",
  35.                   callback: function () {
  36.                       if (typeof callback_cancel != 'undefined') {
  37.                           callback_cancel();
  38.                       }
  39.                   }
  40.               },
  41.           }
  42.         });
  43.     }
  44.     else
  45.     {
  46.         // fallback mode
  47.         var confirm(message);
  48.         if (== true) {
  49.             if (typeof callback_yes != 'undefined') {
  50.                 callback_yes();
  51.             }
  52.             if (typeof callback_no != 'undefined') {
  53.                 callback_no();
  54.             }
  55.         } else {
  56.             if (typeof callback_cancel != 'undefined') {
  57.                 callback_cancel();
  58.             }
  59.         }
  60.     }
  61. }
  62. ?>


Obrigado!!
NR

A função __adianti_question do tema4 está em outro arquivo: app/templates/theme4/js/custom.js

O tema4 utiliza o sweetalert.js para os diálogos. Teria que ver se ele permite acrescentar outro botão.