我正在尝试进行一些Toggle切换:当它关闭它会发送一些命令(IN1
),如果它在它上面将发送另一个命令(IN2
)
命令通过shell脚本发送
我正在使用的是这样一个按钮:
<?php
if ($_GET['IN1']) {
echo shell_exec("sudo sh /home/cubie/phpdemo/IN1.sh");
}
?>
<a href="?IN1=true">IN1</a>
但我发现了这个: http://www.w3schools.com/howto/howto_css_switch.asp
我想用它。但是我怎么能用Switch做同样的事情
IN1on
IN1off
===
一些编辑 好吧,现在我明白了。 我已经设置了
<link rel="stylesheet" type="text/css" href="style.css" />
<?php
function get_in1_status() {
return shell_exec('cat /sys/class/gpio/gpio19_pg7/value');
/* return (boolean) */ }
/* return TRUE if you object is active ; else return FALSE */
function set_all_off() {
shell_exec('java -cp /home/cubie/demo/ allinone 2');
}
function set_all_on() {
shell_exec('java -cp /home/cubie/demo/ allinone 1');
}
$current_value = get_in1_status();
?>
<label class="switch">
<input type="checkbox"
<?php echo ($current_value == true ) ? 'checked="checked"' : null; ?>
<?php
if( $current_value == true ) {
set_all_on();
}
else if($current_value == false){
set_all_off();
}
?>
>
<div class="slider round"></div>
</label>
答案 0 :(得分:1)
如果要显示切换按钮,则需要获取对象的当前值。 你有办法得到它吗?
<?php
function get_in1_status() { /* return (boolean) */ }
/* return TRUE if you object is active ; else return FALSE */
function set_in1_on() { shell_exec('sudo sh /home/cubie/phpdemo/IN1.sh'); }
$current_value = get_in1_status();
?>
<label class="switch">
<input type="checkbox" <?php echo ($current_value == true ) ? 'checked="checked"' : null; ?>>
<div class="slider round"></div>
</label>
在get_in1_status上,您可以调用另一个将返回服务状态的.sh代码。您可以将此值存储在文件或数据库上,也不会有任何其他内容可以使您获得true / false值。
问题:好的。对于当前值,我可以在其他文件中获取它 / SYS /类/ GPIO / gpio19_pg7 /值 在值中它将是0或1所以我该怎么做?我想执行一个 脚本如果关闭,另一个如果它开关。 - Anmar Mashat
当然可以:) 如果值在文件上,请尝试例如:
<?php function get_in1_status() {
return shell_exec('cat /sys/class/gpio/gpio19_pg7/value');
}
在PHP中,1等于true
(实际上, 0 , false 或 null 的任何值都是等于真)。
如果你想有一个明确的布尔值,可以强制$result = (boolean) 1;
,所以$result
将等于true
:)
如果您想要特定文字:
<?php
echo (get_in1_status() ? 'on': 'off'); // will return 'on' or 'off' value
echo (get_in1_status() == true ? 'on': 'off'); // Same. will return 'on' or 'off' value
echo get_in1_status(); // will return the content on the value
echo (boolean) get_in1_status(); // will return 1 or 0
if( get_in1_status() ) {
// if yes
}
else {
// if no
}
?>
现在,你只需要选择。
基于你的工作:差不多:)但是开关的逻辑是不正确的。您需要检查值并使用事件更改它(例如:通过_GET捕获页面刷新,值)
请参阅:
如果代码不起作用,请尝试在get in1_status函数中注释第一个返回并取消注释第二个:) 如果它还没有工作......尝试另一个shell命令。什么是
value
?一份文件 ?一个程序?使用cat / echo或直接执行该行。
您的职能:
<?php
function get_in1_status() {
return shell_exec('cat /sys/class/gpio/gpio19_pg7/value');
//return file_get_contents('/sys/class/gpio/gpio19_pg7/value'); // solution 2
}
function set_all_off() {
shell_exec('java -cp /home/cubie/demo/ allinone 2');
}
function set_all_on() {
shell_exec('java -cp /home/cubie/demo/ allinone 1');
}
现在,活动。我抓到了一个&#39; in1&#39; _GET参数,我运行切换逻辑。 更多php代码:
<?php
// change the value
if( isset($_GET['in1']) ) { // if url contains 'in1' parameter
switch($_GET['in1']) {
case 'on': // ?in1=on
set_all_off();
break;
case 'off': // ?in1=off
set_all_on();
break;
default: // ?in1 or ?in1=anything_else
if( get_in1_status() )
set_all_off(); // if true=on -> switch off
else
set_all_on(); // if true=off -> switch ofn
break;
}
}
// get the current value
$current_value = get_in1_status();
?>
HTML :(这是一个示例。我在这里使用<a />
元素。提示:提交表单以更改值或使用ajax动态执行此操作)< / p>
<a href="?in1">
Default (switch):
<label class="switch">
<input type="checkbox" <?php echo ($current_value) ? 'checked="checked"' : null; ?> />
<div class="slider round"></div>
</label>
</a>
<br />
<a href="?ini=on">On</a> <a href="?ini=off">On</a>
(未经过测试的代码)