我正在尝试为页面实现分页功能。我有自定义帖子类型,我已经循环并收集了此页面的所有帖子。我显示第一个帖子并隐藏其余的帖子,我有下一个/上一个按钮,将显示下一个帖子并隐藏当前帖子。它似乎工作,但我无法查看所有帖子 - 只有2个。
这是我的代码:
<?php
$currProj = 1;
$countposts = 3;
?>
<?php if ($countposts>1) {
$prevID = $currProj - 1;
if ($prevID <= 0) {
$prevID = $countposts;
?>
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
<?php } else {
?>
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
<?php
//$currProj = $prevID;
}
echo $currProj; //This outputs 3 where it should be 1
$nextID = $currProj + 1;
if ($nextID > $countposts) {
$nextID = 1;
?>
<a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a>
<?php } else {
?>
<a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a>
<?php
//$currProj = $nextID;
}
} ?>
javascript函数工作正常,问题似乎是$ currProj变量。我认为问题是我的标签中的onClick属性 - 是否有更好的方法来使onClick事件给我的变量一个不同的值?或者检查是否已单击此链接的方法然后为currProj提供prevID / nextID的值?
我已经被困在这一段时间了,我似乎没有到达任何地方。任何帮助将不胜感激。
答案 0 :(得分:0)
如何创建用于存储这些值的HTML隐藏输入?
<input type="hidden" value="<?php echo $currProj ?>" id="currProj">
因此,您可以使用javascript或jQuery访问它并在客户端修改它。如果您需要服务器端解决方案,可以使用ajax和POST或GET请求来执行此操作。
也许这不是你想要的(修改php属性),我误解了你。如果这是你的情况,请告诉我。
答案 1 :(得分:0)
上面的代码似乎混淆了服务器端发生的事情以及客户端发生的事情。包含在<?php
... ?>
中的任何内容都将在服务器上执行,然后以HTML格式发送到客户端 - 例如,此行:
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
将最终被发送到客户端并解释所有PHP:
<a class="btn-previous" href="javascript:showProject(1,3)" onclick=""> < Previous </a>
这里的关键是,当你点击时,你不重新运行PHP - 客户端完全不知道PHP曾经在那里。每次单击“上一步”按钮时,其href
属性仍为javascript:showProject(1,3)
。
你有两种选择;也就是说,你可以回到服务器,只要你点击下一个/上一个按钮就可以重新渲染页面,方法是将这些变量作为参数包含在你的页面中,例如,从URL获取当前项目并链接如下: / p>
$currProj = ( $_REQUEST['currProj'] ? $_REQUEST['currProj'] : 1 );
...
<a class="btn-previous" href="<?php echo '[your_url_here]?currProj=' . $prevID ?>">
但是,看起来你有兴趣这样做,而不必再次ping服务器。在这种情况下,您需要在javascript中存储,引用和更新这些变量。可能有一千种方法可以做到这一点;关闭你似乎想做的事情就是让你的showProject
函数不带参数,而是根据当前项目的值找出它需要做什么,比如
var currProj = <?php echo $currProj; ?>; // this initializes the JS variable currProj from whatever it is in PHP when the server sends the page contents
var countposts = <?php echo $countposts; ?>; // initialize this too
var showPrevProject = function showPrevProject() {
// hide the current project using jQuery; assumes the DOM element you want to hide is given ID #project-[currProj]
$('#project-' + currProj).hide();
// Update the current project variable in JS; scope should update globally
currProj = currProj - 1;
if (currProj === 0) { currProj = countposts; }
// Now show that element
$('#project-' + currProj).show();
}
然后,在您的链接中,您可以根据需要使用showNextProject
或showPrevProject
。
更一般地说,将javascript作为单独的文件包含在内并注册事件处理程序来处理这类事情可能更好。我还建议检查jQuery,这是一个功能强大的库,可以大大简化访问和操作DOM元素。