Prezados,
Preciso de uma ajuda para o seguinte problema:
Implementei o código do boostrap toogle em um campo da consulta (grid) no evento onRecord.
{campo} = ‘’;
Funcionou perfeitamente, só que ao navegar entre as páginas ou usar o quicksearch ele perde a configuração e aparece a imagem de um checkbox original do html.
Já tentei de todas as formas, porém não consegui resolver.
Será que alguem pode me ajudar?
Obrigado desde já
{campo} = input type=“checkbox” checked data-toggle=“toggle” data-on=“Confirmado” data-off=“Aguardando” data-data-onstyle=“primary” data-offstyle=“danger” data-offstyle=“danger” data-size=“small” data-width=“100” data-style=“slow”;
Obs: tirei as tags dos inputs para poder exibir o código utilizado
Seria isso?
https://dev.infinitusweb.net.br/scriptcase/grid_btn_run_com_toggle/
*Navegue entre as páginas e selecione as linhas, verá que não perde a marcação.
*Obs: Não usa bootstrap.
para exibir código aqui, escreva o código entre [code]
e [/code]
onApplicationInit
[iw] = new stdClass;
[iw]->ajax=sc_url_library('prj','apps','php/grid_dfrun_toggle_btn_ajax.php');
unset($_SESSION['grid_dfrun_toggle_btn']);
onScriptInit
sc_include_library('prj','BtnToggle','btntoggle.class.php');
$toggle = new BtnToggle();
$toggle->echoStyle('small', 'small_red','red', '0.6');
$toggle->echoStyle('small', 'small_blue','blue', '0.6');
$toggle->echoStyle('small', 'small_orange','orange', '0.6');
?><script src=<?php echo sc_url_library('prj','apps','js/grid_dfrun_toggle_btn.js');?> ></script><style>.scGridHeaderFont { color: #FFF !important; }</style><?php
onRecord
$seq={sc_seq_register};
$ajax=[iw]->ajax;
$toggle = new BtnToggle();
if ({valor} < 200) $color='red';
elseif ({valor} < 300) $color='orange';
else $color='blue';
if (isset($_SESSION['grid_dfrun_toggle_btn'][{id}]) && $_SESSION['grid_dfrun_toggle_btn'][{id}]) :
$checked='checked';
else:
$checked='';
endif;
{Check}= $toggle->generateTag('chk'.$seq,'small_'.$color,"jscheck('chk$seq', {id}, '$ajax',{valor});",$checked);
Criar botão manualmente: Processar
if (isset($_SESSION['grid_dfrun_toggle_btn'])):
ksort($_SESSION['grid_dfrun_toggle_btn']);
$_arr=$_SESSION['grid_dfrun_toggle_btn'];
foreach ($_arr as $key => $value)
{
if ($value != 1) { unset($_arr[$key]);}
else { $_arr[$key]='Checked'; }
}
echo '<pre>';
print_r($_arr);
echo '</pre>';
unset($_SESSION['grid_dfrun_toggle_btn']);
endif;
Cabeçalho
valor: Total Selecionado: <b><span style=font-size:large id=idsel>R$ 0,00</span></b>
Desenvolvi essa classe para substituir o ruim botão run do SC, pois esse perde a marcação ao navegar entre as páginas.
Segue as bibliotecas que devem ser incorporadas como externa em projetos:
http://iwh.tec.br/download/apps.zip
http://iwh.tec.br/download/BtnToggle.zip
TAGS: HAROLDO, GRID, RUN, BOTÃO, TOGGLE, IOS
Um tópico referente: Mensagem Bootstrap
Caro Haroldo,
É exatamente isso!
O scriptcase até fornece um método ajax é depois a macro sc_refresh, entretanto quando a conexão é lenta o usuário acaba clicando várias vezes até atualizar. Com este método que você implementou isso não acontece.
Vou implementar seu código é logo após isso volto aqui para dar o feedback.
Obrigado por tudo.
Excelente Haroldo ! A comunidade agradece !
Dica sensacional.
Obrigado, mestre Haroldo!
Simplesmente lindo de se ver.
Impagável.
“Desenvolvi essa classe para substituir o ruim botão run do SC, pois esse perde a marcação ao navegar entre as páginas.” Ruim é pouco para esse “run” do SC !!!
Muito obrigado por compartilhar.
Perfeito, funcionou.
Obrigado pela contribuição Haroldo.
Show, muito boa orientação
Simplesmente fantástico!
Haroldo, boa tarde!
tentei baixar suas classes para realizar o teste em meu sistema, mais a página está dando 404. Pode me ajudar?
Obs: só preciso incluir um toggle simples em uma grid, consegue me ajuda?
Não conseguiu baixar no meu GIT?
seria dos links que você sitou no seu post.
https://dev.infinitusweb.net.br/scriptcase/grid_btn_run_com_toggle/
http://iwh.tec.br/download/apps.zip
http://iwh.tec.br/download/BtnToggle.zip
se tiver isso no seu git e puder me enviar, eu agredeço.
Boa tarde! Já faz um tempo desde que esse tópico foi criado, rs. Gostaria de tirar uma dúvida sobre como capturar os IDs que foram desmarcados. Estou implementando um controle de gravidade para determinadas situações. Se o checkbox estiver marcado, faço o update para “grave”, e se for desmarcado, mudo para “não grave”.
O problema é que, quando desmarco, não retorna nenhum ID:
Array
(
)
Alguém poderia me ajudar a entender onde devo implementar a lógica para capturar os IDs desmarcados?
foreach ($_arr as $id => $status) {
if ($status == ‘Checked’) {
$sql = “UPDATE sga_Plano_Acao SET Gravidade = ‘Grave’ WHERE Id_PA = $id”;
} else {
$sql = “UPDATE sga_Plano_Acao SET Gravidade = ‘Não Grave’ WHERE Id_PA = $id”;
}
$nm_select = $sql;
$rf = $this->Db->Execute($nm_select);
if ($rf === false) {
$_erro = $this->Db->ErrorMsg();
} else {
$rf->Close();
}
}
a parte de fazer update em quando está check funciona normal.
Primeiro tem que explanar de qual forma está usando o toggle, tipo de aplicação, evento.
No evento do botão processar o código demonstra como testar se o objeto está checado ou não .
Porque não utiliza as macros do SC para update no banco de dados?
Bom dia, Haroldo
Então, todo o resto está igual ao seu exemplo. O que mudei foi apenas o nome do ID e o campo que receberia o botão toggle.
A maior mudança foi no botão de processar, que coloquei para fazer os updates nos IDs retornados.
if (isset($_SESSION[‘grid_dfrun_toggle_btn’])):
ksort($_SESSION[‘grid_dfrun_toggle_btn’]);
$_arr=$_SESSION[‘grid_dfrun_toggle_btn’];
foreach ($_arr as $key => $value)
{
if ($value != 1) { unset($_arr[$key]);}
else { $_arr[$key]=‘Checked’; }
}
echo ‘
’;’;
print_r($_arr);
echo ‘
$_SESSION['grid_dfrun_toggle_btn'] = $_arr;
foreach ($_arr as $id => $status) {
if ($status == 'Checked') {
$sql = "UPDATE sga_Plano_Acao SET Gravidade = 'Grave' WHERE Id_PA = $id";
sc_exec_sql($sql);
} else {
$sql = "UPDATE sga_Plano_Acao SET Gravidade = 'Não Grave' WHERE Id_PA = $id";
sc_exec_sql($sql);
}
}
endif;
Em relação a não usar a macro do SC, como estou acostumada a fazer do zero com PHP, ainda não peguei o costume. Mas as macros estão aí para facilitar, então já fiz a troca.
Não vejo problemas no código, aparentemente.
o que resulta o print_r?
Quanto a não usar as macros do SC para update, não foi uma crítica, acho até legal usar em código php. Foi só uma curiosidade mesmo.
Apesar do exemplo ser bastante antigo, eu gerei na versão mais recente do SC e continua funcionando normalmente.
OnApplicateionInit:
[iw] = new stdClass;
[iw]->ajax=sc_url_library('prj','apps','php/grid_dfrun_toggle_btn_ajax.php');
unset($_SESSION['grid_dfrun_toggle_btn']);
OnScriptInit:
sc_include_library('prj','BtnToggle','btntoggle.class.php');
$toggle = new BtnToggle();
$toggle->echoStyle('small', 'small_red','red', '0.6');
$toggle->echoStyle('small', 'small_blue','blue', '0.6');
$toggle->echoStyle('small', 'small_orange','orange', '0.6');
?>
<script src=<?php echo sc_url_library('prj','apps','js/grid_dfrun_toggle_btn.js');?> ></script>
<style>.scGridHeaderFont { color: #FFF !important; }</style>
<?php
OnRecord:
$seq={sc_seq_register};
$ajax=[iw]->ajax;
$toggle = new BtnToggle();
if ({valor} < 200) $color='red';
elseif ({valor} < 300) $color='orange';
else $color='blue';
if (isset($_SESSION['grid_dfrun_toggle_btn'][{id}]) && $_SESSION['grid_dfrun_toggle_btn'][{id}]) :
$checked='checked';
else:
$checked='';
endif;
{Check}= $toggle->generateTag('chk'.$seq,'small_'.$color,"jscheck('chk$seq', {id}, '$ajax',{valor});",$checked);
Botão PHP Processar
if (isset($_SESSION['grid_dfrun_toggle_btn'])):
ksort($_SESSION['grid_dfrun_toggle_btn']);
$_arr=$_SESSION['grid_dfrun_toggle_btn'];
foreach ($_arr as $key => $value)
{
if ($value != 1) { unset($_arr[$key]);}
else { $_arr[$key]='Checked'; }
}
echo '<pre>';
print_r($_arr);
echo '</pre>';
unset($_SESSION['grid_dfrun_toggle_btn']);
endif;
Download biblioteca apps btntoggle:
Depois que você disse para verificar o print, eu depurei e vi o que estava acontecendo. Fiz algumas melhorias aqui e mudei o seguinte:
Antes
foreach ($_arr as $key => $value)
{
if ($value != 1) { unset($_arr[$key]);}
else { $_arr[$key]=‘Checked’; }
}
Depois
foreach ($_arr as $key => $value) {
if ($value != 1) {
$_arr[$key];
} else {
$_arr[$key] = 'Checked';
}
}
No segundo código, eu removi o ‘unset’ porque ele estava excluindo elementos do array e perdendo os índices. Agora, eu apenas verifico os valores e altero os que são iguais a 1 para ‘Checked’, mantendo todos os elementos e seus índices originais.
Além disso, consegui tirar o botão de processar e usar um evento AJAX, o que deixou o processo automático, sem precisar que o usuário clique no botão para carregar as mudanças.
Obrigada pela ajuda sempre!!