2014-10-27 86 views
0

我正在运行CakePHP 2.5.X,我们有CMS设置可以在管理员中创建页面,然后关联到导航。我还添加了将页面设置为链接的选项,因此我们没有重复的内容/页面。我们发现如果我们创建一个页面(A)作为父页面,另一个父页面(B)就会有一个子页面(C),其父页面的内容为A,然后创建同一个页面(D)内容反而使导航系统知道,使这个链接C.设置URL变量Jquery ajax POST php会话来确定活动页面

示例HTML:

<ul class="nav"> 
    <li data-id="1"><a href="/a">A 
     <ul> 
      <li data-id="2" parent-page="1"><a href="/c">C</li> 
     </ul> 
    </li> 
    <li data-id="3"><a href="/b">B 
     <ul> 
      <li data-id="4" parent-page="3"><a href="/c">D</li> 
     </ul> 
    </li> 
</ul> 

问题,点击d,当你再发送到网页C,其然后将父页面A设置为活动的。为了防止这种情况并确保B和D保持活动链接(class =“active”),我使用jquery和ajax发布到php脚本,然后将页面id写入我可以阅读的会话页面加载并将适当的页面设置为活动状态。但它似乎并不奏效。在铬我没有问题,它的FireFox,IE浏览器,Safari等给我的问题。本质上它不起作用或者只是部分工作。

$("ul.child li a").click(function() { 
    $.ajax({ 
     type: 'POST', 
     url: "https://stackoverflow.com/users/setSession/", 
     data : { 
      current_page_id: $(this).parent().attr('data-id'), 
      page_parent_id: $(this).parent().attr('page-parent') 
     } 
    }).done(function(msg) { 
    <?php if ($this->Session->check('User.User.id') == 1) { ?> 
     alert(msg); 
    <? } ?> 
    }); 
}); 

有没有人有任何想法或其他解决方案?

回答

0

最后,我们决定简单地重复使用不同名称的页面,只做一个无索引。可惜我们无法在任何浏览器中使用此功能,只能使用Chrome浏览器。

0

您可以尝试以下解决方案。在current_page_id和parent_page_id上​​附加一个class =“active”。

$("ul.child li a").click(function(e) { 
e.preventDefault() //preventing the anchor clicked event 
$.ajax({ 
    type: 'POST', 
    url: "https://stackoverflow.com/users/setSession/", 
    data : { 
     current_page_id: $(this).parent().attr('data-id'), 
     parent_page_id: $(this).parent().attr('parent-page') //changed_by_me 
    } 
}).done(function(msg) { 
    ///////////////Added following lines//////////////// 
    var activeLi = $('ul.nav').find('li[data-id="'+current_page_id+'"]'); 
    activeLi.addClass('active').closest('li[data-id="'+parent_page_id+'"]').addClass('active'); 
    //$('ul.nav').find('li[data-id="'+parent_page_id+'"]').addClass('active'); 

<?php if ($this->Session->check('User.User.id') == 1) { ?> 
    alert(msg); 
<? } ?> 
}); 
}); 
+0

一旦链接被点击,页面重定向。因此,一旦ajax调用完成,将活动类分配给li项目将毫无意义,因为页面会重新加载,并且这些更改将会丢失。 – 2014-10-27 20:25:07