0

下面是分页函数中的以下代码,我试图理解我不明白的部分if(!pages){ $pages =1)} 是他们指的是什么。如果什么不是 $pages 变量。我想说的是要比较的 Pages 变量是什么,如果不是什么。我很困惑

if($pages == '')
     {
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages)
         {
             $pages = 1;
         }
     } 

这是完整的功能,我试图逐个理解它,以便我可以重写而无需分页中的数字只有左右。

function kriesi_pagination($pages = '', $range = 2)
{  
     $showitems = ($range * 2)+1;  

     global $paged;
     if(empty($paged)) $paged = 1;

     if($pages == '')
     {
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages)
         {
             $pages = 1;
         }
     }   

     if(1 != $pages)
     {
         echo "<div class='pagination'>";
         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo;</a>";
         if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo;</a>";

         for ($i=1; $i <= $pages; $i++)
         {
             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
             {
                 echo ($paged == $i)? "<span class='current'>".$i."</span>":"<a href='".get_pagenum_link($i)."' class='inactive' >".$i."</a>";
             }
         }

         if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."'>&rsaquo;</a>";  
         if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>&raquo;</a>";
         echo "</div>\n";
     }
}
4

4 回答 4

2

如果什么不是页面,则 if 语句中的代码很有趣。

您的代码“全球化”了$wp_query对象,以便在函数范围内可以访问它。然后设置$pages$wp_query->max_num_pages。然后检查该值以确定是否执行if. 它的工作原理有点棘手,但你去吧。

PHP 认为有几件事是FALSE

  • 布尔值 FALSE 本身
  • 整数 0(零)
  • 浮点数 0.0(零)
  • 空字符串和字符串“0”
  • 一个元素为零的数组
  • 具有零成员变量的对象(仅限 PHP 4)
  • 特殊类型 NULL(包括未设置的变量)
  • 从空标签创建的 SimpleXML 对象

如果这些匹配都不为$pages真,这通常会触发if执行,但匹配会与!. 因此,如果$pages设置为某个真值,则if条件是false并且if不运行 - 不理会$pages。如果$pages设置为某个false值,则if条件为true,它会执行,并且 pages 设置为 1。

于 2013-02-09T22:57:43.490 回答
2

这有几个部分:

  • True并且False是可以保存在变量中的值。这种类型的值称为布尔值。而不是if ($a == $b) { ... }你可以说$c = ($a == $b);,然后再做if ($c) { ... }。这种布尔概念对于大多数(如果不是所有)编程语言都是通用的。
  • 在 PHP 中(但不是在所有语言中),如果您将非布尔变量视为布尔变量(例如,通过使用 测试它if,或将其与andor组合or)它不会是错误,并且变量将得到使用某些规则转换。基本上大多数东西都转换为真(它们是“真”),除了 0、NULL、空数组、空字符串和其他一些东西,它们会转换为假(它们是“假的”)。

因此,if (!$pages) { $pages = 1; }在您的示例中,如果页数为零,请确保至少有一个。这是一种较短的说法if ($pages == 0)

于 2013-02-09T23:12:38.043 回答
1

条件检查是否$pages0。布尔值truefalse通常由二进制文件10分别定义。因此,if(!$pages)意味着“如果 的值$pages评估为false(或0),则执行条件体并设置$pages1”。相反,if($pages)将意味着execute the condition body if $pages > 0.

于 2013-02-09T22:53:05.153 回答
0

我不确定这是什么语言,但它应该清楚地定义什么算作“真”和“假”,其中需要布尔表达式。例如,在 C 中,任何非零整数值都是“真”;其他任何东西都是“假的”。一些语言还将定义哪些字符串值被认为是“真”或“假”。这正是代码中的 if 语句正在做的事情。

于 2013-02-09T22:53:12.910 回答