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