2011-12-20 118 views
0

我有类别名单,有些人子类,部分细分子类别它们以这样的方式:如何使用ddaccordian.init保持当前类别选项卡保持打开状态?

Main menu 
    sub menu 
     sub menu 

我用ddaccordian.init看开放关闭事件。所有的工作都很好,但现在我想要的是当前选定的URL类别必须保持打开状态。

我曾尝试下面的代码:

<script type="text/javascript"> 
ddaccordion.init({ 
    headerclass: "question", //Shared CSS class name of headers group 
    contentclass: "theanswer", //Shared CSS class name of contents group 
    revealtype: "click", //Reveal content when user clicks or onmouseover the header? Valid value: "click", "clickgo", or "mouseover" 
    mouseoverdelay: 200, //if revealtype="mouseover", set delay in milliseconds before header expands onMouseover 
    collapseprev: false, //Collapse previous content (so only one open at any time)? true/false 
    defaultexpanded: [], //index of content(s) open by default [index1, index2, etc]. [] denotes no content. 
    onemustopen: false, //Specify whether at least one header should be open always (so never all headers closed) 
    animatedefault: false, //Should contents open by default be animated into view? 
    persiststate: false, //persist state of opened contents within browser session? 
    toggleclass: ["closedanswer", "openanswer"], //Two CSS classes to be applied to the header when it's collapsed and expanded, respectively ["class1", "class2"] 
    //togglehtml: ["prefix", "<img src='images/plus.gif' /> ", "<img src='images/minus.gif' />"], //Additional HTML added to the header when it's collapsed and expanded, respectively ["position", "html1", "html2"] (see docs) 
    animatespeed: "fast", //speed of animation: integer in milliseconds (ie: 200), or keywords "fast", "normal", or "slow" 
    oninit:function(expandedindices){ //custom code to run when headers have initalized 
     //do nothing 
    }, 
    onopenclose:function(header, index, state, isuseractivated){ //custom code to run whenever a header is opened or closed 
     //do nothing 
    } 
}) 
</script> 

,并获得当前类别激活即必须保持开放我这样做:

<a <?php if($_category->hasChildren()): ?>class="question"<?php endif; ?><?php if ($currentUrl == $this->getCategoryUrl($_category)): ?> class="current"<?php endif; ?> href="<?php echo $this->getCategoryUrl($_category) ?>"> 
    <?php echo $_category['name']; ?> 
</a> 

<?php $potential1 = $_category->hasChildren(); ?> 
<?php if($_category->hasChildren()): ?> 
    <?php $_category = Mage::getModel('catalog/category')->load($_category->getId()) ?> 
    <?php $_subcategories = $_category->getChildrenCategories() ?> 
    <ul <?php if($_subcategories): ?>class="theanswer"<?php endif; ?>> 
    <?php foreach($_subcategories as $subcat): ?> 
     <li> 
      <a <?php if($subcat->hasChildren()): ?>class="question"<?php endif; ?><?php if ($currentUrl == $this->getCategoryUrl($subcat)): ?> class="current"<?php endif; ?> href="<?php echo $this->getCategoryUrl($subcat); ?>"> 
       <?php echo $subcat->getName(); ?> 
      </a> 
      <?php if($subcat->hasChildren()): ?> 
      <?php 
       $_subcat = Mage::getModel('catalog/category')->load($subcat->getId()); 
       $childrens = $_subcat->getChildrenCategories(); 
      ?> 
      <ul <?php if($childrens): ?>class="theanswer"<?php endif; ?>> 
      <?php foreach($childrens as $_childrens): ?> 
       <li> 
        <a <?php if ($currentUrl == $this->getCategoryUrl($_childrens)): ?> class="current"<?php endif; ?>href="<?php echo $this->getCategoryUrl($_childrens); ?>"> 
         <?php echo $_childrens->getName(); ?> 
        </a> 
       </li> 
      <?php endforeach; ?> 
      </ul> 
      <?php endif ?> 
     </li> 
    <?php endforeach ?> 
    </ul> 
<?php endif ?> 
</li> 

但我得到的前端没有反应:(没关系,如果你认为我错过了一个foreach循环等
我刚刚粘贴了一部分代码,所以告诉我我错在哪里:(
虽然我得到当前的URL相关ctly。

回答

0

这解决了我的问题,我所做的就是加入这个 <?php if ($this->isCategoryActive($_category)): ?> 代替 if($currentUrl == $this->getCategoryUrl($_category)): ?>并在底部添加CSS类。

<div class="content-links"> 
           <ul> 
        <?php $i=0; foreach ($catlist as $_category): ?> 
         <?php if($_category->getIsActive()): ?> 

          <li> 

           <a <?php if($_category->hasChildren()): ?>class="question"<?php endif; ?> href="<?php echo $this->getCategoryUrl($_category) ?>"> 
            <?php echo $_category['name']; ?> 
           </a> 

              <?php $potential1 = $_category->hasChildren(); ?> 

            <?php if($_category->hasChildren()): ?> 

             <?php $_category = Mage::getModel('catalog/category')->load($_category->getId()) ?> 
             <?php $_subcategories = $_category->getChildrenCategories() ?> 
             <ul class="<?php if($_subcategories): ?>theanswer<?php endif; ?><?php //if($currentUrl == $this->getCategoryUrl($_category)): ?><?php if ($this->isCategoryActive($_category)): ?> opened<?php endif; ?>"> 

              <?php foreach($_subcategories as $subcat): ?> 


               <li> 
               <a <?php if($subcat->hasChildren()): ?>class="question"<?php endif; ?> href="<?php echo $this->getCategoryUrl($subcat); ?>"> 
                <?php echo $subcat->getName(); ?> 
               </a> 
               <?php if($subcat->hasChildren()): ?> 

                <?php 
                 $_subcat = Mage::getModel('catalog/category')->load($subcat->getId()); 
                 $childrens = $_subcat->getChildrenCategories(); 
                ?> 
                 <ul class="<?php if($childrens): ?>theanswer<?php endif; ?><?php if ($this->isCategoryActive($_subcat)): ?> opened<?php endif; ?>"> 
                <?php foreach($childrens as $_childrens): 
                ?> 
                 <li> 
                  <a <?php if ($currentUrl == $this->getCategoryUrl($_childrens)): ?>class="current"<?php endif; ?>href="<?php echo $this->getCategoryUrl($_childrens); ?>"> 
                   <?php echo $_childrens->getName(); ?> 
                  </a> 
                 </li> 
                <?php 
                 endforeach; 
                 echo "</ul>"; 
                ?> 
               <?php endif ?> 
               </li> 

              <?php endforeach ?> 
             </ul> 

            <?php endif ?> 
          </li> 
         <?php endif ?> 
        <?php endforeach ?> 
           </ul> 
          </div> 
          </div> 

          <div class="clear" style="height:218px;"></div> 
         </div> 
        </div> 
        <div class="event-bot"></div> 
       </div> 

      </div> <!--inner right end here--> 
<style type="text/css"> 
.opened { display:block !important;} 
</style> 
0

您选择的手风琴插件似乎没有选项可以让某个部分保持打开状态,因此您必须自行拦截并停止该部分。它提供的唯一可能的事件是onopenclose,但在slideUp已完成后称为,这是无用的。

你应该选择另一个满足你的需求的插件。


幸运的Magento已经自带了样机和它自己的手风琴类,你可以更换或wrapsectionClicked方法有停止的事件。

Accordion.prototype.sectionClicked = function(event) { 
    var element = $(Event.element(event)).up('.section'); 
    if (!element.hasClassName('current')) { 
     this.openSection(element); 
    } 
    Event.stop(event); 
};