php新手,最近在看typecho的源码,遇到一个很困惑的问题:
user/themes/default文件夹里的index.php,有this->pageNav,而Widget_Archive里也有pageNav,当index.php里执行this->pageNav时,会执行Widget_Archive里的pageNav
请问,为什么会这样执行呢? 我在Widget_Archive里只看到有:
require_once $this->_themeDir . $this->_themeFile;
这样一句话。难道是require进来了,就能在前台的index.php文件里,执行后台的pageNav函数?
user/themes/default/index.php里的pageNav代码:
< "?php $this->pageNav('« 前一页', '后一页 »'); ?>"
Widget_Archive里的pageNav代码:
/**
* 输出分页
*
* @
access public
* @
param string $prev 上一页文字
* @
param string $next 下一页文字
* @
param int $splitPage 分割范围
* @
param string $splitWord 分割字符
* @
param string $template 展现配置信息
* @
return void
*/
public function pageNav($prev = '«', $next = '»', $splitPage = 3, $splitWord = '...', $template = '')
{
if ($this->have()) {
$hasNav = false;
$default = array(
'wrapTag' => 'ol',
'wrapClass' => 'page-navigator'
);
if (is_string($template)) {
parse_str($template, $config);
} else {
$config = $template;
}
$template = array_merge($default, $config);
$total = $this->getTotal();
$this->pluginHandle()->trigger($hasNav)->pageNav($this->_currentPage, $total,
$this->parameter->pageSize, $prev, $next, $splitPage, $splitWord);
if (!$hasNav && $total > $this->parameter->pageSize) {
$query = Typecho_Router::url($this->parameter->type .
(false === strpos($this->parameter->type, '_page') ? '_page' : NULL),
$this->_pageRow, $this->options->index);
/** 使用盒状分页 */
$nav = new Typecho_Widget_Helper_PageNavigator_Box($total,
$this->_currentPage, $this->parameter->pageSize, $query);
echo '<' . $template['wrapTag'] . (empty($template['wrapClass'])
? '' : ' class="' . $template['wrapClass'] . '"') . '>';
$nav->render($prev, $next, $splitPage, $splitWord, $template);
echo '</' . $template['wrapTag'] . '>';
}
}