Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
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 Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework 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($message, TAction $action_yes = NULL, TAction $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. if ($action_yes && $action_yes->isStatic())
  9. {
  10. $action_yes->setParameter('static', '1' );
  11. }
  12. if ($action_no && $action_no->isStatic())
  13. {
  14. $action_no->setParameter('static', '1' );
  15. }
  16. if ($action_cancel && $action_cancel->isStatic())
  17. {
  18. $action_cancel->setParameter('static', '1' );
  19. }
  20. $title = addslashes($title);
  21. $message = addslashes($message);
  22. if ($action_yes)
  23. {
  24. $callback_yes = "function () { __adianti_load_page('{$action_yes->serialize()}') }";
  25. }
  26. if ($action_no)
  27. {
  28. $callback_no = "function () { __adianti_load_page('{$action_no->serialize()}') }";
  29. }
  30. if ($action_cancel)
  31. {
  32. $callback_cancel = "function () { __adianti_load_page('{$action_no->serialize()}') }";
  33. }
  34. TScript::create("__adianti_question('{$title}', '{$message}', $callback_yes, $callback_no, '{$label_yes}', '{$label_no}', $action_cancel)");
  35. }
  36. }
  37. ?>


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(title, message, callback_yes, callback_no, label_yes, label_no, callback_cancel)
  3. {
  4. if (typeof bootbox == 'object')
  5. {
  6. bootbox.dialog({
  7. title: title,
  8. animate: false,
  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. label: label_yes,
  16. className: "btn-default",
  17. callback: function() {
  18. if (typeof callback_yes != 'undefined') {
  19. callback_yes();
  20. }
  21. }
  22. },
  23. no: {
  24. label: label_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 r = confirm(message);
  48. if (r == 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.