كيفية إضافة فئة نشطة لعنصر li في cakephp header.ctp

0

لديّ رأس يعرض روابط الصفحة عبر <li> و <a> العلامات.

هنا جزء من الرأس:

 <div class="collapse navbar-collapse" id="main-navbar">
              <ul class="navbar-nav mr-auto">
              <li class="nav-item">
                <a class="nav-link" href="/">
                  Home
                </a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="items">
                  Explore
                </a>
              </li>
             </ul>
 </div>

كيف يمكنني تعيين فئة <li> التي تنتمي إلى الارتباط النشط للنشط؟ لديّ رمز في مكان آخر في مشروعي يعيّن رابطًا نشطًا ، ولكن يتم تعيينه من مصفوفة ولا يمكنني معرفة كيفية تطبيقه هنا.

هذا هو الرمز الذي يعمل من صفحة أخرى:

           <?php
              foreach ($categories as $category_side){
            $cat_class = '';
            if (isset($active_category) && ($active_category==$category_side['Category']['id'])){
              $cat_class = 'active';
            }
            ?>
          <li>
            <a href="/categories/view/<?php echo $category_side['Category']['id']; ?>" class="category-item <?php echo $cat_class; ?>">

              <?php echo $category_side['Category']['name_'.$txt_lang]; ?>
                                  </a>
          </li>
        <?php } ?>

لقد وجدت هذه كيفية إضافة فئة نشطة في الصفحة الحالية في CakePhp ولكن لا يمكنني معرفة كيفية تطبيقها على الكتلة الأولى من التعليمات البرمجية أعلاه.

كيف يمكنني تحويل الكتلة الأولى من التعليمات البرمجية أعلاه ، باستخدام وظائف PHP أو CakePHP بحيث تكون القائمة النشطة <li> تم تعيين الفئة إلى "نشط".

المحلول

بعد إجابة Sehdev أدناه (الإجابة المقبولة) ، تمكنت من إنشاء حل لتعيين الفئة النشطة ، إلى الارتباط التشعبي النشط في قائمة الرأس.

لم تكن وحدة التحكم والإجراء معًا كافية ، لأن بعض الصفحات مرتبطة بنفس وحدة التحكم والإجراء ، ولكنها كانت في الواقع طرق عرض مختلفة.

كان الحل هو استخدام $ this-> هنا لاستخراج عنوان url الحالي ، كما يلي:

(تم اختباره في CakePHP 2.9.1)

<?php
$activeurl = $this->here;
?>

<ul class="navbar-nav mr-auto">
  <li class="nav-item <?php echo (!empty($activeurl) && ($activeurl == '/'))?'active' :'inactive' ?>">
       <a class="nav-link" href="/">
         Home
       </a>
  </li>
  <li class="nav-item <?php echo (!empty($activeurl) && ($activeurl == '/items'))?'active' :'inactive' ?>">
       <a class="nav-link" href="/items">
        Explore
       </a>
  </li>
</ul>

2 الاجابة

1
افضل جواب

بالنسبة لإصدار Cakephp أدناه 3.4.0

يمكنك استخدام $this->request->param . يحتوي هذا الكائن على جميع المعلمات المطلوبة مثل وحدة التحكم الحالية والإجراء وما إلى ذلك.

إذا كنت ترغب في استخدام وحدة تحكم الصفحة الحالية والإجراء يمكنك استخدام التعليمات البرمجية التالية.

$controller = $this->request->param['controller'];
$action = $this->request->param['action'];

لذلك إذا كانت وحدة التحكم الخاصة بك هي المستخدمين وكان الإجراء عنصرًا ، فيمكنك استخدامه

<li class="nav-item <?php echo (!empty($this->request->param['action']) && ($this->param['action']=='item') )?'active' :'inactive' ?>">
                <a class="nav-link" href="items">
                  Explore
                </a>
              </li>

بالنسبة للإصدار Cakephp أعلاه 3.4.0 ، يمكنك استخدامه

$controllerName = $this->request->getParam('controller');

لإصدار Cakephp 2.x

$controller = $this->request->params['controller'];
:مؤلف
0

يكشف الطلب معلمات التوجيه

إذا كنت تستخدم الإصدار Cakephp أعلاه 3.5.0

$action = $this->request->getParam('action'); // Use to get action name

$controller =$this->request->getParam('controller'); //  Use to get controller name

<?php $active_class = ( in_array($action, ['dashboard']) && 
  $controller=='Users')?"class='active'":''; ?>

<li class="nav-item <?php echo $active_class; ?>">
    <a class="nav-link" href="items">
       Explore
    </a>
</li>

إذا كنت تستخدم إصدار Cakephp أدناه 3.4.0

$controllerName = $this->request->params['controller'] or $this->request->param('controller');
$actionName = $this->request->params['action'] or $this->request->param('action');

<?php $active_class = ( in_array($actionName, array('dashboard')) && $controllerName=='users')?"class='active'":''; ?>

<li class="nav-item <?php echo $active_class; ?>">
    <a class="nav-link" href="items">
      Explore
    </a>
</li>
:مؤلف
فوق
قائمة طعام