سؤال

أنا أستخدم PHP لإنشاء ترقيم الصفحات لجدول.أنا أستخدم الكود التالي لإنشاء رابط ترقيم الصفحات

<a class='page-numbers' href='$href&pagenum=$i'>$i</a>

مع $href

$href = $_SERVER['REQUEST_URI'];

إنه يعمل بشكل جيد، ولكنه يعبث بشريط العناوين، ويضيف في كل مرة معلمة pagenum جديدة.وبذلك يصبح pagenum=1&pagenum=3&pagenum=4....

كيفية تحسين ذلك؟

هل كانت مفيدة؟

المحلول

وماذا عن هذا؟ذهبت واختبارها، للتأكد :)

<?php
    $new_get = $_GET; // clone the GET array
    $new_get['pagenum'] = $i; // change the relevant parameter
    $new_get_string = http_build_query($new_get); // create the foo=bar&bar=baz string
?>
<a class="page-numbers" href="?<?php echo $new_get_string; ?>">
    <?php echo $i ?>
</a>

لاحظ أيضًا أن الكل $href قليلا غير ضرورية.إذا بدأت الخاص بك href مع ?, ، سيقوم المتصفح بتطبيق سلسلة الاستعلام على المسار الحالي.

أراهن أنك ستقوم بالتكرار، لذا إليك إصدار مُحسّن لإنتاج 10000 رابط لأرقام الصفحات.لقد وضعت مقاييس الأداء الخاصة بي على أنها أسرع قليلاً من أي وقت مضى عند أعداد كبيرة من الروابط، نظرًا لأنك تقوم فقط بتسلسل السلسلة بدلاً من إنشاء استعلام HTTP كامل، ولكن قد لا يكون ذلك كافيًا لإثارة القلق بشأنه.يكون الاختلاف كبيرًا حقًا فقط عندما يكون هناك خمسة أو ستة معلمات GET، ولكن عندما يكون هناك، تكتمل هذه الإستراتيجية في حوالي نصف الوقت على جهازي.

<?php
    $pageless_get = $_GET; // clone the GET array
    unset($pageless_get['pagenum']); // remove the pagenum parameter
    $pageless_get_string = http_build_query($pageless_get); // create the foo=bar&bar=baz string
    for($i = 0; $i < 10000; $i++):
        // append the pagenum param to the query string
        $page_param = "pagenum=$i";
        if($pageless_get_string) {
            $pageful_get_string = "$pageless_get_string&$page_param";
        } else {
            $pageful_get_string = $page_param;
        }
?>
    <a class="page-numbers" href="?<?php echo $pageful_get_string; ?>">
        <?php echo $i ?>
    </a>
<?php endfor ?>

نصائح أخرى

$url = $_SERVER['REQUEST_URI'];
$urlparams = parse_url($url);
if(isset($urlparams['query']){
   parse_str($urlparams['query'],$vars);
   $vars['pagenum'] = $i;
   $urlparams['query'] = http_build_query($vars);
} else {
   $urlparams['query'] = 'pagenum='.$i;
}
$url = http_build_url($urlparams);
//http_build_url() is in PECL, you might need to manually rebuild the 
//url by looping through it's components:
/*
   $url=(isset($urlparams["scheme"])?$urlparams["scheme"]."://":"").
       (isset($urlparams["user"])?$urlparams["user"]:"").
       (isset($urlparams["pass"])? ":".$urlparams["pass"]:"").
       (isset($urlparams["user"])?"@":"").
       (isset($urlparams["host"])?$urlparams["host"]:"").
       (isset($urlparams["port"])?":".$urlparams["port"]:"").
       (isset($urlparams["path"])?$urlparams["path"]:"").
       (isset($urlparams["query"])?"?".$urlparams["query"]:"").
       (isset($urlparams["fragment"])?"#".$urlparams["fragment"]:""); 
*/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top