我正在运行CakePHP 2.5.X,我们有CMS设置,可以在管理员中创建页面,然后与导航相关联。我还添加了将页面设置为链接的选项,因此我们没有重复的内容/页面。我们发现问题是,如果我们创建一个页面(A)作为父页面,另一个父页面(B)然后有一个子页面(C),其内容与它的父项为A,然后创建同一页面(D),没有内容但设置了一个URL变量,以便导航系统知道这是一个指向C的链接。
示例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写入我可以阅读的会话页面加载并将相应的页面设置为活动。但它似乎不起作用。在Chrome中我没有问题,它的FireFox,IE,Safari等给我带来了问题。基本上它不起作用或只是部分起作用。
$("ul.child li a").click(function() {
$.ajax({
type: 'POST',
url: "/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 :(得分: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: "/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);
<? } ?>
});
});
答案 1 :(得分:0)
最后,我们决定只使用不同名称的重复页面,只做一个无索引。遗憾的是,除了Chrome之外,我们无法在任何浏览器中使用它。