CakePHP:当用户从一页切换到另一页时,在布局上使用变量

CakePHP:当用户从一页切换到另一页时,在布局上使用变量,php,cakephp,layout,cakephp-1.3,Php,Cakephp,Layout,Cakephp 1.3,我已经设置了一个变量,这样就可以从控制器将值“current”传递到用户浏览的位置。它的工作很好,但我需要一个条件编程,以弥补其他网页。假设我浏览到页面类别,类别控制器将把变量$current传递给我的布局,但是出了问题,我们将有两个带有特殊id的链接,例如 <li id="<?php echo "$current";?>"><?php echo $this->Html->link('Home', '/'); ?></li> &

我已经设置了一个变量,这样就可以从控制器将值“current”传递到用户浏览的位置。它的工作很好,但我需要一个条件编程,以弥补其他网页。假设我浏览到页面类别,类别控制器将把变量$current传递给我的布局,但是出了问题,我们将有两个带有特殊id的链接,例如

<li id="<?php echo "$current";?>"><?php echo $this->Html->link('Home', '/'); ?></li>    
<li id="<?php echo "$current";?>"><?php echo $this->Html->link('Category', '/categories'); ?></li> 

我不确定CakePHP的具体细节,但您需要具备以下效果:

$current = 'category';  // in controller

if($current=='category') { echo 'current' } // in view
对于每个链接


如果它还没有内置

我不确定CakePHP的具体细节,但您需要具备以下效果:

$current = 'category';  // in controller

if($current=='category') { echo 'current' } // in view
对于每个链接


如果它还没有内置

我猜您是想构建一个菜单,其中菜单上的当前页面的样式不同?如果不是这样的话,那么我的答案将需要适应你的具体情况

如果是这样的话,那么Ross是非常正确的,尽管我可能会写得稍有不同,以符合我个人的审美观:

<li class="<?php ($current=='category') ? echo 'active' : echo 'inactive' ?>">

我猜你是在尝试构建一个菜单,其中菜单上的当前页面的样式不同?如果不是这样的话,那么我的答案将需要适应你的具体情况

如果是这样的话,那么Ross是非常正确的,尽管我可能会写得稍有不同,以符合我个人的审美观:

<li class="<?php ($current=='category') ? echo 'active' : echo 'inactive' ?>">

您是否正在尝试制作一个导航,可以自动知道用户在哪个页面上,并相应地突出显示导航(选项卡?)

如果是这样的话,那么我有一些想法给你

如果希望为所有控制器设置$current变量,则可能需要将其放入app_控制器中。您可能没有,默认情况下它不在cake部署中。您可以将其添加到CAKE_HOME/app/app_controller.php

看起来像

<?php
class AppController extends Controller {
  function beforeFilter() {
    $this->set('current', $this->name . '.' . $this->action);
  }
}
?>

另一种方法是,我在应用程序中不使用变量$current,而是使用内置变量$this->name(控制器名称)和$this->action(操作名称)



您是否正在尝试制作一个导航,可以自动知道用户在哪个页面上,并相应地突出显示导航(选项卡?)

如果是这样的话,那么我有一些想法给你

如果希望为所有控制器设置$current变量,则可能需要将其放入app_控制器中。您可能没有,默认情况下它不在cake部署中。您可以将其添加到CAKE_HOME/app/app_controller.php

看起来像

<?php
class AppController extends Controller {
  function beforeFilter() {
    $this->set('current', $this->name . '.' . $this->action);
  }
}
?>

另一种方法是,我在应用程序中不使用变量$current,而是使用内置变量$this->name(控制器名称)和$this->action(操作名称)



如果其他回复正确,即您试图在导航中突出显示当前页面,请查看以下帮助程序:

它扩展了内置链接帮助器,添加了两项功能:

-当链接是一个类时,它们应该自动向自己添加一个类) 指向同一目录中的资源 控制器和b)指向 他们自己

-能够显示/隐藏自己

助手工作得很好,我在几个项目中使用过它

响应更新

如果这是您的实际PHP,则会出现两个格式错误。此行无效:

<?php echo "<li id="current">";?>

您需要转义内部引号,如下所示:

<?php echo "<li id=\"current\">";?>

但是你的牙套也有点不正常。请尝试以下操作:

<?php 
if($current==NULL) {
    echo "<li id=\"current\">";
    echo $this->Html->link('Home', '/');
    echo "</li>";
}
else {
    echo "<li>";
    echo $this->Html->link('Home', '/');
    echo "</li>";
}
?>

更新2

正如在评论中提到的,我怀疑$current实际上从来都不是空的。在PHP中,空字符串不为NULL。我建议不要测试空值,而是测试空值

如果值为null、0、false、“”或空数组,则empty()函数将返回true。请看这里:

因此,您的代码变成:

<?php 
if(empty($current)) {
    echo "<li id=\"current\">";
    echo $this->Html->link('Home', '/');
    echo "</li>";
}
else {
    echo "<li>";
    echo $this->Html->link('Home', '/');
    echo "</li>";
}
?>

或者更好(简单地减少重复):


如果其他回复正确,您试图在导航中突出显示当前页面,请查看以下帮助程序:

它扩展了内置链接帮助器,添加了两项功能:

-当链接是一个类时,它们应该自动向自己添加一个类) 指向同一目录中的资源 控制器和b)指向 他们自己

-能够显示/隐藏自己

助手工作得很好,我在几个项目中使用过它

响应更新

如果这是您的实际PHP,则会出现两个格式错误。此行无效:

<?php echo "<li id="current">";?>

您需要转义内部引号,如下所示:

<?php echo "<li id=\"current\">";?>

但是你的牙套也有点不正常。请尝试以下操作:

<?php 
if($current==NULL) {
    echo "<li id=\"current\">";
    echo $this->Html->link('Home', '/');
    echo "</li>";
}
else {
    echo "<li>";
    echo $this->Html->link('Home', '/');
    echo "</li>";
}
?>

更新2

正如在评论中提到的,我怀疑$current实际上从来都不是空的。在PHP中,空字符串不为NULL。我建议不要测试空值,而是测试空值

如果值为null、0、false、“”或空数组,则empty()函数将返回true。请看这里:

因此,您的代码变成:

<?php 
if(empty($current)) {
    echo "<li id=\"current\">";
    echo $this->Html->link('Home', '/');
    echo "</li>";
}
else {
    echo "<li>";
    echo $this->Html->link('Home', '/');
    echo "</li>";
}
?>

或者更好(简单地减少重复):



您这样做是为了突出显示列表中的当前操作吗?如果是,则这可能有助于
$this->set('current',$this->params['controller']./'。$this->params['action'])$this->set('current