2

我开始使用 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();
?>

但我想不需要提交表格吧?但是我在搜索中没有找到其他方式。不能只在按钮单击时更改页面吗?

谢谢

4

9 回答 9

10

表单按钮不应该用作简单的链接,无论如何,您创建按钮,然后添加一些 javascript 或 jQuery 以使其按贾斯汀所说的那样工作。(虽然我通常更喜欢在代码中使用外部 .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;
}
于 2012-11-21T11:22:49.197 回答
5

我在搜索类似问题时发现了这个问题。在我看来,最简单的方法是:

$this->Html->link($this->Form->button('Button'), array('action' => 'viewSomethin',$id), array('escape'=>false,'title' => "Click to view somethin"));

也许这对某人有用。

于 2013-12-06T10:32:10.383 回答
2

我认为您只需要稍后使用 css 设置样式的链接(假设您使用的是 Html 助手):

<?php 
echo $this->Html->link('Click Here', '/redirect/url', array('class' => 'button')); 
?>

在这里阅读更多:http: //book.cakephp.org/1.3/en/view/1442/link

于 2012-11-21T10:46:37.430 回答
2

您可以将 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'
    )
);
于 2015-07-24T08:38:46.460 回答
1

您可以使用

<?php echo $this->Html->link('ADD New One', '/controllername/functionname')?>
于 2012-11-21T10:50:04.107 回答
0

我也只是在寻找这个“问题”。但我对表单的按钮不满意,我只想在操作类中获得按钮:在此处输入图像描述

所以我为我找到了 2 个解决方案:

解决方案 1:使用 css 类“action”将按钮包装在 span 中

<span class="action">
    <?php
    echo $this->Html->link("Send Again", "url");
    ?>
</span>

css 类action已经在 cake.generic 样式表中表示。所以它将直接是一个不错的按钮。

解决方案 2:复制 css 样式.actions a

这个解决方案更像是对Alvaro解决方案的补充。我还不能发表评论,所以我必须为此做一个额外的回答。

所以,我没有使用 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

于 2015-04-30T11:52:43.617 回答
0

像下面这样的东西会为你工作

$this->Form->button('Home', 
      array('onclick' => "location.href='".$this->Html->url($url)."'")); 
于 2012-11-21T11:05:03.077 回答
0

我认为最好的解决方案是使用 postButton,例如:

echo $this->Form->postButton('Text Button', array('controller'=>'controllername','action'=>'action_to_do'));

您必须根据需要更改 'controllername' 和 'action_to_do'

于 2014-10-08T23:49:21.817 回答
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>
于 2016-05-17T20:20:58.310 回答