我开始使用cakephp,我在构建以下内容时遇到了一些问题: 我希望我的应用程序的主页有4个简单的按钮,重定向到不同的创建视图。我怎么能这样做?
我试过了:
<?php
echo $this->Form->create('Post');
echo $this->Form->button('Redirect1', array('type'=>'button'));
echo $this->Form->button('Redirect1', array('type'=>'button'));
echo $this->Form->button('Redirect1', array('type'=>'button'));
echo $this->Form->end();
?>
但我想是不需要提交表格对吗?但是我在搜索中没有找到其他方式。是不是只能更改按钮点击页面?
谢谢
答案 0 :(得分:8)
表单按钮不应该用作简单的链接,无论如何,你创建按钮,然后添加一些javascript或jQuery,使它像Justin所说的那样工作。 (虽然我通常更喜欢使用带代码的外部.js文件)
另一种选择是为链接添加一种样式,使其具有按钮的外观,例如:
echo $this->Html->link("Demo", array('controller' => 'yourcontroller','action'=> 'youraction', $possibleParameter), array( 'class' => 'button'))
其中按钮可以定义为:
a.button {
color: #6e6e6e;
font: bold 12px Helvetica, Arial, sans-serif;
text-decoration: none;
padding: 7px 12px;
position: relative;
display: inline-block;
text-shadow: 0 1px 0 #fff;
-webkit-transition: border-color .218s;
-moz-transition: border .218s;
-o-transition: border-color .218s;
transition: border-color .218s;
background: #f3f3f3;
background: -webkit-gradient(linear,0% 40%,0% 70%,from(#F5F5F5),to(#F1F1F1));
background: -moz-linear-gradient(linear,0% 40%,0% 70%,from(#F5F5F5),to(#F1F1F1));
border: solid 1px #dcdcdc;
border-radius: 2px;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
margin-right: 20px;
cursor:pointer;
}
a.button:hover{
color: #333;
border-color: #999;
-moz-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.2);
-webkit-box-shadow:0 2px 5px rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}
a.button:active {
color: #000;
border-color: #444;
}
答案 1 :(得分:5)
我在搜索类似问题时发现了这个问题。在我看来,最简单的方法是:
$this->Html->link($this->Form->button('Button'), array('action' => 'viewSomethin',$id), array('escape'=>false,'title' => "Click to view somethin"));
也许这对某人有用。
答案 2 :(得分:2)
我认为您只需要稍后使用css设置样式的链接(假设您使用的是Html帮助程序):
<?php
echo $this->Html->link('Click Here', '/redirect/url', array('class' => 'button'));
?>
答案 3 :(得分:1)
你可以使用
<?php echo $this->Html->link('ADD New One', '/controllername/functionname')?>
答案 4 :(得分:1)
您可以为链接添加Html规则属性。此规则将链接设置为按钮。
echo $this->Html->link('Blogs',
array('action' => 'add'),
array(
'bootstrap-type' => 'primary',
'class' => 'btn btn-lg btn-primary btn-block',
// transform link to a button
'rule' => 'button'
)
);
答案 5 :(得分:0)
下面的内容对您有用
$this->Form->button('Home',
array('onclick' => "location.href='".$this->Html->url($url)."'"));
答案 6 :(得分:0)
我认为最好的解决方案是使用postButton,例如:
echo $this->Form->postButton('Text Button', array('controller'=>'controllername','action'=>'action_to_do'));
您必须根据需要更改“controllername”和“action_to_do”
答案 7 :(得分:0)
我也只是在考虑这个&#34;问题&#34;。但是我对表单的按钮感到不满意,我只想获得动作类中的按钮:
所以我找到了两个解决方案:
解决方案1:使用css类&#34;动作&#34;
在一个范围内包裹按钮<span class="action">
<?php
echo $this->Html->link("Send Again", "url");
?>
</span>
css类action
已经在cake.generic样式表中。所以这将是一个很好的按钮。
解决方案2:复制.actions a
这个解决方案更像是Alvaro's one的补充。我还不能评论,所以我必须为此做一个额外的答案。
所以,我没有使用Alvaro的css,因为它们用于表单按钮,与原始按钮略有不同。所以我只是在原始.action a
中搜索了cake.generic.css
的样式,并将它们复制到我自己的css文件中,并将选择器更改为a.button
。
然后现在你可以用它来生成没有任何包装器的按钮:
<?php echo $this->Html->link("Send Again, "url", ["class" => "button"]) ?>
CakePHP 版本 2.6.2 的css:
a.button {
font-weight: normal;
padding: 4px 8px;
background: #dcdcdc;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#dcdcdc));
background-image: -webkit-linear-gradient(top, #fefefe, #dcdcdc);
background-image: -moz-linear-gradient(top, #fefefe, #dcdcdc);
background-image: -ms-linear-gradient(top, #fefefe, #dcdcdc);
background-image: -o-linear-gradient(top, #fefefe, #dcdcdc);
background-image: linear-gradient(top, #fefefe, #dcdcdc);
color: #333;
border: 1px solid #bbb;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
text-decoration: none;
text-shadow: #fff 0px 1px 0px;
min-width: 0;
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
-webkit-user-select: none;
user-select: none;
}
a.button:hover {
background: #ededed;
border-color: #acacac;
text-decoration: none;
}
a.button:active {
background: #eee;
background-image: -webkit-gradient(linear, left top, left bottom, from(#dfdfdf), to(#eee));
background-image: -webkit-linear-gradient(top, #dfdfdf, #eee);
background-image: -moz-linear-gradient(top, #dfdfdf, #eee);
background-image: -ms-linear-gradient(top, #dfdfdf, #eee);
background-image: -o-linear-gradient(top, #dfdfdf, #eee);
background-image: linear-gradient(top, #dfdfdf, #eee);
text-shadow: #eee 0px 1px 0px;
-moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
border-color: #aaa;
text-decoration: none;
}
希望在提出问题三年后帮助他们。 :d
答案 8 :(得分:0)
对于CakePHP 2.X
<button id="create_task_groups" onclick="window.location.href='<?php echo $this->Html>url(array('plugin'=>'task_calendar', 'controller'=>'task_groups', 'action'=>'add'))?>'"> Create Task Group</button>