9

管理サイドバーのアコーディオンレイアウトを作成しています。次に、アクティブなリンクを識別し、そのリンクにクラスを追加する必要がありますactive。これが私のコードです:

<div class="accordion-group">
<div class="accordion-heading">
    <a href="#collapseSeven" data-parent="#side_accordion" data-toggle="collapse" class="accordion-toggle">
        <i class="icon-th"></i> Gallery Manager
    </a>
</div>
<div class="accordion-body collapse" id="collapseSeven">
    <div class="accordion-inner">
        <ul class="nav nav-list">
            <li>
                <?php echo $this->Html->link('View All',array('controller' => 'gallaries', 'action' => 'index'));?>
            </li>
            <li>
                <?php echo $this->Html->link('Add New',array('controller' => 'gallaries', 'action' => 'add'));?>
            </li>
        </ul>
        </div>
    </div>
</div>

これを行うための最良の方法は何ですか?前もって感謝します!

4

5 に答える 5

5

私は解決策を見つけました:

$url = $this->Html->url('INPUT_THE_URL') ;
$active = $this->request->here == $url? true: false;
于 2012-08-20T10:49:14.207 に答える
3

特定のURLがCakephp2.xで現在アクティブであるかどうかを確認するには、正規化された形式(Router :: normalize()の意味で)が現在要求されているURLの正規化された形式(意味で)と同じかどうかを確認する必要がありますの$this->request->here)。

$currentUrl = Router::normalize($this->request->here);
$checkedUrl = Router::normalize($myUrl);
$isActive = $currentUrl === $checkedUrl;

子が現在表示されている場合、メニューでアクティブとしてページを表示するために、緩いマッチングが必要になる場合があります。/fruits/でバナナの詳細サイトを閲覧しているときに、果物の概要サイトへのメニューリンクをアクティブとして表示したいとします/fruits/banana/。これは、部分一致のみを探すことで簡単に実現できます。

$isActive = (0 === strpos($currentUrl, $checkedUrl));

たとえば、名前付きパラメータなどを多用してメニューに反映させたい場合など、マッチングがより複雑になる可能性がありますが、ここから方法を見つける必要があります。

特定の問題の解決策は次のようになります。

$currentUrl = Router::normalize($this->request->here);
$links = array(
    array(
        'label' => __('View All'),
        'url' => array('controller' => 'galleries', 'action' => 'index'),
    ),
    array(
        'label' => __('Add New'),
        'url' => array('controller' => 'galleries', 'action' => 'add'),
    ),
    /* ... */
);

foreach ($links as $link) {
    $linkLabel = $link['label'];
    $linkUrl = Router::url($link['url']);
    $linkHtml = $this->Html->link($linkLabel, $linkUrl);

    $linkActive = $currentUrl === $linkUrl;

    echo $this->Html->tag('li', $linkHtml, array(
        'class' => $linkActive ? 'active' : '',
        'escape' => false, // to not escape anchor markup
    ));
}

この質問についても考えずにライブを少しだけ簡単にするために、他の誰かがtorifat/cake-menu_builderのように作成したメニュー作成のヘルパーを使用することもできます。

于 2015-02-19T20:51:00.813 に答える
2

いくつかの方法がありますが、ここにクラスをコンテナに追加するためのいくつかの方法があります

<li <?php echo ($url == 'users/account')? 'class="current"' : ''?>>
<li <?php echo (preg_match("/addresses/", $url))? 'class="current"' : ''?>>
<li <?php echo ($this->params['controller'] == 'attributes')? 'class="current"' : ''?>>

またはあなたはそれをに渡すことができます$options

$options = array();
if($this->controller == 'mycontroller' && $this->action == 'myaction'){
  $options = array_merge($options, array('class'=>'active'));
}
echo $this->Html->link('Title', '/url', $options);
于 2012-07-30T08:39:47.487 に答える
1

アクティブクラスを追加する簡単な方法は次のとおりです。

<ul class="nav nav-list">
    <li class="<?php echo (($this->params['controller']==='gallaries')&&($this->params['action']=='index') )?'active' :'' ?>">
            <?php echo $this->Html->link('View All',array('controller' => 'gallaries', 'action' => 'index'));?>
    </li>
    <li class="<?php echo (($this->params['controller']==='gallaries')&& ($this->params['action']=='add') )?'active' :'' ?>">
            <?php echo $this->Html->link('Add New',array('controller' => 'gallaries', 'action' => 'add'));?>
    </li>
</ul>

これはあなたに役立つと思います。

于 2014-05-17T04:48:08.433 に答える
1

私はこれがかなり古いことを知っていますが、私は良い解決策を見つけました。

ファイサルの答えに基づいて、私は自分の簡単なヘルパーを書きました:

App::uses('AppHelper', 'View/AppHelper');

class PVHtmlHelper extends AppHelper {

    public $helpers = array('Html');

    public function link($title = null, $url = null, $options) {

        if ($title == null || $url == null)
            return;

        $class = (($this->params['controller']===$url['controller']) && ($this->params['action']==$url['action']) )?'active' :'';

        echo "<li class='" . $class . "'>" . $this->Html->link($title, $url, $options) . "</li>";
    }

}

echo <li>必要に応じて、関数の内部を変更する必要があるかもしれません。

例:

echo $this->PVHtml->link('Login', array('controller' => 'users', 'action' => 'login'));
于 2015-08-07T09:47:59.963 に答える