Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调整php函数,使其以:-'/小部件?pg=2';而不是';products.php?cat=20&;pg=2';_Php_.htaccess_Seo_Function - Fatal编程技术网

调整php函数,使其以:-'/小部件?pg=2';而不是';products.php?cat=20&;pg=2';

调整php函数,使其以:-'/小部件?pg=2';而不是';products.php?cat=20&;pg=2';,php,.htaccess,seo,function,Php,.htaccess,Seo,Function,我添加了以下.htaccess规则:- RewriteRule ^widgets$ products.php?cat=20 [QSA] 现在我有一个简单的链接叫做“widgets”,它指向“widgets”类别的第一页。但是,第2页的链接如下所示:- products.php?cat=20&pg=2 我希望后面的几页采用以下形式:- widgets?pg=2 上面.htaccess规则中的QSA标志确实实现了这一点,但我需要更改生成这些页面链接的函数,否则进入widgets?pg=

我添加了以下.htaccess规则:-

RewriteRule ^widgets$ products.php?cat=20 [QSA]
现在我有一个简单的链接叫做“widgets”,它指向“widgets”类别的第一页。但是,第2页的链接如下所示:-

products.php?cat=20&pg=2
我希望后面的几页采用以下形式:-

widgets?pg=2
上面.htaccess规则中的QSA标志确实实现了这一点,但我需要更改生成这些页面链接的函数,否则进入
widgets?pg=2
的唯一方法是在浏览器地址栏中键入它:-
mywebsite.com/widgets?pg=2

我认为下面的PHP函数可能需要调整,以实现我想要的结果。任何PHP向导或具有适当知识的人都可以提供帮助。我之所以要这样做,是因为我希望谷歌为外观简单的页面编制索引,而不是较长的页面:-

function writepagebar($CurPage,$iNumPages,$sprev,$snext,$sLink,$nofirstpage){
    $startPage = max(1,round(floor((double)$CurPage/10.0)*10));
    $endPage = min($iNumPages,round(floor((double)$CurPage/10.0)*10)+10);
    if($CurPage > 1)
        $sStr = $sLink . '1' . '" rel="prev"><span style="font-family:Verdana;font-weight:bold">&laquo;</span></a> ' . $sLink . ($CurPage-1) . '">'.$sprev.'</a> | ';
    else
        $sStr = '<span style="font-family:Verdana;font-weight:bold">&laquo;</span> '.$sprev.' | ';
    for($i=$startPage;$i <= $endPage; $i++){
        if($i==$CurPage)
            $sStr .= '<span class="currpage">' . $i . '</span> | ';
        else{
            $sStr .= $sLink . $i . '">';
            if($i==$startPage && $i > 1) $sStr .= '...';
            $sStr .= $i;
            if($i==$endPage && $i < $iNumPages) $sStr .= '...';
            $sStr .= '</a> | ';
        }
    }
    if($CurPage < $iNumPages)
        $sStr .= $sLink . ($CurPage+1) . '" rel="next">'.$snext.'</a> ' . $sLink . $iNumPages . '"><span style="font-family:Verdana;font-weight:bold">&raquo;</span></a>';
    else
        $sStr .= ' '.$snext.' <span style="font-family:Verdana;font-weight:bold">&raquo;</span>';
    if($nofirstpage) $sStr = str_replace(array('&amp;pg=1"','?pg=1"'),'" rel="start"',$sStr);
    return($sStr);
}
函数writepagebar($CurPage、$inImpages、$sprev、$snext、$sLink、$nofirstpage){
$startPage=最大值(1,圆形(地板((双倍)$CurPage/10.0)*10);
$endPage=min($iNumPages,圆形(地板((双)$CurPage/10.0)*10)+10);
如果($CurPage>1)
$sStr=$sLink.'1'.'rel=“prev”>«;'.$sLink.($CurPage-1)。“>.$sprev.”;
其他的
$sStr=“«;”.$sprev.“|”;
对于($i=$startPage;$i 1)$sStr.='…';
$sStr.=$i;
如果($i==$endPage&$i<$inImpages)$sStr.='…';
$sStr.=“|”;
}
}
如果($CurPage<$iNumPages)
$sStr.=$sLink。($CurPage+1)。'“rel=”next“>”.$snext.“.$sLink.$iNumPages.“>”;
其他的
$sStr.='$snext.»;';
如果($nofirstpage)$sStr=str_replace(数组('&;pg=1','pg=1'),'rel=“start”,$sStr);
回报(sStr);
}
如果有助于了解writepagebar函数如何适合incproducts.php(它本身位于products.php页面中),您可以在这里看到:-


分析您的代码,似乎$sLink是包含'products.php?cat=20'值的人,该函数仅附加页面值,因此您可能需要修改另一个函数

换句话说,writepagebar()只将页码附加到生成的链接。
您必须使用'products.php?cat=20'字符串搜索调用writepagebar()的用户,并在该级别进行修改。

在“nitbuntu”的评论后编辑:-

在函数中,而不是在这些行中:-

    $sStr = str_replace(array('&amp;pg=1"','?pg=1"'),'" rel="start"',$sStr);
    return($sStr);
}
写下以下几行:-

    $sStr = str_replace('products.php?cat=20', 'widgets', $sStr);
    $sStr = str_replace('&amp;pg=', '?pg=', $sStr);
    $sStr = str_replace(array('&amp;pg=1"', '?pg=1"'), '" rel="start"', $sStr);
    return($sStr);
}

希望有帮助。

你能告诉我你写的这个函数的当前输出是什么,以及链接当前显示的一些示例吗?例如,如果我访问“mywebsite.com/widgets”页面,然后单击发送页面,它会导致:-“mywebsite.com/products.php?cat=20&pg=2”。如果我单击第三个页面,它会ds至:-'mywebsite.com/products.php?cat=20&pg=3'。我希望它能导致:-'mywebsite.com/widgets?pg=2'的第二页或'mywebsite.com/widgets?pg=3'的第三页。同样,如果访问'mywebsite.com/doodaas'页面,我希望第二页的编号指向:-'mywebsite.com/doodaas?pg=2'。我已经在上面添加了一个链接显示writepagebar函数在incproducts.php页面上的位置。incproducts.php页面本身就是products.php的主要部分。请检查我编辑的答案。感谢您的贡献,但执行您提到的操作会导致第二页链接-'products.php?cat=20?pg=2',这将导致错误的页面。似乎所有这些更改的是“&”改为“?”。我会测试一下。但这只适用于“小部件”。如果我需要多做几页。例如,如果我还有另一个名为“涂鸦”的页面,对应于“products.php?cat=21”……和另一个名为“dogs”的页面,对应于“products.php?cat=22”。我会添加额外的内容吗代码中的行数?我对上述评论的回答似乎是“是”。对于“涂鸦”,我刚刚添加了“$sStr=str_replace('products.php?cat=21”,“doodles',$sStr);”。太棒了,谢谢!@nitbuntu-对不起,我不能足够快地回答你的上一条评论。但是,是的,你需要在代码中添加额外的行数。谢谢你掌握了。